如何在MyFirebaseMessagingService中获取最近使用的令牌

问题描述 投票:0回答:1

我正在使用FirebaseInstanceId.getInstance().getToken();方法来在我的FcmInstanceIdService中获取令牌,但由于已弃用这些令牌,因此我试图重写此代码-

public class FcmInstanceIdService extends FirebaseInstanceIdService
{
    public void onTokenRefresh()
    {
        String recent_token = FirebaseInstanceId.getInstance().getToken();

        SharedPreferences sharedPreferences = getApplicationContext().getSharedPreferences(getString(R.string.FCM_PREF), Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = sharedPreferences.edit();
        editor.putString(getString(R.string.FCM_TOKEN), recent_token);
        editor.commit();

    }
}

至-

public class MyFirebaseMessagingService extends FirebaseMessagingService {

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

         }
      });
        SharedPreferences sharedPreferences = getApplicationContext().getSharedPreferences(getString(R.string.FCM_PREF), Context.MODE_PRIVATE);
       SharedPreferences.Editor editor = sharedPreferences.edit();
       editor.putString(getString(R.string.FCM_TOKEN), recent_token);
       editor.commit();
    }

    @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {
        super.onMessageReceived(remoteMessage);
    }
} 

获取MyActivity时,我无法获得addOnSuccessListener中的recent_token应该通过哪个活动。

旧代码参考-https://www.zeolearn.com/magazine/sending-push-notification-to-android-application-from-your-own-django-app-server但这不能正常工作,因为不推荐使用FirebaseInstanceIdService,现在尝试使其工作。

我找到了解决方案表格-https://medium.com/android-school/firebaseinstanceidservice-is-deprecated-50651f17a148

如果您有其他关于我的旧代码参考的解决方案,请分享。

android firebase android-studio firebase-cloud-messaging
1个回答
0
投票

无需在getInstanceId().addOnSuccessListener中调用onNewToken,因为您已经获得了带有参数s的newToken。因此,请尝试如下所示:

@Override
public void onNewToken(String s) {
    SharedPreferences sharedPreferences = getApplicationContext().getSharedPreferences(getString(R.string.FCM_PREF), Context.MODE_PRIVATE);
    SharedPreferences.Editor editor = sharedPreferences.edit();
    editor.putString(getString(R.string.FCM_TOKEN), s);
    editor.commit();
}
© www.soinside.com 2019 - 2024. All rights reserved.