首页 > Java > java教程 > 正文

Android 推送通知分步指南

Linda Hamilton
发布: 2024-11-18 08:46:02
原创
993 人浏览过

推送通知在移动应用中的用户参与度和留存率方面发挥着重要作用,让用户了解最新动态并营造一种促使购买的紧迫感。在 Android 中,我们获得了 Firebase Cloud Messaging (FCM) 通知服务的额外好处,该服务充当应用服务器和用户 Android 设备之间的中间人。即使应用程序未激活或用户在其设备上使用不同的应用程序,它也有助于发送推送通知。

Firebase Cloud Messaging (FCM) 凭借其强大的交叉消息系统,用于向用户发送数据消息和警报。 FCM 支持 iOS、Web 和 Android 平台。可以使用 FCM 推送通知发送数据负载高达 4kb 的消息。

在本文中,我们将探索如何将推送通知逐步集成到 Android 应用程序中,并讨论实施的关键方面。我们还将推出多种可以简化和增强用户参与度的产品和工具。

了解 Android 推送通知

移动推送通知有助于提高应用程序中的用户参与度、客户保留率和整体用户体验。如果正确使用推送通知,它们可以显着提高各个业务领域移动应用程序的效率。

推送通知可用于 Android 应用中的不同用例和目的,包括:

i) 更新用户的在线预订或日程安排的状态。

ii) 为用户所下的在线订单提供说明和更新。

iii) 向用户建议后端的更改并帮助他们跟踪包裹。

iv) 围绕与应用相关的活动进行宣传,并向用户介绍新的优惠、促销和机会。

v) 通过预告消息鼓励用户尝试新的应用程序功能,并通知他们服务器更新和其他后端更改。

Android应用中推送通知的实现方法

先决条件

您需要拥有这些工具和服务才能在 Android 应用 FCM 中成功实现推送通知:

i) Android Studio –这是用于 Android 开发的 IDE。

ii) 基础知识和理解 –您需要对 Android 项目开发和结构以及清单文件配置有基本的了解。

iii) Firebase 帐户 –您应该拥有一个 Firebase 帐户来创建和管理项目设置。

iv) 互联网可用性 – 集成测试和 Firebase 设置需要互联网连接。

步骤 1. 设置您的 Firebase 项目

访问 Firebase 控制台。

通过命名来创建您的项目,然后单击“继续”。

Android Push Notifications Step by Step Guide

要进行进一步配置,您可以启用或禁用 Google Analytics 服务来获取应用程序的数据分析。

要完成设置,您需要检查项目设置;然后你就可以创建你的项目了。

创建项目后,您需要为推送通知实现进行额外的项目配置。

在项目仪表板中注册您的应用程序

您需要单击仪表板中的 Android 图标来添加 Android 应用程序。接下来,输入 Android 包名称。此包名称必须与您项目中的包名称相同(即 com.app.demoapp)。

Android Push Notifications Step by Step Guide

您还可以在控制台中输入应用的昵称来识别您的应用。

为您的应用添加 SHA-1 密钥。您需要使用此命令在终端中生成 SHA-1 密钥:现在复制 SHA-1 密钥并将其粘贴到 Firebase 控制台中。

./gradlew signingReport

登录后复制
登录后复制
登录后复制

最后点击“注册应用程序”完成配置。

Android Push Notifications Step by Step Guide

设置谷歌服务

完成应用注册后,您可以下载 google-services.json 文件并将其保存到您的计算机。

现在您需要将 google-services.json 添加到您的 Android 项目中,并将文件添加到 Android 项目的 app 目录中。

MyApp/
├── app/
│ ├── src/
│ ├── build.gradle
│ ├── google-services.json
├── build.gradle
├── settings.gradle

登录后复制
登录后复制
登录后复制

添加 Firebase SDK

接下来,将 Firebase SDK 添加到您的项目,在 build.gradle 中添加 Google 服务类路径:

buildscript {
    repositories {
        google()
        mavenCentral()
    }
    dependencies {
        // Add this line
        classpath 'com.google.gms:google-services:4.3.10'
    }
}

登录后复制
登录后复制
登录后复制

在 app/build.gradle 中添加以下依赖项:-

apply plugin: 'com.android.application'
apply plugin: 'com.google.gms.google-services'

android {
    // ...
}

dependencies {
    // Add these lines
    implementation platform('com.google.firebase:firebase-bom:29.0.4')
    implementation 'com.google.firebase:firebase-analytics'
    implementation 'com.google.firebase:firebase-messaging'
}

登录后复制
登录后复制
登录后复制

完成这些步骤后,您可以在 Android Studio 中单击“立即同步”,将您的项目与 Firebase 同步。

步骤 2. 配置您的 Android 项目

项目级build.gradle

打开项目级 build.gradle:导航到 Android 项目的根目录并找到 build.gradle 文件。

确保 google() 和 mavenCentral() 存储库包含在存储库部分中。

buildscript {
    repositories {
        // Check that you have these lines
        google()
        mavenCentral()
    }
    dependencies {
        // Add this line
        classpath 'com.google.gms:google-services:4.3.10'
    }
}

allprojects {
    repositories {
        // Check that you have these lines
        google()
        mavenCentral()
    }
}

登录后复制
登录后复制
登录后复制

在 build.gradle 中进行更改

在项目应用目录中找到 build.gradle 文件,然后在文件末尾添加 google-services 插件,并在依赖项部分添加 Firebase 和 Firebase Messaging 依赖项。

./gradlew signingReport

登录后复制
登录后复制
登录后复制

完成这些步骤后,您的项目就配置了 Firebase 依赖项,包括用于推送通知的 Firebase Messaging。现在让我们继续设置 Firebase Messaging 服务并处理您应用中的通知。

步骤 3. 实施 FCM

添加服务来处理 FCM 消息

创建一个名为 MyMessagingService 的新类,该类扩展 FirebaseMessagingService。

当您的应用程序处于前台状态时,您需要重写 onMessageReceived 方法来处理传入消息。然后实现逻辑来处理通知并可选择将其显示给用户。

MyApp/
├── app/
│ ├── src/
│ ├── build.gradle
│ ├── google-services.json
├── build.gradle
├── settings.gradle

登录后复制
登录后复制
登录后复制

在AndroidManifest.xml文件中注册

打开项目中的 AndroidManifest.xml 文件。

现在您需要在清单中注册 MyMessagingService 来处理 FCM 消息。

buildscript {
    repositories {
        google()
        mavenCentral()
    }
    dependencies {
        // Add this line
        classpath 'com.google.gms:google-services:4.3.10'
    }
}

登录后复制
登录后复制
登录后复制

步骤 4:获取 FCM 注册令牌

要接收推送通知,您的应用需要获取 FCM 注册令牌。此令牌唯一标识设备上的应用程序实例。

获取设备令牌的代码示例

您可以在 FirebaseMessagingService 或应用中的任何其他适当位置获取 FCM 注册令牌。让我们看看如何在 FirebaseMessagingService 中执行此操作。

更新我的消息服务:

apply plugin: 'com.android.application'
apply plugin: 'com.google.gms.google-services'

android {
    // ...
}

dependencies {
    // Add these lines
    implementation platform('com.google.firebase:firebase-bom:29.0.4')
    implementation 'com.google.firebase:firebase-analytics'
    implementation 'com.google.firebase:firebase-messaging'
}

登录后复制
登录后复制
登录后复制

您可以在 Activity 或 Fragment 中获取 token,并根据需要存储或使用它。

buildscript {
    repositories {
        // Check that you have these lines
        google()
        mavenCentral()
    }
    dependencies {
        // Add this line
        classpath 'com.google.gms:google-services:4.3.10'
    }
}

allprojects {
    repositories {
        // Check that you have these lines
        google()
        mavenCentral()
    }
}

登录后复制
登录后复制
登录后复制

使用这些方法,您可以在 Android 应用程序中获取 FCM 注册令牌。可以在 FirebaseMessagingService 或任何 Activity 或 Fragment 中获取令牌。此令牌对于向特定设备发送有针对性的推送通知非常重要。

第 5 步:发送推送通知

如果您想从服务器发送通知,您需要向 FCM API 发出 POST 请求。

您需要获取服务器密钥

  • 在Firebase控制台→项目设置→“项目概述”→“云消息传递”中。
  • 在“项目凭据”中,您将找到服务器密钥。

cURL 请求: 此 cURL 命令将用于发送通知。替换 使用您的实际服务器密钥和 与目标设备的 FCM 令牌。

./gradlew signingReport

登录后复制
登录后复制
登录后复制
  • https://fcm.googleapis.com/fcm/send API 端点。
  • H "Authorization: key=":这是带有您的服务器密钥的授权标头。
  • H "Content-Type: application/json": 内容类型标头。
  • d '{ ... }':这是包含您的通知和数据的 JSON 负载。

高级主题

处理数据消息

数据消息是一种可以携带自定义键值对的消息,其处理方式与通知消息不同。无论应用是在前台还是后台,数据消息都会在 FirebaseMessagingService 的 onMessageReceived 方法中接收。

数据消息处理示例

更新我的消息服务

MyApp/
├── app/
│ ├── src/
│ ├── build.gradle
│ ├── google-services.json
├── build.gradle
├── settings.gradle

登录后复制
登录后复制
登录后复制

管理通知渠道

从 Android 8.0(API 级别 26)开始,所有通知都必须分配给一个通道。这允许用户控制每个频道的通知设置。

创建通知通道示例

创建设置通知渠道的方法:

buildscript {
    repositories {
        google()
        mavenCentral()
    }
    dependencies {
        // Add this line
        classpath 'com.google.gms:google-services:4.3.10'
    }
}

登录后复制
登录后复制
登录后复制

在您的 MainActivity 或应用程序类中调用此方法:

apply plugin: 'com.android.application'
apply plugin: 'com.google.gms.google-services'

android {
    // ...
}

dependencies {
    // Add these lines
    implementation platform('com.google.firebase:firebase-bom:29.0.4')
    implementation 'com.google.firebase:firebase-analytics'
    implementation 'com.google.firebase:firebase-messaging'
}

登录后复制
登录后复制
登录后复制

或者,您可以调用NotificationUtils.createNotificationChannel(this);在你的应用程序类中,如果你有一个:

buildscript {
    repositories {
        // Check that you have these lines
        google()
        mavenCentral()
    }
    dependencies {
        // Add this line
        classpath 'com.google.gms:google-services:4.3.10'
    }
}

allprojects {
    repositories {
        // Check that you have these lines
        google()
        mavenCentral()
    }
}

登录后复制
登录后复制
登录后复制

更新您的通知生成器以使用通道 ID:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 33
    defaultConfig {
        applicationId "com.example.myandroidapp"
        minSdkVersion 21
        targetSdkVersion 33
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    implementation 'androidx.appcompat:appcompat:1.6.1'
    implementation 'com.google.android.material:material:1.8.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
    implementation 'androidx.legacy:legacy-support-v4:1.0.0'
    testImplementation 'junit:junit:4.13.2'
    androidTestImplementation 'androidx.test.ext:junit:1.1.5'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'

    // Add Firebase BOM
    implementation platform('com.google.firebase:firebase-bom:29.0.4')
    // Add Firebase Messaging dependency
    implementation 'com.google.firebase:firebase-messaging'
}

// Add this line at the bottom of the file
apply plugin: 'com.google.gms.google-services'

登录后复制

测试推送通知

当实现推送通知时,我们需要进行测试以确保它们正确实现。

在Android Studio中,可以打开logcat,查看>工具窗口> Logcat。

我们还可以使用 FirebaseMessagingService 类中使用的标签来过滤 logcat 输出。应用程序必须在设备上或通过模拟器运行。

收到通知后,我们可以在logcat中看到这样的数据:

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

public class MyMessagingService extends FirebaseMessagingService {

    @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {
        // Handle the received message
        if (remoteMessage.getNotification() != null) {
            // Get the message body
            String messageBody = remoteMessage.getNotification().getBody();
            // Send a notification
            sendNotification(messageBody);
        }
    }

    private void sendNotification(String messageBody) {
        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);

        String channelId = getString(R.string.default_notification_channel_id);
        NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this, channelId)
                .setSmallIcon(R.drawable.ic_notification)
                .setContentTitle(getString(R.string.app_name))
                .setContentText(messageBody)
                .setAutoCancel(true)
                .setContentIntent(pendingIntent);

        NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

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

        notificationManager.notify(0, notificationBuilder.build());
    }
}

登录后复制

消息数据可以这样看:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.myandroidapp">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">

        <!-- Add this service -->
        <service
            android:name=".MyMessagingService"
            android:exported="false">
            <intent-filter>
                <action android:name="com.google.firebase.MESSAGING_EVENT" />
            </intent-filter>
        </service>

        <!-- Other activities and services -->
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>
登录后复制

结论

在本文中,我们了解了推送通知以及分步实施方法。我们了解了如何在 Firebase 控制台中设置项目以及如何在 Firebase 项目设置中完成所需的配置,以便您可以开始向 Android 用户发送 Android 通知。

您需要首先设置 Firebase 项目并下载 google-services.json 文件。之后,您需要将此文件放入应用程序的目录并修改 build.gradle 文件以包含 Firebase 依赖项。

然后,您需要创建一个类来处理传入消息并在 AndroidManifest.xml 中注册该服务类。在清单文件中添加服务后,您需要获取用于唯一标识您的应用程序的 FCM 令牌,以便可以将通知发送到目标设备。

可以通过从 Firebase 控制台发送消息并使用 Android Studio 的 logcat 确认发送来测试通知。要激活服务器端通知,请使用带有 Firebase 服务器密钥和设备的 FCM 令牌的 cURL 请求。

为了保持与更高版本 Android 的兼容性,您需要在“FirebaseMessagingService”中处理数据消息并管理复杂配置的通知通道。

推送通知提供相关更新和定制信息,并且可以提高用户保留率和转化率,这对于鼓励用户参与至关重要。

阅读官方 Firebase 和 Android SDK 文档,了解更多信息和深入指导。这些网站提供了将推送通知合并到您的应用程序中的全面指导和行业最佳实践。

以上是Android 推送通知分步指南的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:dev.to
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板