我已经在应用程序的版本1中实现了urbanairship。
现在我在应用程序的版本2中扩展了FirebaseMessagingService
我在onNewToken()中没有接到呼叫,无法将令牌发送到我的服务器。
我的样板代码看起来像
AndroidManifest.xml

  <service
        android:name=".services.fcm.PushMessageReceiver"
        android:enabled="true"
        android:exported="true"
        android:stopWithTask="false">
        <intent-filter>
            <action android:name="com.google.firebase.MESSAGING_EVENT" />
        </intent-filter>
    </service>

以及Receiver
        public class PushMessageReceiver extends FirebaseMessagingService {  ...
            @Override
            public void onMessageReceived(RemoteMessage remoteMessage) {
            ...
            }

            @Override
            public void onNewToken(String s) {
            Log.i(Config.LOGTAG, "######**** new token for fcm called");
                Context ctx =ApplicationCustom.getContext();
                SharedPreferences preferences = ctx.getSharedPreferences(Config.SHARED_PREFERENCES, Context.MODE_PRIVATE);
                preferences.edit().putString(Config.SHARED_PREFS_DEVICE_TOKEN, s).apply();
                Intent intent = new Intent(this, XmppConnectionService.class);
                intent.setAction(XmppConnectionService.ACTION_FCM_TOKEN_REFRESH);
                intent.putExtra("token", s);
                startService(intent);
                pushToServer();
            }

               public static void getToken() {
                Log.i(Config.LOGTAG, "######**** get token for fcm called");

                try {
                    Log.i(Config.LOGTAG, "######**** delete token for fcm called");
                    FirebaseInstanceId.getInstance().deleteInstanceId();
                    FirebaseInstanceId.getInstance().getInstanceId();
                } catch (IOException e) {
                    e.printStackTrace();
                    Log.w(Config.LOGTAG, "######**** delete InstanceId failed", e);
                }

                FirebaseInstanceId.getInstance().getInstanceId().addOnCompleteListener(task
        -> {
                    if (!task.isSuccessful()) {
                        Log.w(Config.LOGTAG, "getInstanceId failed", task.getException());
                        return;
                    }

                    Log.i(Config.LOGTAG, "######**** getInstanceId successful");

                    // Get new Instance ID token
                    String token = task.getResult().getToken();
                    Context ctx = ApplicationCustom.getContext();
                    SharedPreferences preferences = ctx.getSharedPreferences(Config.SHARED_PREFERENCES, Context.MODE_PRIVATE);
                    preferences.edit().putString(Config.SHARED_PREFS_DEVICE_TOKEN, token).apply();
            pushToServer();
           });
        }

    public void pushToServer(){
        // Logic to push token to a server reading from preferences
    }
}

观察:
1)onnewtoken从不被调用更新的应用程序。
2)新安装获取令牌
3)在我向FirebaseInstanceId.getInstance().deleteInstanceId()添加呼叫后
onComplete也不会被调用。
4)在真实电话(不是模拟器)上调用getToken(senderId, "FCM")总是会导致
java.io.IOException: TOO_MANY_REGISTRATIONS
    at com.google.firebase.iid.zzr.zza(Unknown Source:66)
    at com.google.firebase.iid.zzr.zza(Unknown Source:79)
    at com.google.firebase.iid.zzu.then(Unknown Source:4)
    at com.google.android.gms.tasks.zzd.run(Unknown Source:5)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
    at java.lang.Thread.run(Thread.java:764)

如何修复观察1。是因为令牌已经被传送到城市航空公司,所以onnewtoken没有被调用吗?
在service oncreate()方法中调用了fyi gettoken。
implementation 'com.google.firebase:firebase-messaging:17.3.4'

最佳答案

您可以通过以下方式获得FCM代币:

FirebaseInstanceId.getInstance().getInstanceId()
                .addOnCompleteListener(new OnCompleteListener<InstanceIdResult>() {
                    @Override
                    public void onComplete(@NonNull Task<InstanceIdResult> task) {
                        if (task.isSuccessful()) {
                            String firebaseToken = task.getResult().getToken();
                        } else {
                            getFirebaseToken();
                        }
                    }
                });

关于android - FCM代币发行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56235190/

10-13 03:05