- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
根据docs InstanceId:
provides a unique identifier for each app instance
并且实例 ID 稳定但可能会失效,如果:
- App deletes Instance ID
- Device is factory reset
- User uninstalls the app
- User 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”的应用首选项中的 key 对支持;
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(...) 命令之后从注册 token (它是冒号前的第一部分)获取此 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,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31294118/
这是执行InstanceID instanceID时显示的错误。 'android.app.AppOpsManager', referenced from method com.google.andr
我正在使用 swift 和 firebase。以前我使用以下方法获取 firebase token ,然后我用它存储到数据库中以发送通知。 InstanceID.instanceID().token(
我在 apk 构建中遇到一些错误。这是我的代码。 package com.my.mybooks.services; import android.util.Log; import com.google
我在一个应用中实现了谷歌云消息传递。首先,我使用 InstanceID 获取 token ,下一步是在我的服务器中注册设备,然后我获取一个 HttpResponse。根据此响应,我想删除 token
您好,我正在尝试在我的应用程序中包含 firebase 并遵循文档,当我尝试进行 google 登录时,出现无法配置 Firebase InstanceID 错误。请告知如何克服此错误 最佳答案 有两
我正在试用 Play Services GCM 7.5。但是,拥有 InstanceID 类看起来不错。但是,每次我将应用程序从“最近的任务”中滑出或强行停止应用程序时,实例 ID 字符串都会发生变化
假设我有一个 PlayerData ScriptableObject,它包含对 AvatarData ScriptableObject 的引用,如下所示: public class PlayerDat
我正在尝试使用 Get-Job 和 Wait-Job 等作业 cmdlet 来管理计划作业的实例。我遇到了问题,感觉缺少一些基本的东西。 我发现,如果我想使用 Job cmdlet 处理计划的作业实例
我在iOS应用程序中实现了Firebase Cloud Messaging。除了一件事,一切似乎都可以正常工作,事实是从应用程序启动到将要在Firebase中刷新设备 token 大约需要10秒钟。
我尝试使用可移植.net 程序集 中的辅助类从持久WCF 服务 获取instanceId。要检索 ID,我需要调用: IClientChannel.GetProperty()... 但是 IConte
我不明白: FirebaseAuth.getInstance().currentUser.getIdToken(true).addOnSuccessListener { Log.d("tag"
我最近更新了我的 SWIFT 应用程序 pod 文件,并且由于该 firebase 版本现在更新到 5.2。现在在获取设备实例 ID 时出现以下错误。 let tokenId = InstanceID
我对 Java 编程和一般编程还很陌生。现在我决定制作我自己的应用程序,该应用程序应该使用谷歌云消息传递。不知何故我成功了,但后来我意识到我使用了方法 String regid = gcm.regis
根据docs InstanceId: provides a unique identifier for each app instance 并且实例 ID 稳定但可能会失效,如果: App delet
我第一次尝试在我的应用程序中实现 GCM,所以我按照这些步骤进行操作,但出现了一个错误,导致我的应用程序无法获得用于在我的 sv 中注册的 token 。 它说: 09-30 23:05:52.196
在 .NET 4.0 下的 Windows Workflow Foundation 中,有没有一种方法可以根据长时间运行的持久化工作流的 InstanceId (GUID) 来关联操作? 例如: 操作
在我的Xamarin.iOS项目中,我更新了Firebase nuget程序包,完成更新后,我开始在此代码上出错 //You'll need this method if you set "Fireb
在 jQuery 插件代码中,我看到以下内容: $window.on('resize.' + instance.guid, function () { instance.registerTim
由于 GCM 不断更新,我搜索过的大部分资源似乎都已过时或不清楚。基本上,我对 token 和 ID 何时到期感到困惑。 (作为引用,我正在使用 Android。) 据我了解(如果我错了,请纠正我),
我想在 Android 上实现 GCM 客户端。 按照这里的指南 https://developers.google.com/cloud-messaging/android/client 我已经下载了
我是一名优秀的程序员,十分优秀!