我正在尝试从FCM发送推送通知。但是无法在我的Android设备中接收它。 首先,您可以在图像中看到它未初始化但稍后初始化成功。 我能够获得FCM注册ID,但无法获得推送消息。
这是截图:
OnReceive Method:
mRegistrationBroadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// checking for type intent filter
if (intent.getAction().equals(Config.REGISTRATION_COMPLETE)) {
// gcm successfully registered
// now subscribe to `global` topic to receive app wide notifications
FirebaseMessaging.getInstance().subscribeToTopic(Config.TOPIC_GLOBAL);
displayFirebaseRegId();
} else if (intent.getAction().equals(Config.PUSH_NOTIFICATION)) {
// new push notification is received
String message = intent.getStringExtra("message");
Toast.makeText(getApplicationContext(), "Push notification: " + message, Toast.LENGTH_LONG).show();
txtMessage.setText(message);
}
}
};
我正在使用AndroidHive的这个示例,我也尝试在不同版本的不同设备上测试它。
如果有人可以提出一些想法,那么对我来说非常有帮助。
答案 0 :(得分:1)
由于我们需要连接到网络,因此在AndroidManifest.xml文件中添加Internet权限。还要添加Vibrate,因为我们将在Android设备上生成通知警报。 的AndroidManifest.xml
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.VIBRATE"/>
同时添加扩展FirebaseMessagingService的服务条目,以便在后台接收应用通知后处理该消息。我们将扩展这项服务。在应用中接收通知。这对于Android推送通知在应用程序未处于活动状态时工作是绝对必要的。
<service
android:name=".MyAndroidFirebaseMessagingService">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT"/>
</intent-filter>
</service>
为扩展FirebaseInstanceIdService的服务添加一个条目,该条目将用于处理注册令牌生命周期。这是将消息发送到特定设备/设备组所必需的。
<service
android:name=".MyAndroidFirebaseInstanceIDService">
<intent-filter>
<action android:name="com.google.firebase.INSTANCE_ID_EVENT"/>
</intent-filter>
</service>
添加功能 创建一个新的java类MyAndroidFirebaseMsgService并添加以下代码。 它是一种扩展FirebaseMessagingService的服务。它在后台执行所有类型的消息处理,并在推送通知可用后发送。
public class MyAndroidFirebaseMsgService extends FirebaseMessagingService {
private static final String TAG = "MyAndroidFCMService";
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
Log.d(TAG, "From: " + remoteMessage.getFrom());
Log.d(TAG, "Notification Message Body: " +
remoteMessage.getNotification().getBody());
//create notification
createNotification(remoteMessage.getNotification().getBody());
}
private void createNotification( String messageBody) {
Intent intent = new Intent( this , ResultActivity. class );
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
PendingIntent resultIntent = PendingIntent.getActivity( this , 0, intent,
PendingIntent.FLAG_ONE_SHOT);
Uri notificationSoundURI = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
NotificationCompat.Builder mNotificationBuilder = new NotificationCompat.Builder( this)
.setSmallIcon(R.mipmap.ic_launcher)
.setContentTitle("Bingo")
.setContentText(messageBody)
.setAutoCancel( true )
.setSound(notificationSoundURI)
.setContentIntent(resultIntent);
NotificationManager notificationManager =
(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(0, mNotificationBuilder.build());
}
}
在接收消息onMessageReceived()时被调用。在这个函数中,我们将消息记录到LogCat控制台并使用消息文本调用createNotification()。 createNotification()方法将在android通知区域中创建推送通知。