What to do with the INSTANCE_ID_EVENT action with Firebase 17.0.1?

前端 未结 2 652
梦谈多话
梦谈多话 2021-01-06 07:18

So now that the FirebaseInstanceIdService service is deprecated I\'m unsure what to replace it with.

I previously had a service declared in the manifest like so:

相关标签:
2条回答
  • 2021-01-06 07:40

    All you need in the manifest is this (note that the service doesn't need android:stopWithTask="false" since it defaults to false:

    <service android:name=".MyFirebaseMessagingService">
        <intent-filter>
            <action android:name="com.google.firebase.MESSAGING_EVENT" />
        </intent-filter>
    </service>
    

    And here's the rest of it in beautifully simple Kotlin...

    To get the new token whenever it's refreshed:

    class MyFirebaseMessagingService: FirebaseMessagingService() {
    
        override fun onNewToken(token: String?) {
            Log.d("FMS_TOKEN", token)
        }
        ...
    }
    

    To get the token from anywhere at runtime:

    FirebaseInstanceId.getInstance().instanceId.addOnSuccessListener {
        Log.d("FMS_TOKEN", it.token)
    }
    
    0 讨论(0)
  • 2021-01-06 07:46

    Check this topic:

    FirebaseInstanceIdService is deprecated

    You have to replace it with:

    public class MyFirebaseMessagingService extends FirebaseMessagingService {
    
            @Override
            public void onNewToken(String s) {
                super.onNewToken(s);
                Log.e("NEW_TOKEN",s);
            }
    
            @Override
            public void onMessageReceived(RemoteMessage remoteMessage) {
                super.onMessageReceived(remoteMessage);
            }
        }
    

    And in manifest:

    <service
        android:name=".MyFirebaseMessagingService"
        android:stopWithTask="false">
        <intent-filter>
    
            <action android:name="com.google.firebase.MESSAGING_EVENT" />
        </intent-filter>
    </service>
    

    And if you want to get token somewhere in your project:

    FirebaseInstanceId.getInstance().getInstanceId().addOnSuccessListener( MyActivity.this,  new OnSuccessListener<InstanceIdResult>() {
         @Override
         public void onSuccess(InstanceIdResult instanceIdResult) {
               String newToken = instanceIdResult.getToken();
               Log.e("newToken",newToken);
    
         }
     }); 
    

    There is no need to use

    <action android:name="com.google.firebase.INSTANCE_ID_EVENT" />
    

    Hope it helps you

    0 讨论(0)
提交回复
热议问题