Firebase已弃用此com.google.firebase:firebase-messaging:17.1.0版本中的一些消息传递调用.这篇文章很好地解决了这些变化.
问题:有人可以告诉我,如果不实施这是不好的做法onNewToken,而只是在每个应用程序启动时调用下面的块这对于Android人来说可能看起来过分,但从iOS的角度来看感觉就像家一样.
FirebaseInstanceId.getInstance().instanceId.addOnSuccessListener(this) { instanceIdResult ->
// Just use this call
val newToken = instanceIdResult.token
Log.i("newToken", newToken)
}
@Override
public void onNewToken(String s) {
super.onNewToken(s);
// Leave this unimplemented
}
Run Code Online (Sandbox Code Playgroud)
我更熟悉iOS,它onNewToken在每个应用程序发布时调用它.因此,对于iOS,我在那里放置逻辑以确定我的后端是否需要更新.
getInstanceId()文档说This generates an Instance ID if it does not exist yet, which starts periodically sending information to the Firebase backend.这让我想我可以调用FirebaseInstanceId.getInstance().instanceId.addOnSuccessListener每次启动.
我希望能够在我的Android应用程序中添加多个发件人ID.
来自https://developers.google.com/cloud-messaging/concept-options
GCM允许多方向同一客户端应用程序发送消息.例如,假设客户端应用程序是具有多个贡献者的文章聚合器,并且每个人都应该能够在发布新文章时发送消息.此消息可能包含URL,以便客户端应用程序可以下载该文章.GCM不必将所有发送活动集中在一个位置,而是让您能够让每个贡献者发送自己的消息.
如何使用google-services.json配置文件实现这一目标?
android firebase google-cloud-messaging firebase-cloud-messaging
我的应用程序正在接收来自 2 个 firebase 项目的推送通知。我通过分别调用“getToken(StringauthorizedEntity, Stringscope)”来获取每个发件人 ID 的令牌。
String token1 = FirebaseInstanceId.getInstance().getToken("authorizedEntity1", "FCM");
String token2 = FirebaseInstanceId.getInstance().getToken("authorizedEntity2", "FCM");
Run Code Online (Sandbox Code Playgroud)
根据onTokenRefresh文档
当系统确定需要刷新令牌时调用。应用程序应该调用 getToken() 并将令牌发送到所有应用程序服务器。这不会被频繁调用,它是密钥轮换和处理实例 ID 更改所必需的,因为:
应用程序删除实例ID
应用程序已在新设备上恢复
用户卸载/重新安装应用程序
用户清除应用数据
由于onTokenRefresh已被弃用,我已经检查了onNewToken,根据文档
在生成默认 Firebase 项目的新令牌时调用。在应用程序安装后首次生成令牌时会调用此函数,如果令牌发生更改,则会再次调用此函数。
Q1. 如果有多个发件人 ID,如何知道哪个是默认的 Firebase 项目?
Q2。假设如果“authorizedEntity1”与默认的 firebase 项目关联,那么是否意味着仅当 token1 发生更改时才会调用 onNewToken ?或者当 token2 改变时它也会被调用?如果它对 token2 不起作用那么如何知道token2需要刷新?
Q3。参考此,我的理解是,只要需要刷新任何令牌(不仅对于默认项目),就会调用 onTokenRefresh 。这种理解正确吗?
每当系统确定token1或token2需要刷新时,我想将更新的令牌发送到服务器。
注意:当我处理多个发件人 ID 时,我正在应用程序类中初始化 firebase。
我正在尝试为辅助 Firebase 应用订阅 FCM(Firebase 云消息传递)主题,根据文档,这可以通过getInstance将辅助 FirebaseApp 实例作为参数的重载来完成:
public static synchronized FirebaseMessaging getInstance (FirebaseApp app)
Run Code Online (Sandbox Code Playgroud)
获取指定 FirebaseApp 的 FirebaseMessaging 实例。
我正在使用 Kotlin,我正在build.gradle像这样拉入包:
implementation "com.google.firebase:firebase-messaging:20.2.0"
Run Code Online (Sandbox Code Playgroud)
但是当我尝试FirebaseMessaging使用重载的实例化 时getInstance,我收到一个错误,指出它不可访问。当我查看包源时,反编译表明重载的构造函数不像无参数的那样是公开的getInstance:
implementation "com.google.firebase:firebase-messaging:20.2.0"
Run Code Online (Sandbox Code Playgroud)
我错过了什么?