android - android,FCM如何知道令牌应该发送的时间和对象
问题描述
测试 FCM 只需要创建一个 FirebaseMessagingService 并运行应用程序,token 将通过其 onNewToken(String token) 传递给它。(肯定需要使用 FCM 控制台创建一个项目,并下载 google-service.json)。
问题是 FCM 如何知道有一个应用程序刚刚开始运行并且 FCM 应该将令牌发送给它(如何)?
测试项目只有一个mainActivity:
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
}
和服务:
public class MyFirebaseMessagingService extends FirebaseMessagingService {
@SuppressLint("LongLogTag")
@Override
public void onNewToken(String token) {
Log.d(TAG, "Refreshed token: " + token);
}
@SuppressLint("LongLogTag")
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
Log.d(TAG, "From: " + remoteMessage.getFrom());
//...
}
}
另外添加了从 FCM 项目控制台获得的 google-services.json。并在相应的 build.gradle 中添加了应用插件,遵循 google FCM 站点说明:
apply plugin: 'com.google.gms.google-services'
dependencies {
classpath 'com.google.gms:google-services:4.3.3'
并在清单中:
<service android:name="com.demo.mytestfcmnotificationdemo.MyFirebaseMessagingService">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT"/>
</intent-filter>
</service>
解决方案
它实际上以相反的方式工作:当您的应用程序启动时,它会调用 FCM 服务并询问它们它拥有的令牌是否仍然有效。如果它不再有效,它会获取一个新的令牌,然后调用这个onNewToken
处理程序。
因此 FCM 不会主动扫描需要更新的令牌,而是等待设备伸出手并检查其令牌的状态。
推荐阅读
- quasar-framework - 如何完全禁用 Quasar 的 LoadingBar?
- python - python numpy创建数据集列:仅根据条件添加值,否则为null
- excel - 如何根据具有可变位置的另一个单元格设置单元格值
- reactjs - 如何使用 React 测试库测试 Material UI 选择组件
- python - 在 Python (Selenium) 中从 CSV 文件读取和写入变量
- reactjs - 无法从 Spring Boot 应用程序在浏览器中设置 HTTP Cookie
- css - 使用 CSS 网格重复模拟内联块,但防止占用未使用的空白
- data-science - 这个 P 论点有什么问题
- javascript - 如何让 babel-node 将 Workers 引用的文件转换为 commonjs?(就像 babel 一样)
- php - 想要将 quickbooks 桌面与 php 集成