有没有办法为特定的独特设备构建应用程序?假设我有一个Android设备,我想只为该设备创建一个apk文件,那个apk不能安装在任何其他设备上,是否可能?
可能重复:
是否有唯一的Android设备ID?
我使用下面的代码来获取Android设备IMEI,我如何更改下面的代码来获取Android设备唯一ID.
String getDeviceID1(TelephonyManager phonyManager){
String id = phonyManager.getDeviceId();
if (id == null){
id = "not available";
}
int phoneType = phonyManager.getPhoneType();
switch(phoneType){
case TelephonyManager.PHONE_TYPE_NONE:
return "" + id;
case TelephonyManager.PHONE_TYPE_GSM:
return "" + id;
case TelephonyManager.PHONE_TYPE_CDMA:
return "" + id;
/*
* for API Level 11 or above
* case TelephonyManager.PHONE_TYPE_SIP:
* return "SIP";
*/
default:
return "" + id;
}
//I used to show IMEI
TextView textDeviceID = (TextView)findViewById(R.id.deviceid);
//retrieve a reference to an instance of TelephonyManager …Run Code Online (Sandbox Code Playgroud) 在我的应用程序中,一旦我注册了一个设备,它就会被存储为持久数据,以便检查设备是否已经注册.
在服务器端,我将它们与user_id一起存储在数据库中,user_id是用户的唯一ID.
[user_id] [gcm_registration_id]
现在我无法解决这个案子:
如果用户注销:
必须清除存储在SharedPreferences中的registration_id,因为其他用户可能会在下次启动应用程序时登录.
另外,我必须从我的数据库中删除与该registration_id相对应的行,因为该设备(当前没有登录用户)不得再接收任何通知.
问题是我的数据库使用canonical_ids更新或者说我在调用时得到的最新registration_ids
https://android.googleapis.com/gcm/send
因此,我有可能找不到要删除的已注销用户的旧registration_id,这仍然允许向未登录的用户发送通知.
此外,我无法删除与我的数据库匹配user_id的行,因为用户可能只从1个设备注销,而且他/她仍然登录的设备较少.
我如何知道对于此特定用户和设备,注册ID是否已更改?
我应该将所有旧的注册ID及其相应的canonical_id存储在我的数据库中吗?
我正在开发一个允许用户从多个Android设备登录的应用程序(服务器 - 安卓客户端).当用户登录设备时,该设备将在服务器端注册,但我不知道如何避免重复,所以我想知道有没有机会唯一识别Android设备?我认为Google Play和Facebook可以做到这一点.
我需要一个在卸载并重新安装应用程序后仍然存在的设备标识符。我知道 UUID 类为该方法提供了一个标识符
String uniqueID = UUID.randomUUID().toString();
Run Code Online (Sandbox Code Playgroud)
但 Android 指南对其范围和持久性尚不清楚。在下一段它说:
Android 操作系统提供了许多具有不同行为特征的 ID,您应该使用哪个 ID 取决于以下特征如何与您的用例配合使用。但这些特征也伴随着隐私问题,因此了解这些特征如何共同发挥作用非常重要。
范围
标识符范围解释了哪些系统可以访问标识符。Android 标识符范围通常分为三种:
单个应用程序。ID 是应用程序内部的,其他应用程序无法访问。
应用程序组- 一组预定义的相关应用程序可以访问该 ID。
设备- 该 ID 可供设备上安装的所有应用程序访问。授予标识符的范围越广,其被用于跟踪目的的风险就越大。相反,如果标识符只能由单个应用程序实例访问,则它不能用于跨不同应用程序中的事务跟踪设备。
可重置性和持久性
可重置性和持久性定义了标识符的生命周期并解释了如何重置它。常见的重置触发器有:应用内重置、通过系统设置重置、启动时重置和安装时重置。Android 标识符可以有不同的生命周期,但生命周期通常与 ID 的重置方式有关:
仅会话- 每次用户重新启动应用程序时都会使用一个新 ID。
安装-重置- 每次用户卸载和重新安装应用程序时都会使用一个新 ID。
FDR 重置- 每次用户对设备进行出厂重置时都会使用一个新 ID。
FDR 持久性- ID 在出厂重置后仍然有效。
可重置性使用户能够创建与任何现有配置文件信息无关的新 ID。这很重要,因为标识符持续的时间越长、越可靠(例如跨出厂重置等),用户可能受到长期跟踪的风险就越大。如果在重新安装应用程序时重置标识符,这会减少持久性并提供重置 ID 的方法,即使没有明确的用户控制从应用程序或系统设置中重置它。
但是我不知道如何获取这些标识符,选择我的范围和持久性。谢谢
几个月来,我一直在使用一个类来生成一个在reintalls之间稳固的UUID.我的应用程序是关于折扣,所以我依靠这个UUID来限制每台设备的优惠券数量.
protected void getDeviceId(){
try {
Context context = cordova.getActivity().getApplicationContext();
TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
String uuid;
String androidID = Secure.getString(context.getContentResolver(), Secure.ANDROID_ID);
String deviceID = tm.getDeviceId();
String simID = tm.getSimSerialNumber();
if ("9774d56d682e549c".equals(androidID) || androidID == null) {
androidID = "";
}
if (deviceID == null) {
deviceID = "";
}
if (simID == null) {
simID = "";
}
uuid = androidID + deviceID + simID;
uuid = String.format("%32s", uuid).replace(' ', '0');
uuid = uuid.substring(0, 32);
uuid = uuid.replaceAll("(\\w{8})(\\w{4})(\\w{4})(\\w{4})(\\w{12})", "$1-$2-$3-$4-$5"); …Run Code Online (Sandbox Code Playgroud) 如何验证通过php中的Secure.ANDROID_ID检索的ID?
我正在编写使用它们的应用程序的服务器端,但希望确保包含无效/伪造的Android ID的请求不会得到响应.
我需要android.os.Build类的固定属性列表.我从这里获得了这个列表,我把那些我知道的那些大胆修复了.通过修复我的意思是没有固件更新,重置工厂,...
android.os.Build.VERSION.RELEASE //当前开发代号,如果是发布版本,则为字符串"REL".
android.os.Build.BOARD //底层板的名称,如"goldfish".
android.os.Build.BOOTLOADER //系统引导程序版本号.
android.os.Build.BRAND //软件定制的品牌(例如,运营商),如果有的话.
android.os.Build.CPU_ABI //本机代码的指令集名称(CPU类型+ ABI约定).
android.os.Build.CPU_ABI2 //本机代码的第二个指令集(CPU类型+ ABI约定)的名称.
android.os.Build.DEVICE //工业设计的名称.
android.os.Build.DISPLAY //用于向用户显示的构建ID字符串
android.os.Build.FINGERPRINT //唯一标识此构建的字符串.
android.os.Build.HARDWARE //硬件的名称(来自内核命令行或/ proc).
android.os.Build.HOST
android.os.Build.ID //更改列表编号或"M4-rc20"之类的标签.
android.os.Build.MANUFACTURER //产品/硬件的制造商.
android.os.Build.MODEL //最终产品的最终用户可见名称.
android.os.Build.PRODUCT //整个产品的名称.
android.os.Build.TAGS //描述构建的逗号分隔标签,如"unsigned,debug".
android.os.Build.TYPE //构建类型,如"user"或"eng".
android.os.Build.USER
请帮我完成清单
我想在我的android应用程序中只运行一次特定的代码.共享首选项解决方案不是解决方案,因为当您转到应用程序管理器并执行清除数据时,共享首选项会被删除,因此应用程序将其视为新的全新安装.我甚至尝试过失败的Application类,它与共享首选项一样.任何帮助,除共享偏好和应用程序类别将不胜感激.
谢谢.
android android-intent sharedpreferences android-install-apk
该文档说明了iOS/Windows版本中使用的标识符,而不是Android版本.SystemInfo.deviceUniqueIdentifier在Android 上使用什么标识符?