首頁 > 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服務

完成應用程式註冊後,您可以下載 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
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板