【问题标题】:What to do with the INSTANCE_ID_EVENT action with Firebase 17.0.1?如何使用 Firebase 17.0.1 执行 INSTANCE_ID_EVENT 操作?
【发布时间】:2018-07-03 06:57:17
【问题描述】:

所以现在 FirebaseInstanceIdService 服务已被弃用,我不确定用什么替换它。

我之前在清单中声明了一个服务,如下所示:

        <service
            android:name=".fcm.FcmIdService">
            <intent-filter>
                <action android:name="com.google.firebase.INSTANCE_ID_EVENT"/>
            </intent-filter>
        </service>

还有服务本身:

public class FcmIdService extends FirebaseInstanceIdService {

    @Override
    public void onTokenRefresh() {
        // Create notification channel.
        createFcmNotificationChannel();
    }

}

如果我删除该服务,我将不再收到通知,所以我假设我必须用其他东西替换它。

谢谢。

编辑:这个问题与提议的重复问题不同,它还涵盖了受影响服务的清单声明,我仍然不清楚。

【问题讨论】:

  • 是的,这个问题有点不同。由于链接的其他问题没有需要在清单中添加的操作

标签: android firebase firebase-cloud-messaging


【解决方案1】:

检查这个话题:

FirebaseInstanceIdService is deprecated

您必须将其替换为:

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);
        }
    }

在清单中:

<service
    android:name=".MyFirebaseMessagingService"
    android:stopWithTask="false">
    <intent-filter>

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

如果你想在项目的某个地方获取令牌:

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

     }
 }); 

没有必要使用

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

希望对你有帮助

【讨论】:

    【解决方案2】:

    您在清单中只需要这个(注意该服务不需要android:stopWithTask="false",因为它默认为false:

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

    剩下的部分是在精美简单的 Kotlin 中......

    在刷新时获取新令牌:

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

    在运行时从任何地方获取令牌:

    FirebaseInstanceId.getInstance().instanceId.addOnSuccessListener {
        Log.d("FMS_TOKEN", it.token)
    }
    

    【讨论】:

      猜你喜欢
      • 2014-04-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多