根据docs InstanceID:
provIDes a unique IDentifIEr for each app instance
如果出现以下情况,则实例ID是稳定的,但可能会失效:
App deletes Instance IDDevice is factory resetUser uninstalls the appUser clears app data
但是,根据我的测试,即使应用程序仅从最近一次刷过,以下调用似乎也会返回不同的ID.
InstanceID.getInstance(context).getID();
这是Google Play服务中的错误还是我使用它的错误?
解决方法:
2 tymm答案:来自客户端库实例ID代码:
boolean needRefreshToken() { String appVersion = sSharedPreferencesHelper.get("appVersion"); if (appVersion == null) { return true; } if (!appVersion.equals(sCurrentAppVersion)) { return true; } String lastTokenAcquiringTime = sSharedPreferencesHelper.get("lastToken"); if (lastTokenAcquiringTime == null) { return true; } Long l = Long.parseLong(lastTokenAcquiringTime); if (System.currentTimeMillis() / 1000 - l <= 3600*24*7) { return false; } return true; }
关于直接问题:每个实例ID都由存储在名为“com.Google.androID.gms.appID”的应用首选项中的密钥对支持; InstanceID.getInstance(context).getID()以Base64格式返回公钥的SHA-1摘要.因此,请尝试调查为什么无法从首选项恢复KeyPair;)
库代码(com.Google.androID.gms.iID.zzd.class)中存在错误:
KeyPair zzdj(String subtype) { String string2 = this.get(subtype, "|P|"); String string3 = this.get(subtype, "|K|");...
应该:
KeyPair zzdj(String subtype) { String string2 = this.get(subtype + "|P|"); String string3 = this.get(subtype + "|K|");...
所以,请在getToken(…)命令之后从注册令牌(它的第一部分直到冒号)中获取此IID.因为getID()仅初始化将用于下一个服务器请求的“promise”KeyPair,以防您的应用程序被强制从任务栏停止,从而导致完全卸载静态变量.
这是热门修复(请在调用getID()之前将其设置为:)
public voID fixPreferencesKeysID() { SharedPreferences sh = getSharedPreferences("com.Google.androID.gms.appID", MODE_PRIVATE); String privk = sh.getString("|K|", null); if (privk != null) { sh.edit().remove("|K|").putString("|S||K|", privk).commit(); } String pubk = sh.getString("|P|", null); if (pubk != null) { sh.edit().remove("|P|").putString("|S||P|", pubk).commit(); }}
总结 以上是内存溢出为你收集整理的android – InstanceId #getId()不返回稳定的Id全部内容,希望文章能够帮你解决android – InstanceId #getId()不返回稳定的Id所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)