Suj*_*ana 2 android firebase firebase-cloud-messaging
我在我的游戏控制台中收到以下错误,没有任何堆栈跟踪(在 android 7 和 10 上)。
Broadcast of Intent { act=com.google.android.c2dm.intent.RECEIVE flg=0x10000010 pkg=com.mycompany.myapp cmp=com.mycompany.myapp/com.google.firebase.iid.FirebaseInstanceIdReceiver (has extras) }
Run Code Online (Sandbox Code Playgroud)
使用的 Firebase 版本,
implementation 'com.google.firebase:firebase-iid:21.1.0'
implementation 'com.google.firebase:firebase-messaging:23.0.6'
Run Code Online (Sandbox Code Playgroud)
我不知道我的代码的哪一部分到底导致了这个错误,我发布了负责上传到FCM token我的服务器的代码。
我的Firebase消息服务,
@Override
public void onNewToken(@NonNull String s) {
super.onNewToken(s);
new TokenUploader().setFcmToken();//send to server
}
Run Code Online (Sandbox Code Playgroud)
TokenUploader类
//this function is called from MyFirebaseMessagingService and MainActivity
public void setFcmToken() {
FirebaseMessaging.getInstance().getToken().addOnCompleteListener(task -> {
if (task.isSuccessful()) new Thread(() -> pushFcmToken(task.getResult())).start();
else if (task.getException() != null)
new Thread(() -> pushFcmToken(task.getException().getMessage())).start();
});
}
//push token to server
private void pushFcmToken(String token) {
if (account == null) return;
try {
JSONObject params = new JSONObject();
params.put("email", account.getEmail());
params.put("password", getPassword());
params.put("key", getApiKey());
params.put("fcm_token", token);
JSONObject obj = null;
for (int i = 0; i < 4; i++) {//try 4 times
obj = sendRequestToApi("POST", params, "/fcm_route");
if (obj != null && obj.has("fcmId")) break;//successfully uploaded
}
} catch (Exception e) {
}
}
Run Code Online (Sandbox Code Playgroud)
我坚信我在这里做错了什么,因为很多设备未能将其令牌上传到我的服务器。如何防止上述错误并获得 100% 上传 token 的成功率?
这些 ANRact=com.google.android.c2dm.intent.RECEIVE在发送大量推送通知的 Android 应用程序中非常常见。
其中大多数是由长时间的应用程序启动和在主线程上处理推送通知引起的。
Bumble Tech 的 Nickolay Chameyev 在文章中对此进行了很好的描述:我们如何实现 ANR 减少 6 倍 - 第 2 部分:修复 ANR。
| 归档时间: |
|
| 查看次数: |
2341 次 |
| 最近记录: |