我按照https://dev59.com/_loT5IYBdhLWcg3wrA-5#38626398的说明将SNS连接到FCM并连接到Android应用程序。 在模拟器上部署后,应用程序初始化但未接收到任何消息。 相同的应用程序在我的Nexus 6设备上正常工作并接收消息。 为什么会有这种差异?
我按照https://dev59.com/_loT5IYBdhLWcg3wrA-5#38626398的说明将SNS连接到FCM并连接到Android应用程序。 在模拟器上部署后,应用程序初始化但未接收到任何消息。 相同的应用程序在我的Nexus 6设备上正常工作并接收消息。 为什么会有这种差异?
模拟器是否安装了Google Play服务?
source: https://firebase.google.com/docs/cloud-messaging/android/client#sample-play
应用程序依赖于Play Services SDK的应该在访问Google Play服务功能之前始终检查设备是否有兼容的Google Play服务APK。建议在两个位置执行此操作:主活动的onCreate()方法和其onResume()方法。onCreate()中的检查确保应用程序不能在成功检查之前使用。 onResume()中的检查确保如果用户通过其他方式返回到正在运行的应用程序,例如通过后退按钮,则仍会执行检查。如果设备没有兼容版本的Google Play服务,则应用程序可以调用GoogleApiAvailability.makeGooglePlayServicesAvailable()来允许用户从Play商店下载Google Play服务。因为模拟器没有Google API,所以要检查通知或消息,你需要在已安装Google服务的真实设备上进行检查。
对于像GCM这样的Google服务,请使用“Google APIs”(任何版本)目标来接收来自fcm的推送通知或消息。
本答案是在2021年9月编写的,使用以下Gradle依赖项:
implementation 'com.google.firebase:firebase-messaging:22.0.0'
implementation 'com.google.firebase:firebase-iid:21.1.0'
2-清除数据:
使用以下函数获取组播ID,或获取注册失败的原因。
private void check_token() {
String TAG = "_testing";
FirebaseInstanceId.getInstance().getInstanceId()
.addOnCompleteListener(new OnCompleteListener<InstanceIdResult>() {
@Override
public void onComplete(@NonNull Task<InstanceIdResult> task) {
if (!task.isSuccessful()) {
Log.e(TAG, "getInstanceId failed", task.getException());
return;
}
// Get new Instance ID token
String token = task.getResult().getToken();
// Log and toast
// String msg = getString(R.string.msg_token_fmt, token);
Log.e(TAG, token);
Toast.makeText(MainActivity3.this, token, Toast.LENGTH_SHORT).show();
}
});
}
一旦您获得了令牌,就可以尝试发送通知消息。
注意: 无需使用Google帐户登录。 FCM可以在不登录Gmail的情况下工作。
Android Studio
中创建一个新的模拟器 > AVD Manager
,并使用已安装有 `google APIs` 的 Android SDK
后,问题得到解决。SDK Manager
> SDK Tools
> Google Play Services
。