android–InstanceId #getId()不返回稳定的Id

android–InstanceId #getId()不返回稳定的Id,第1张

概述根据docsInstanceId:providesauniqueidentifierforeachappinstance如果出现以下情况,则实例ID是稳定的,但可能会失效:AppdeletesInstanceIDDeviceisfactoryresetUseruninstallstheappUserclearsappdata但是,根据我的测试,即使应用程序仅从最近一

根据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所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1118147.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存