AndroidStudio中的FCM设置 - 工具 - Cloud Messaging中的Firebase Assistant设置为Successfully。因此,设置已更正,但未生成令牌。通过MainActivity中的令牌显示在logcat和Config Class中不生成.token,但其显示为null。运行问题继续后卸载的应用程序。我也尝试不同的模拟器,但没有任何解决方案。
MyFirebaseInstanceIDService.java
public class MyFirebaseInstanceIDService extends FirebaseInstanceIdService {
private static final String TAG = "MyFirebaseIIDService";
@Override
public void onTokenRefresh() {
String newToken = FirebaseInstanceId.getInstance().getToken();
Log.d(TAG, "Refreshed token: " + newToken);
Config.TOKEN = newToken;
}
}
的AndroidManifest.xml
<uses-permission android:name="android.permission.INTERNET" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<service
android:name=".MyFirebaseInstanceIDService">
<intent-filter>
<action android:name="com.google.firebase.INSTANCE_ID_EVENT"/>
</intent-filter>
</service>
</application>
的build.gradle(项目级)
dependencies {
classpath 'com.android.tools.build:gradle:2.3.0'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
classpath 'com.google.gms:google-services:3.0.0'
}
的build.gradle(应用级)
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:26.+'
compile 'com.android.support.constraint:constraint-layout:1.0.2'
compile 'com.google.firebase:firebase-messaging:10.0.1'
testCompile 'junit:junit:4.12'
compile 'com.squareup.okhttp:okhttp:2.0.0'
}
apply plugin: 'com.google.gms.google-services'
答案 0 :(得分:3)
在应用中的任何时候,如果需要,您可以使用此代码获取Firebase实例ID令牌:
String token = FirebaseInstanceId.getInstance().getToken();
只有在令牌更改时才会执行FirebaseInstanceIdService。 The Firebase documentation州:
除以下情况外,实例ID是稳定的:
- 应用删除实例ID
- 应用程序已在新设备上恢复
- 用户卸载/重新安装应用
- 用户清除应用数据
如果您的应用中没有发生这些事情,那么FirebaseInstanceIdService只会在您的应用首次安装在设备上时运行。
答案 1 :(得分:0)
每次运行应用时都不会调用方法onTokenRefresh()
。只有在生成新令牌时才会调用它。所以它很少被称为。
但它会在第一次运行中被调用。因此,在方法onTokenRefresh()
中,您应该将刷新后的令牌保存在共享首选项中。
因此,当您需要firebase令牌时,您应该从共享首选项中获取它,该首选项始终可用。
现在,您可以通过清除应用数据或卸载并重新安装应用来修复此问题,以便生成新令牌。
答案 2 :(得分:0)
<service android:name=".MyFirebaseMsgService">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
将此添加到清单
答案 3 :(得分:0)
在清单Firebase服务中添加<action android:name="com.google.firebase.INSTANCE_ID_EVENT"/>
。
<service
android:name=".common.firebase.FirebaseMessagingService"
android:exported="false">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
<action android:name="com.google.firebase.INSTANCE_ID_EVENT"/>
</intent-filter>
</service>
答案 4 :(得分:0)
对于高于 18.0.0 的 firebase 版本,FirebaseInstanceId.getInstance().getToken();
已弃用。
现在我们必须使用以下方法以编程方式获取令牌。
FirebaseMessaging.getInstance().token.addOnCompleteListener {
if (!it.isSuccessful) {
return@addOnCompleteListener
}
val token = it.result
}