我有三星Galaxy Tab 2.0(7")
在此设备的背面是格式的序列号
RF3C6000MNA
当我进入设备的设置,然后选择关于设备 - >状态 - >序列号时,也会出现此编号.
但是,我不能找到一种以编程方式提取此数字的方法.
我已经看过很多关于提取序列号的文章,但这会返回一个完全不同的数字.(使用android.os.Build.SERIAL)
我已经提取了IMEI和MAC地址,所以我不需要代码.
我想获得每个Android设备唯一的设备ID.我目前正在开发平板电脑设备.想获得唯一的设备ID并存储相应的值...
所以,我想知道如果我使用TelephonyManager.getDeviceId()......,平板电脑设备是否会返回一个值?或者是否有任何其他值对每个设备唯一?
为了管理用户偏好,目前我正在抓取谷歌用户名(实际上是他们已经注册到设备的电子邮件地址)并使用(散列)作为"用户ID"来区分不同的用户.与此处描述的内容类似.
这一切都运行正常,但有些用户(可以理解)被任何许可吓到了,似乎给应用程序一些邪恶的力量来浏览他们的帐户信息或联系人.
编辑:谷歌现在在Android 6 运行时权限模式中实现权限组的方式更加严重.他们已经进入了许可组.现在,为了生成唯一的匿名用户ID,必须向用户显示一个对话框,其中显示:GET_ACCOUNTSCONTACTS
允许此应用访问您的联系人?| 拒绝| 允许|
这有多误导?我的应用程序不希望访问联系人,但要求用户授予该应用程序访问联系人的权限!是的,有机会向用户解释一个单独的对话框,事实上,不需要访问联系人,但是他们仍然得到股票系统对话框,要求他们授予访问联系人的权限......自然他们会想"如果不需要访问联系人,为什么我被要求授予此权限?" 并且"我真的相信开发者吗?他们说不需要访问联系人,但这是真的吗?"......非常混乱,用户体验非常糟糕恕我直言(以及其他人的意见).
我宁愿避免所有这些麻烦和混乱,并获得唯一的用户ID,而无需特殊权限.
那么SDK中是否有一个库存函数或方法,它将为用户返回唯一的用户ID,而不需要任何其他权限?如果没有,我会感到很惊讶,因为想要做的事情似乎很常见......拥有用于管理应用用户的用户ID.
两点:
(a)我只需要一个匿名用户ID ......我实际上并不需要用户的电子邮件地址,也不需要用户的电子邮件地址.因此,我无法getUserID()理解为什么谷歌无法提供返回唯一匿名ID的方法,而无需向应用授予特殊权限.
(b)它必须是用户ID,而不是设备ID,以便它可以在注册到同一个Google帐户的所有用户设备上运行.
谢谢.
我看到了一个我最好的问题是否有一个独特的Android设备ID?
我使用了一些以下代码来获取唯一ID.
public static String getDeviceId(Activity context) {
PermissionsChecker checker = new PermissionsChecker(context);
if (checker.lacksPermissions(Manifest.permission.READ_PHONE_STATE))
PermissionsActivity.startActivityForResult(context, 0, REQUIRED_PERMISSION);
else {
TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
final String tmDevice = tm.getDeviceId();
final String androidId = Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ANDROID_ID);
UUID deviceUuid = new UUID(androidId.hashCode(), ((long) tmDevice.hashCode() << 32));
return deviceUuid.toString();
}
return null;
}
Run Code Online (Sandbox Code Playgroud)
但是我在悬停时会收到一些警告
tm.getDeviceId();
和
Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ANDROID_ID);
如下:
建议不要使用getString来获取设备标识符.
除高价值防欺诈和高级电话用例外,不建议使用设备标识符.对于广告用例,请使用AdvertisingIdClient $ Info#getId并使用InstanceId#getId进行分析.
有什么解决方案吗?它有害还是其他什么?
android telephonymanager android-identifiers android-settings
希望在Android M上获取Wifi MAC地址的Android开发人员可能遇到了以下问题:获取MAC地址的标准Android OS API返回虚假MAC地址(02:00:00:00:00:00)而不是真实MAC地址值.
获取Wifi MAC地址的常规方法如下:
final WifiManager wifiManager = (WifiManager) getApplication().getApplicationContext().getSystemService(Context.WIFI_SERVICE);
final String wifiMACaddress = wifiManager.getConnectionInfo().getMacAddress();
Run Code Online (Sandbox Code Playgroud) 目前,我使用MAC地址作为Android设备的标识符.
WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
WifiInfo wInfo = wifiManager.getConnectionInfo();
String mac = wInfo.getMacAddress();
Run Code Online (Sandbox Code Playgroud)
但是,我发现mac某些用户的设备是空的.我有点困惑为什么它可能是空的.
如果你能找出原因,那就是最好的!
否则,您能否提供识别Android设备的替代方案?
我正在寻找一种使用唯一标识符安全地识别移动设备的方法.每次我在特定设备上安装我的应用程序时,我都应该获得相同的唯一标识符.此标识符将上载到服务器后端并保存以供将来参考.
必须在不依赖手机的IMEI号码的情况下实现这一点.苹果早已禁止它用于iOS,谷歌可能会在明天为Android做同样的事情.
对于Android,至少有ANDROID_ID.iOS怎么样?什么都没有?
Android和iOS都必须采用标准的,万无一失的方式.我对任何/所有/付费/免费/本地/第三方解决方案感兴趣.其他公司为解决这个问题做了什么?
我已阅读以下帖子:
1. 识别应用程序安装.
4. iOS上的持久交叉安装设备标识符:使用Keychain.
5. UIDevice uniqueIdentifier已弃用 - 现在该怎么办?
7. iOS7 - 设备唯一标识符.
8.将 唯一ID实现为UUID并将其保存在Keychain中.
我想超越这个.还有什么可以做的?那里有一个全面的,一劳永逸的防弹解决方案吗?
我需要在服务器上注册用户设备,其唯一标识符是一个常量值,并且将来不会更改.
我找不到一个很好的解决方案来获取所有设备的唯一ID(有/没有simcard).
Secure.ANDROID_ID:Secure.ANDROID_ID不是唯一的,可以为null或在出厂重置时更改.
String m_androidId = Secure.getString(getContentResolver(), Secure.ANDROID_ID);
Run Code Online (Sandbox Code Playgroud)
IMEI:IMEI依赖于设备的Simcard插槽,因此无法为不使用Simcard的设备获取IMEI.
TelephonyManager tManager = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
String uuid = tManager.getDeviceId();
Run Code Online (Sandbox Code Playgroud)
WLAN MAC地址:如果设备没有wifi硬件,则返回空MAC地址.用户可以更改设备的mac地址.
WifiManager m_wm = (WifiManager)getSystemService(Context.WIFI_SERVICE);
String m_wlanMacAdd = m_wm.getConnectionInfo().getMacAddress();
Run Code Online (Sandbox Code Playgroud)
蓝牙地址字符串:如果设备没有蓝牙硬件,则返回null.
BluetoothAdapter m_BluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
String m_bluetoothAdd = m_BluetoothAdapter.getAddress();
Run Code Online (Sandbox Code Playgroud)
实例ID:当用户卸载并重新安装应用程序时,instance_id将会更改.而且它不是一个恒定的价值.
您是否有任何想法从所有Android设备(有/没有SIM卡,蓝牙......)获得一个唯一的ID,它真的是唯一的,不能为空并且在卸载/重新安装应用后不会改变?
我希望能够为每个Android设备生成唯一的序列号,以用于解锁应用程序.我怎么能这样做?
编辑:
原因是我想要修改付费应用程序,并为已支付旧版本的用户提供不同的软件包名称,通过下载可解锁的应用程序免费版本来获取完整版本.我会将更新推送到旧版本,该版本将生成并显示他们可以输入的代码,以将免费版本转换为功能完整的版本.
android ×10
android-wifi ×1
ios ×1
java ×1
license-key ×1
licensing ×1
objective-c ×1
privacy ×1
tablet-pc ×1