Android 推送拉起 App 详解

在 Android 开发中,推送通知是提升用户体验的重要手段之一。通过推送通知,应用可以在用户未打开应用的情况下,及时传递信息。当用户点击推送通知时,通常会唤起应用并引导用户到指定的界面。本文将介绍 Android 推送通知的实现,并提供相关代码示例。

1. 推送服务概述

常见的推送服务包括 Firebase Cloud Messaging (FCM)、百度推送、友盟推送等。本篇文章将重点使用 FCM 作为示例。FCM 是 Google 提供的一种推送服务,使用较为广泛且免费的。

2. 创建 FCM 项目

首先,你需要在 Firebase Console 创建一个新项目,并集成 Firebase SDK。按照以下步骤操作:

  1. 登录 Firebase Console 并创建新项目。
  2. 在项目设置中,注册你的 Android 应用,下载 google-services.json 并添加到项目 app 目录下。
  3. build.gradle 文件中添加 Firebase 依赖。
// app/build.gradle
dependencies {
    implementation 'com.google.firebase:firebase-messaging:23.0.0'
}
  • 1.
  • 2.
  • 3.
  • 4.

然后,确保在项目的根 build.gradle 中启用 Google 服务:

// build.gradle (Project)
buildscript {
    dependencies {
        classpath 'com.google.gms:google-services:4.3.8'
    }
}

// app/build.gradle
apply plugin: 'com.google.gms.google-services'
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.

3. 配置 AndroidManifest.xml

接下来,我们需要在 AndroidManifest.xml 中声明必要的权限与服务:

<uses-permission android:name="android.permission.INTERNET" />

<application>
    ...
    <service
        android:name=".MyFirebaseMessagingService"
        android:exported="false">
        <intent-filter>
            <action android:name="com.google.firebase.MESSAGING_EVENT"/>
        </intent-filter>
    </service>
</application>
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.

4. 创建消息处理类

在你的项目中创建一个类,继承自 FirebaseMessagingService,用于处理接收到的推送消息:

// MyFirebaseMessagingService.java
import com.google.firebase.messaging.FirebaseMessagingService;
import com.google.firebase.messaging.RemoteMessage;
import android.content.Intent;
import android.app.PendingIntent;
import android.app.NotificationManager;
import android.app.NotificationChannel;
import android.os.Build;
import androidx.core.app.NotificationCompat;

public class MyFirebaseMessagingService extends FirebaseMessagingService {

    @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {
        showNotification(remoteMessage);
    }

    private void showNotification(RemoteMessage remoteMessage) {
        String title = remoteMessage.getNotification().getTitle();
        String body = remoteMessage.getNotification().getBody();

        Intent intent = new Intent(this, MainActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_ONE_SHOT);

        NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this, "default")
                .setContentTitle(title)
                .setContentText(body)
                .setSmallIcon(R.drawable.ic_notification)
                .setContentIntent(pendingIntent)
                .setAutoCancel(true);

        NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            NotificationChannel channel = new NotificationChannel("default", "Default Channel", NotificationManager.IMPORTANCE_DEFAULT);
            notificationManager.createNotificationChannel(channel);
        }

        notificationManager.notify(0, notificationBuilder.build());
    }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.

在以上代码中,我们实现了推送通知的接收和展示功能。当收到推送消息时,该服务会创建一个通知并在用户点击后启动主界面。

5. 发送推送消息

可以使用 Firebase 控制台向应用发送推送消息。在推送消息的有效负载中,可以设置不同的数据,例如:

{
  "to": "<device_token>",
  "notification": {
    "title": "Hello!",
    "body": "Welcome to our app."
  }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.

6. 流程图

以下是推送通知从发送到接收的流程图:

flowchart TD
    A[推送消息发送] --> B[Firebase Server]
    B --> C[接收设备]
    C --> D{是否有通知?}
    D -->|是| E[展示通知]
    D -->|否| F[不展示]
    E --> G[用户点击通知]
    G --> H[启动应用]

结论

通过上述步骤,我们全面了解了如何使用 Firebase Cloud Messaging (FCM) 实现 Android 应用的推送通知功能。从创建项目到配置推送服务,以及如何处理接收到的消息,均有详细的代码示例。推送通知不仅能提升用户体验,还能提高用户的活跃度。希望这篇文章能帮助开发者更好地理解和使用推送服务。如果你在使用过程中有任何疑问,欢迎随时讨论。