在日志中的MainActivity中,我可以看到使用FirebaseInstanceId.getInstance().getToken()的令牌,它显示生成的令牌。但是在我的MyFirebaseInstanceIDService (扩展到FirebaseInstanceIdService )中,似乎没有调用onTokenRefresh(),在这个函数中,据说令牌最初是在这里生成的。我需要打电话给sendRegistrationToServer(),这就是为什么我想知道为什么它不进入onTokenRefresh()。
这是我的密码
public class MyFirebaseInstanceIDService extends FirebaseInstanceIdService {
@Override
public void onTokenRefresh() {
// Get updated InstanceID token.
String refreshedToken = FirebaseInstanceId.getInstance().getToken();
Log.d(TAG, "Refreshed token: " + refreshedToken);
sendRegistrationToServer(refreshedToken);
}
}发布于 2016-05-26 15:47:38
只有在生成新令牌时才调用FirebaseInstanceIdService中的FirebaseInstanceIdService。如果您的应用程序是以前安装并生成的令牌,那么onTokenRefresh将不会被调用。尝试卸载和重新安装应用程序,以强制生成一个新令牌,这将导致onTokenRefresh被调用。
还请确保您的FirebaseInstanceIdService在AndroidManifest.xml中有正确的定义。
在你的报表文件里。
<service
android:name="com.bnt.etailers.fcm.MyFireBaseInstanceIDService"
android:exported="false">
<intent-filter>
<action android:name="com.google.firebase.INSTANCE_ID_EVENT" />
</intent-filter>
</service>
<service
android:name="com.bnt.etailers.fcm.GCMNotificationIntentService"
android:exported="false">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>FirebaseInstanceIdService类
public class MyFireBaseInstanceIDService extends FirebaseInstanceIdService {
private static final String TAG = MyFireBaseInstanceIDService.class.getSimpleName();
@Override
public void onTokenRefresh() {
// Get updated InstanceID token.
String refreshedToken = FirebaseInstanceId.getInstance().getToken();
Log.d(TAG, "Refreshed token: " + refreshedToken);
if (refreshedToken!=null) {
SettingPreferences.setStringValueInPref(this, SettingPreferences.REG_ID, refreshedToken);
}
// TODO: Implement this method to send any registration to your app's servers.
sendRegistrationToServer(refreshedToken);
}
// [END refresh_token]
/**
* Persist token to third-party servers.
*
* Modify this method to associate the user's FCM InstanceID token with any server-side account
* maintained by your application.
*
* @param token The new token.
*/
private void sendRegistrationToServer(String token) {
// Add custom implementation, as needed.
}}FirebaseMessagingService类。
public class GCMNotificationIntentService extends FirebaseMessagingService {
// Sets an ID for the notification, so it can be updated
public GCMNotificationIntentService() {
super();
}
@Override
public void onMessageReceived(RemoteMessage message) {
}}发布于 2016-05-26 13:28:58
我和你一样有同样的问题。我的错误是:我将<service>标记放置在<application>标记之外的AndroidManifest.xml文件中。
我的看上去是这样的:
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<service
android:name=".MyFirebaseMessagingService">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT"/>
</intent-filter>
</service>
<service
android:name=".MyFirebaseInstanceIDService">
<intent-filter>
<action android:name="com.google.firebase.INSTANCE_ID_EVENT"/>
</intent-filter>
</service>
</application>而且没有任何问题。
发布于 2016-11-09 05:56:46
是的,有时可能会发生这种情况。
无论您想要获得fcm id,请调用以下方法。
try {
String refreshedToken = FirebaseInstanceId.getInstance().getToken();
Log.d("Firbase id login", "Refreshed token: " + refreshedToken);
} catch (Exception e) {
e.printStackTrace();
}https://stackoverflow.com/questions/37451395
复制相似问题