📅  最后修改于: 2023-12-03 15:15:05.147000             🧑  作者: Mango
Firebase应用内消息传递可以帮助开发者在应用内向用户发送通知或消息,以增强用户体验。本文将介绍Firebase应用内消息传递的设置和配置流程。
在项目的build.gradle文件中添加Firebase依赖库:
dependencies {
implementation 'com.google.firebase:firebase-messaging:17.6.0'
}
在Firebase控制台中,需要开启Cloud Messaging服务并配置应用程序的包名和SHA-1证书指纹。具体操作如下:
keytool -exportcert -list -v -alias androiddebugkey -keystore ~/.android/debug.keystore
在Android应用程序中,需要进行以下配置:
在AndroidManifest.xml文件中,需要添加以下内容:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<uses-permission android:name="android.permission.VIBRATE" />
<receiver android:name=".MyFirebaseMessagingReceiver">
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<action android:name="com.google.android.c2dm.intent.REGISTRATION" />
<category android:name="${applicationId}" />
</intent-filter>
</receiver>
其中,MyFirebaseMessagingReceiver是自定义的广播接收器类,${applicationId}为应用程序的包名。
<service android:name=".MyFirebaseMessagingService">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
其中,MyFirebaseMessagingService是自定义的服务类。
<meta-data
android:name="com.google.firebase.messaging.default_notification_icon"
android:resource="@drawable/ic_notification" />
<meta-data
android:name="com.google.firebase.messaging.default_notification_color"
android:resource="@color/colorPrimary" />
其中,com.google.firebase.messaging.default_notification_icon指定通知栏图标,com.google.firebase.messaging.default_notification_color指定通知栏颜色。
在Android应用程序中,需要实现自定义的广播接收器和服务类,以处理接收到的消息和通知的处理。示例代码如下:
public class MyFirebaseMessagingReceiver extends BroadcastReceiver {
private static final String TAG = "MyFirebaseMessagingReceiver";
@Override
public void onReceive(Context context, Intent intent) {
Log.d(TAG, "onReceive() called");
if (intent.getAction().equals("com.google.android.c2dm.intent.REGISTRATION")) {
// 获取FCM令牌
String token = intent.getStringExtra("registration_id");
if (token != null) {
// 处理令牌
}
} else if (intent.getAction().equals("com.google.android.c2dm.intent.RECEIVE")) {
// 处理接收到的消息
Bundle bundle = intent.getExtras();
if (bundle != null) {
String title = bundle.getString("gcm.notification.title");
String message = bundle.getString("gcm.notification.body");
Log.d(TAG, "title: " + title + ", message: " + message);
// 构建通知
NotificationCompat.Builder builder = new NotificationCompat.Builder(context, "channel01")
.setSmallIcon(R.mipmap.ic_launcher)
.setContentTitle(title)
.setContentText(message)
.setPriority(NotificationCompat.PRIORITY_DEFAULT);
// 发送通知
NotificationManagerCompat notificationManager = NotificationManagerCompat.from(context);
notificationManager.notify(1, builder.build());
}
}
}
}
public class MyFirebaseMessagingService extends FirebaseMessagingService {
private static final String TAG = "MyFirebaseMessagingService";
@Override
public void onNewToken(String token) {
super.onNewToken(token);
Log.d(TAG, "onNewToken() called: " + token);
// 处理FCM令牌
}
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
super.onMessageReceived(remoteMessage);
Log.d(TAG, "onMessageReceived() called");
// 处理接收到的消息
String title = remoteMessage.getNotification().getTitle();
String message = remoteMessage.getNotification().getBody();
Log.d(TAG, "title: " + title + ", message: " + message);
// 构建通知
NotificationCompat.Builder builder = new NotificationCompat.Builder(this, "channel01")
.setSmallIcon(R.mipmap.ic_launcher)
.setContentTitle(title)
.setContentText(message)
.setPriority(NotificationCompat.PRIORITY_DEFAULT);
// 发送通知
NotificationManagerCompat notificationManager = NotificationManagerCompat.from(this);
notificationManager.notify(1, builder.build());
}
}
在Firebase控制台中,开发者可以向应用程序的所有设备或指定设备发送消息和通知。具体操作如下:
本文介绍了Firebase应用内消息传递的设置和配置流程,以及Android应用程序中的配置和实现。开发者可以根据实际需求使用Firebase应用内消息传递功能,以增强应用程序的用户体验。