我正在为ios和android开发一个使用phonegap的应用程序。 我的应用程序将免费试用5个项目,用户必须支付的每个额外项目。
我的问题是我无法使用我的应用程序获取设备的任何唯一标识符,因此用户可以使用5个免费项目,然后卸载并重新安装应用程序并获得5个免费项目。
我尝试过使用phonegap api提供的device.udid,但每次重新安装时都会更改。
有什么想法吗?
答案 0 :(得分:5)
获取设备的MAC地址并对其执行SHA1哈希以进行模糊处理。有开源代码可供Android和iOS设备使用。
无论您将来是否继续使用PhoneGap或编写本机代码,此类解决方案都能正常运行。此外,就App审核流程而言,Apple没有任何问题。
更新:这是通过iOS 6获得的正确答案,但是对于iOS SDK大于6的所有版本,这是不再可能的。任何使用以前工作的低级别呼叫的尝试总是返回2的MAC地址。广告ID和AdSupport.framework是唯一的方法。如果你有越狱手机并且可以获得root权限,它可能仍然有效。不确定。
答案 1 :(得分:1)
就个人而言,我发现一个独特的Android ID的最佳方法是生成一个16-26个字母数字字符的随机字符串,检查它在您的服务器上是否存在,然后将其保存在本地首选项中。
我已尝试过其他方法来获取唯一ID(IE。电话管理器),但我所知道的所有方法都有可能返回null(这根本不好)。如果其他人有更好的方式无法返回null,我很乐意听到它。
答案 2 :(得分:1)
使用设备IMEI如下 -
活动文件:
public class Welcome extends Activity {
private TextView display;
private Button checkAgain;
private TelephonyManager telephonyManager;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
display = (TextView) findViewById(R.id.display);
checkAgain = (Button) findViewById(R.id.buttonCheckAgain);
display.setText("");
telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
updateDisplay();
checkAgain.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
updateDisplay();
}
});
}
private void updateDisplay() {
display.setText(getDeviceID(telephonyManager));
System.out.println("Display upadated");
}
private String getDeviceID(TelephonyManager phonyManager) {
String id = phonyManager.getDeviceId();
if (id == null) {
id = "not available";
}
int phoneType = phonyManager.getPhoneType();
switch (phoneType) {
case TelephonyManager.PHONE_TYPE_NONE:
return "NONE: " + id;
case TelephonyManager.PHONE_TYPE_GSM:
return "GSM: IMEI=" + id;
case TelephonyManager.PHONE_TYPE_CDMA:
return "CDMA: MEID/ESN=" + id;
default:
return "UNKNOWN: ID=" + id;
}
}
}
您需要此权限:
<uses-permission android:name="android.permission.READ_PHONE_STATE" />