通知服务

tar*_*110 7 android firebase firebase-cloud-messaging

我正在尝试使用firebase接收Android通知.我已经定义了以下服务.但该服务MyFirebaseInstanceIDService是第一次运行应用程序时运行.我当时甚至没有为用户提供数据库.我想为用户存储firebase令牌,但首先我想在第一个活动上为用户创建一个条目,然后在第二个活动上启动服务.所以我可以存储用户的令牌.

Android Manifest文件

<service
    android:name="in.anamika.anamika.notifications.MyFirebaseMessagingService"
    android:permission="com.google.android.c2dm.permission.SEND">
    <intent-filter>
        <action android:name="com.google.firebase.MESSAGING_EVENT" />
        <action android:name="com.google.android.c2dm.intent.RECEIVE" />
    </intent-filter>
</service>
<service android:name="in.anamika.anamika.notifications.MyFirebaseInstanceIDService">
    <intent-filter>
        <action android:name="com.google.firebase.INSTANCE_ID_EVENT" />
    </intent-filter>
</service>
Run Code Online (Sandbox Code Playgroud)

Man*_*Man 5

根据我对您的问题的理解,我看到的解决方案如下:

  1. 最初,您可以将令牌保存为共享首选项,如Nainal所述.稍后,当用户成功登录并创建数据库时,您可以将其存储到表中.

更新后的API返回Task,您可以在其上添加onSuccess侦听器,并且可以在成功获取令牌时调用该任务.

    FirebaseInstanceId.getInstance().getInstanceId().addOnSuccessListener(yourActivity,  
    new OnSuccessListener<InstanceIdResult>() {                    
                @Override
                public void onSuccess(InstanceIdResult instanceIdResult) {
                      String deviceToken = instanceIdResult.getToken();
                      // Do whatever you want with your token now
                      // i.e. store it on SharedPreferences or DB
                      // or directly send it to server 
                }
});
Run Code Online (Sandbox Code Playgroud)
  1. 它可能很长但你可以从onTokenRefresh()onNewToken()发送自己的自定义广播,将回调接口设置为来自活动的广播接收器,并通过覆盖回调方法在Activity中获取该调用.

注意:不推荐使用FirebaseInstanceIdService,而是覆盖onNewToken()以仅在FirebaseMessagingService中获取新的/更新的令牌.
你可以查看这个链接.