从GCM迁移到FCM android项目后,令牌生成不起作用 [英] Token generation not working call after migrating from GCM to FCM android project
问题描述
我已将一个项目从GCM转换为FCM,但 onTokenRefresh()函数未被调用。
我遵循以下链接:
https://developers.google.com/cloud-messaging/ android / android-migrate-fcm
我已完成后续步骤
FCM代码:
在manifest.xml中
< service android:name =。Commonclass.MyFirebaseMessagingService> ;
< intent-filter>
< / intent-filter>
< / service>
< service android:name =。Commonclass.MyFirebaseInstanceIDService>
< intent-filter>
< / 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,刷新标记:+ refreshedToken);
GlobalClass.strDeviceToken = refreshedToken;
Log.e(token,GlobalClass.strDeviceToken);
Log.d(TAG,刷新令牌结束);
storeToken(refreshedToken);
$ b private void storeToken(String token){
//在共享偏好设置上保存标记
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继承了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());
尝试{
Map< String,String> params = remoteMessage.getData();
JSONObject json = new JSONObject(params);
} catch(Exception e){
Log.e(TAG,Exception:+ e.getMessage());
}
}
}
}
I遵循此Google指南
https:// firebase.google.com/docs/reference/android/com/google/firebase/iid/FirebaseInstanceId
,每次我重新安装应用程序但不能调用 onTokenRefresh()。 onTokenRefresh()
方法并不一定每次都会被调用。应用程序启动或新安装。它只在某些情况下触发(请参阅我的答案此处)。
实现看起来正确。为了获得当前令牌,您必须首先在类似于MainActivity的地方调用 getToken()
。
getToken()
方法可以立即返回当前标记或 null。如果为空,则意味着FCM服务器尚未完成生成或将令牌发送回客户端,在这种情况下, onTokenRefresh()
会在完成时触发。 p>
I have converted a project from GCM to FCM but onTokenRefresh() function not call.
I have followed this link : https://developers.google.com/cloud-messaging/android/android-migrate-fcm
I have completed follow step
- Add Firebase project and add application with SHA1 key
- Remove all code of GCM from my android project
- Add FCM code
FCM Code:
In 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>
Create two java file 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());
}
}
}
}
I follow this google guidelines https://firebase.google.com/docs/reference/android/com/google/firebase/iid/FirebaseInstanceId every time I reinstall application but not call onTokenRefresh().
The onTokenRefresh()
method doesn't necessarily get called every time the app starts or if it is newly installed. It only triggers on some scenarios (see my answer here).
The implementation looks correct. In order to get the current token, you must first call getToken()
somewhere similar to a MainActivity.
The getToken()
method can immediately return the current token or null. If its null, it means that the FCM server is not yet finished generating or sending the token back to the client, in which case onTokenRefresh()
would trigger upon completion.
这篇关于从GCM迁移到FCM android项目后,令牌生成不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!