我正在使用Google Cloud Messaging并管理用户设备服务器端,我将GCM注册ID和用户设备ID存储在我的数据库中。您可以获得类似的设备ID:
public static String getDeviceID(Context context) {
final String deviceId = ((TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE)).getDeviceId();
if (deviceId != null) {
return deviceId;
} else {
return android.os.Build.SERIAL;
}
}
由于Android 6.0我遇到问题,因为要阅读设备ID,您需要使用危险权限android.permission.READ_PHONE_STATE
。因此,当用户使用我的应用程序和自动后台进程注册GCM服务时,他会自动被要求授予make and manage phone calls
的权限,在我看来,这对用户来说完全是混乱的。他不明白为什么应用程序需要make and manage phone calls
,我也不想要另一个对话框来解释用户为什么应用程序需要此权限。它会使应用程序变得复杂,并且对某些用户来说有点令人沮丧。
我想解决这个问题所以我不得不问是否有其他方法可以在不需要任何危险许可的情况下单独识别用户设备。
必须满足以下要求:
原因很简单:
当然,我可以将目标SDK设置为< 23
,但有一天,当您需要6.0或更高版本API的新功能时,无论如何都必须更新系统。
我也不想让用户为此目的做出决定的自由,因为如果用户不授予READ_PHONE_STATE
权限,则会破坏App的整个实时更新,消息传递和同步系统。 / p>