从GCM迁移到FCM android项目后,令牌生成无法正常工作

时间:2018-04-13 10:52:21

标签: android firebase notifications google-cloud-messaging firebase-cloud-messaging

我已将项目从GCM转换为FCM但 onTokenRefresh()函数未调用。

我已关注此链接: https://developers.google.com/cloud-messaging/android/android-migrate-fcm

我已完成以下步骤

  1. 添加Firebase项目并使用SHA1密钥添加应用程序
  2. 从我的android项目中删除所有GCM代码
  3. 添加FCM代码
  4. FCM代码:

    在manifest.xml中

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

    创建两个java文件 的 MyFirebaseInstanceIDService.java

    public class MyFirebaseInstanceIDService extends FirebaseInstanceIdService {
    
        private static final String TAG = "MyFirebaseIIDService";
    
        @Override
        public void onTokenRefresh() {
            Log.d(TAG, "Refreshed token start");
            String refreshedToken = FirebaseInstanceId.getInstance().getToken();
            Log.d(TAG, "Refreshed token: " + refreshedToken);
            GlobalClass.strDeviceToken = refreshedToken;
            Log.e("token",GlobalClass.strDeviceToken);
            Log.d(TAG, "Refreshed token end");
            storeToken(refreshedToken);
        }
    
    
        private void storeToken(String token) {
            //saving the token on shared preferences
    
            SharedPreferences sharedPreferences = getSharedPreferences(GlobalClass.SHARED_PREF_NAME, Context.MODE_PRIVATE);
            SharedPreferences.Editor editor = sharedPreferences.edit();
            editor.putString(GlobalClass.prefFCMToen, token);
            editor.apply();
        }
    }
    

    MyFirebaseMessagingService.java

    public class MyFirebaseMessagingService extends FirebaseMessagingService {
        private static final String TAG = "MyFirebaseMsgService";
    
    @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {
        if (remoteMessage.getData().size() > 0) {
            //Log.e(TAG, "Data Payload: " + remoteMessage.getData().toString());
            try {
                Map<String, String> params = remoteMessage.getData();
                JSONObject json = new JSONObject(params);
    
            } catch (Exception e) {
                Log.e(TAG, "Exception: " + e.getMessage());
            }
        }
       }
    }
    

    我遵循此Google指南 https://firebase.google.com/docs/reference/android/com/google/firebase/iid/FirebaseInstanceId 每次我重新安装应用程序但不能调用 onTokenRefresh()

1 个答案:

答案 0 :(得分:0)

每次启动应用程序或新安装时,都不一定会调用onTokenRefresh()方法。它仅在某些情况下触发(请参阅我的回答here)。

实施看起来正确。要获取当前令牌,您必须首先在类似于MainActivity的地方调用getToken()

getToken()方法可以立即返回当前标记 null。如果为null,则表示FCM服务器尚未完成生成或将令牌发送回客户端,在这种情况下onTokenRefresh()将在完成时触发。