我已将项目从GCM转换为FCM但 onTokenRefresh()函数未调用。
我已关注此链接: https://developers.google.com/cloud-messaging/android/android-migrate-fcm
我已完成以下步骤
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()。
答案 0 :(得分:0)
每次启动应用程序或新安装时,都不一定会调用onTokenRefresh()
方法。它仅在某些情况下触发(请参阅我的回答here)。
实施看起来正确。要获取当前令牌,您必须首先在类似于MainActivity的地方调用getToken()
。
getToken()
方法可以立即返回当前标记或 null。如果为null,则表示FCM服务器尚未完成生成或将令牌发送回客户端,在这种情况下onTokenRefresh()
将在完成时触发。