一些安卓设备无法生成FCM令牌

11

我在使用 GCM 时遇到了问题,于是我迁移到了 FCM,但我仍然遇到了与令牌相关的问题。

我发布了更新后的应用程序,并检查到有 300 名新用户,其中 200 名获得了令牌,而另外 100 名没有获得任何令牌,这是一个非常关键的问题。

如何解决空令牌问题?


你实现了 FCM Token 更新监听器吗? - Shrenik Shah
请问您能否发布清单和令牌更新服务类的代码? - Mohammed Atif
它的运行很好,但在一些设备上出现问题。 - Jd Prajapati
2个回答

9

您可以在每次新安装时从MyInstanceIDListenerService类的onTokenRefresh()方法中获取您的FCM令牌。

或者,您也可以使用此代码行获取FCM令牌:

FirebaseInstanceId.getInstance().getToken();

2
     class MyFirebaseInstanceIdService extends FirebaseInstanceIdService {

            private static final String TAG = "MyFirebaseIIDService";

            @Override
            public void onTokenRefresh() {

                //Getting registration token
                String refreshedToken = FirebaseInstanceId.getInstance().getToken();

                //Displaying token in logcat
                Log.e(TAG, "Refreshed token: " + refreshedToken);

            }

            private void sendRegistrationToServer(String token) {
                //You can implement this method to store the token on your server
                //Not required for current project
            }
        }

     **Sometimes tokens are not generated then write this code**

public class ContCreateTokenService extends Service {
            @Nullable
            @Override
            public IBinder onBind(Intent intent) {
                return null;
            }

            @Override
            public int onStartCommand(Intent intent, int flags, int startId) {
                Intent serviceIntent = new Intent(this, MyFirebaseMessagingService.class);
                startService(serviceIntent);
                return START_REDELIVER_INTENT;
            }
        }

public class FetchNewRefreshToken extends IntentService {
    /**
     * Creates an IntentService.  Invoked by your subclass's constructor.
     *
     * @param name Used to name the worker thread, important only for debugging.
     */

    public static final String TAG = FetchNewRefreshToken.class.getSimpleName();


    public FetchNewRefreshToken() {
        super(TAG);
    }

    @Override
    protected void onHandleIntent(Intent intent) {
        try {

            // Resets Instance ID and revokes all tokens.
            FirebaseInstanceId.getInstance().deleteInstanceId();


            // Now manually call onTokenRefresh()
            Log.e(TAG, "Getting new token");
            FirebaseInstanceId.getInstance().getToken();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

同时在清单文件中添加

 <service android:name=".ContCreateTokenService" />
 <service android:name=".FetchNewRefreshToken " />

在启动页面中:splash活动:-
 startService(new Intent(this, FetchNewRefreshToken.class));
 startService(new Intent(this, ContCreateTokenService.class));

手机已Root,无法生成令牌,该如何在已Root的手机上生成令牌? - Ashish Shahi
请检查我的更新代码...它可以在任何设备上运行。 - Rajesh Satvara
我的手机上不起作用。 - Ashish Shahi
首先重启您的手机,然后尝试,如果不起作用,则重置并再试一次。 - Rajesh Satvara
不,这不是问题... 我已经root了设备并且它在上面运行得很好。 - Rajesh Satvara
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接