android - 默认 Firebase 应用程序未初始化
问题描述
我正在尝试将 FCM 集成到我的一个 Android 应用程序中。我已按照文档中的说明进行操作,并且我的 POC 应用程序运行良好。当我按照相同的步骤操作时,在我的最终应用程序(一个 multidex 应用程序)中,它无法正常工作。我收到一个非法状态异常,并显示默认 Firebase 应用程序尚未初始化的消息。我的包名称(在清单文件中定义)和应用程序 ID(在 gradle 文件中定义)不同,并且在 google-services.json 文件中,它在客户端信息部分采用了应用程序 ID。我试过在网上搜索,经历了几次堆栈溢出讨论,但没有一个建议对我有用。
清单文件中的部分:
<service
android:name=".services.JBFirebaseMessagingService">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT"/>
</intent-filter>
</service>
活动中的初始化代码:
FirebaseInstanceId.getInstance().getInstanceId().addOnCompleteListener(new OnCompleteListener<InstanceIdResult>() {
@Override
public void onComplete(@NonNull Task<InstanceIdResult> task) {
if (!task.isSuccessful()) {
Log.w("", "getInstanceId failed", task.getException());
return;
}
// Get new Instance ID token
if (task.getResult() != null) {
String token = task.getResult().getToken();
// Log
String msg = getString(R.string.msg_token_fmt, token);
Log.d("", msg);
LogHelper.writeLog(null,msg);
}
}
});
解决方案
试试这个你必须google-services.json
从firebase控制台添加文件。
FirebaseInstanceId.getInstance().getInstanceId().addOnSuccessListener(new OnSuccessListener<InstanceIdResult>() {
@Override
public void onSuccess(InstanceIdResult instanceIdResult) {
String deviceToken = instanceIdResult.getToken();
}
});
推荐阅读
- python-3.x - 带有 NetworkX 包的 Python 3.x 中的 PCB 布线/管道布线问题/nPairs of disjoint shortest-paths
- scala - 从命令行编译/打包多个配置 sbt scala
- java - 我无法使用 javaDB 将新数据插入到我的数据库中
- python - spacy 句子标记器的跨度
- javascript - 为每个承诺读取数据网址?
- unity3d - Unity 3D:如何让一个拥有角色控制器的玩家可以推动另一个拥有角色控制器的玩家?
- python - pytest_runtest_setup/call/teardown 和 @pytest.hookimpl(hookwrapper=True)
- r - 计算 var1 在 var2 的每个级别内的均值和标准差
- html - 当 div 顺序交替时,使用引导网格系统以相同顺序水平堆叠 div
- python - Python:根据内容组合 Pandas 行