首页 > 解决方案 > 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>

标签: androidfirebase-cloud-messaging

解决方案


它实际上以相反的方式工作:当您的应用程序启动时,它会调用 FCM 服务并询问它们它拥有的令牌是否仍然有效。如果它不再有效,它会获取一个新的令牌,然后调用这个onNewToken处理程序。

因此 FCM 不会主动扫描需要更新的令牌,而是等待设备伸出手并检查其令牌的状态。


推荐阅读