📌  相关文章
📜  Firebase应用内消息传递设置和配置(1)

📅  最后修改于: 2023-12-03 15:15:05.147000             🧑  作者: Mango

Firebase应用内消息传递设置和配置

Firebase应用内消息传递可以帮助开发者在应用内向用户发送通知或消息,以增强用户体验。本文将介绍Firebase应用内消息传递的设置和配置流程。

1. 集成Firebase依赖库

在项目的build.gradle文件中添加Firebase依赖库:

dependencies {
    implementation 'com.google.firebase:firebase-messaging:17.6.0'
}
2. 配置Firebase控制台

在Firebase控制台中,需要开启Cloud Messaging服务并配置应用程序的包名和SHA-1证书指纹。具体操作如下:

  1. 打开Firebase控制台(https://console.firebase.google.com/)并选择相应的项目;
  2. 在左侧导航栏选择Cloud Messaging;
  3. 在“Android应用程序”下方,点击“添加应用”按钮,并输入应用程序的包名;
  4. 在“指纹证书”一节,输入应用程序签名的SHA-1证书指纹。可以使用以下命令获取SHA-1指纹:
keytool -exportcert -list -v -alias androiddebugkey -keystore ~/.android/debug.keystore
  1. 点击“注册应用”按钮完成配置。
3. 配置Android应用程序

在Android应用程序中,需要进行以下配置:

3.1 配置AndroidManifest.xml

在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指定通知栏颜色。

3.2 实现广播接收器和服务

在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());
    }
}
4. 发送消息和通知

在Firebase控制台中,开发者可以向应用程序的所有设备或指定设备发送消息和通知。具体操作如下:

  1. 在Firebase控制台的“Cloud Messaging”页面中,点击“发送通知”按钮;
  2. 在“构建消息”页面中,输入通知的标题和内容,选择通知的图标、颜色等;
  3. 选择要接收通知的设备,可以选择所有设备或指定设备;
  4. 点击“发送通知”按钮发送通知。
5. 总结

本文介绍了Firebase应用内消息传递的设置和配置流程,以及Android应用程序中的配置和实现。开发者可以根据实际需求使用Firebase应用内消息传递功能,以增强应用程序的用户体验。