モバイルアプリケーションを構築するとき、アラートやプッシュ通知でユーザーに通知する必要のないユースケースを考えるのは難しい。
先に進む前に、AndoridとiOSの両方でプッシュ通知専用のデモと チュートリアルがあります。
例えば、以下のシナリオを考えてみましょう:あなたは、試合中に重要なニュースをユーザーに提供するリアルタイムのスポーツアプリケーションを開発しています。 アプリの重要な機能は、お気に入りのチームが得点するとすぐにユーザーに信頼性の高いモバイルプッシュ通知を送信することです。
各モバイルオペレーティングシステムは、ネイティブアプリケーションのプッシュ通知に独自のソリューションを提供しているため、アプリに統合するのが難しい場合があります。Androidでは、ネイティブアプリケーションがプッシュ通知に使用するメカニズムはFirebase Cloud Messaging(FCM)通知です。PubNubはFCMを一歩進め、Firebase Cloud Messaging通知の使用をPubNubリアルタイム通信プラットフォームに統合しました。
アプリがフォアグラウンドにあるとき、PubNubのチャネルはリアルタイムのデータストリームを提供する素晴らしい仕事をします。アプリがバックグラウンドにある場合、ユーザーが携帯電話をロックしている場合、そして特にユーザーがWiFiやLTE経由でインターネット接続に断続的にアクセスできる場合に厄介なケースが発生します。 このような厄介なケースに対処するための最も簡単な解決策は、Firebaseプッシュ通知を実装することです。
FCMを使用してAndroidにFirebaseプッシュ通知を送信する方法の概要
FCMはGoogleが提供する無料サービスで、ユーザーはFirebaseプッシュ通知を無料で確実に配信することができます。
FCMを使ってアプリに2種類のメッセージを送ることができます:
- 通知メッセージは、"ディスプレイメッセージ "と呼ばれることもあります。これらはFCM SDKによって自動的に処理されます。
- データメッセージは、クライアントアプリによって処理されます。
- 通知メッセージには、ユーザーから見えるキーの定義済みセットが含まれ、オプションのデータペイロードを含めることができます。
- データメッセージには、ユーザー定義のカスタムキーと値のペアのみが含まれます。
- 両方のメッセージタイプの最大ペイロードは4KBです。
データ・メッセージ、通知メッセージ、またはその両方を送信することができますが、データ・メッセージのみを送信することは重要です。通知メッセージはFCMによって自動的に処理され、通知ペイロードが表示されます。
クライアントアプリの代わりにFirebaseに通知を表示させたい場合は通知メッセージを使用し、クライアントアプリでメッセージを処理したい場合はデータメッセージを使用します。オプションのデータペイロードを含む通知メッセージを送信すると、FCMが通知ペイロードの表示を処理し、クライアントアプリがデータペイロードを処理します。
FCMシステムは3者を考慮します:
- クライアントアプリケーション。
- GoogleのFCMサーバー(バックエンド)
- サードパーティのプッシュサーバー
ユーザーがアプリケーションをインストールすると、FCMを有効にするためにアプリケーションを登録する必要があります。以下は、通知を送信するためのFCMワークフローです:
- サードパーティのプッシュサーバーがGoogleのFCMサーバーにプッシュ通知を送信します。これはPubNubが置き換え、簡素化できる部分です。
- これらのサーバーは登録されているすべてのモバイルアプリケーションにメッセージを中継します。
- メッセージはオフラインのデバイスのために保存されます。
- デバイスがオンラインに戻るとすぐに、FCMサーバーはキューに入れられたメッセージをリレーします。
- メッセージはユーザーのデバイスで受信され、プラットフォーム固有の実装に従って表示されます。
PubNubを使ってAndroidにFirebaseプッシュ通知を送信する方法
PubNubリアルタイムメッセージングを使用している場合、すでにすべてのデバイスとリアルタイムで通信しています。しかし、Androidネイティブ体験のためにプッシュ通知を送信したい場合、FCMは大きな味方です。
もしあなたのアプリケーションが複数のプラットフォーム向けであれば、PubNubはApple Push Notification Service (APNs)とFirebaseをすぐにサポートするので、あなたの生活はより簡単になります。まだ複数のプラットフォームをサポートしていない場合でも、FCMのPubNubサポートを使用すると、Firebase通知だけでなくPubNubデータストリーム用の単一のライブラリセットを使用することで、コードを合理化できます。
PubNubはFCMと簡単に統合できる。PubNubチャネルは、これらの通知をGoogleのFCMサーバに送信するサードパーティサーバを置き換えます。登録されたどのエンドポイントでも、接続されたデバイスにプッシュ通知を送信させることができます。
これにより、アプリケーションは特定のチャネルに登録されたデバイスにプッシュ通知を短時間で送信できるようになります。これはGoogleのネイティブAndroid Notification APIとPubNubのリアルタイムデータストリームネットワークを組み合わせたものです。リアルタイムプッシュ通知はどのAndroidデバイスでもネイティブに理解できます。あなたのアプリケーションにすでにFCMがあり、PubNubの使用を検討している場合、あなたのアプリについてほとんど何かを変更する必要はありません、ほとんどの場合、コードを削除します!
スポーツニュースアプリのシナリオに戻ると、スポーツ評論家が自分の携帯電話からリアルタイムでスコアを送信し、他の視聴者のデバイスにプッシュ通知をトリガーすることができます。PubNubを使えば簡単です。PubNubによって自動スケーリングが管理されるため、運用するサーバーを追加する必要はありません!
Firebase Cloud Messaging (FCM)はGoogle Cloud Messaging (GCM)のリブランディングであり、PubNubで扱うのに機能的な違いはありません。GCMを参照する場合は代わりにFCMを使用する必要があります。
PubNubでFirebaseプッシュ通知を始める
完成したFirebaseプッシュ通知プロジェクトをダウンロードしたいですか?https://github.com/PubNubDevelopers/Android-Push-Notifications
このチュートリアルでは、新しいAndroidアプリを作成し、firebaseプッシュ通知を設定し、PubNubモバイルプッシュ通知を有効にし、モバイルプッシュ通知を受信するためにPubNub Android SDKを設定します。まず、常に無料の PubNubアカウントにサインアップする必要があります。サインアップしたら、新しいアプリを作成し、PubNub管理ダッシュボードから固有のPubNubキーを取得します。後で使えるように Publishキーと Subscribeキーを記録しておきましょう。
新しいAndroidアプリを作成する
FCMとPubNubで使用したいアプリがすでにある場合は、このセクションをスキップしてください。
Java SE Development Kit(JDK 8またはnever)をインストールする。
Android Studioをダウンロードしてインストールします。
Android Studioへようこそ」ウィンドウで、「新しいAndroid Studioプロジェクトを開始する」をクリックする。
Application Name(アプリケーション名)、Company Domain(会社ドメイン)を設定し、プロジェクトの場所を変更することもできます。KotlinまたはFlutterアプリを作成する場合は、該当するチェックボックスをオンにします。パッケージ名は後で必要になるのでメモしておこう。他のオプションはそのままにしておく。Next "をクリックする。
最小SDKを "API23: Android 6.0 (Mashmallow) "に設定します。次へ」をクリックします。
Empty Activity "を選択します。次へ」をクリックします。デフォルト値のまま、"Finish "をクリックします。
Firebase Cloud Messaging を追加してリアルタイム通知を構築する
Firebase アカウントを作成またはログインします。
Firebase コンソールで"Add project" をクリックし、Firebase プロジェクトを作成します。
プロジェクト名と場所を設定します。
その後、Androidアプリにfirebaseを追加します。
アプリのパッケージ名とニックネームを入力します。アプリのパッケージ名は "android/app/src/main/java/com/[YourAppName]/MainApplication.java "の一番上にあります。SHA-1は省略してください(このチュートリアルでは必要ありません)。Register app "をクリックします。
google-services.jsonファイルをAndroidアプリモジュールのルートディレクトリにダウンロードします。Firebase SDKは追加しないでください。Firebaseコンソールをスキップして、Firebase SDKとPubNub SDKをアプリに追加するためのこのチュートリアルの手順を続行します。
PubNub管理ダッシュボードに移動し、アプリを選択し、キーセットを選択します。
Mobile Push Notifications "までスクロールダウンし、Push Notificationsアドオンを有効にし(まだ有効になっていない場合)、Firebaseコンソールで作成したアプリのAPIキーを入力します。APIキー(FirebaseコンソールではServer keyと表示される)は、左サイドバーの "Project Overview "に移動し、アプリのメトリクスの右上にあるkebobメニューボタン("⋮")をクリックし、"Settings "をクリックし、"Cloud Messaging "タブを選択することで見つけることができます。
firebaseモバイルプッシュ通知用にFCMとPubNubを設定する
プロジェクトレベルのbuild.gradle(/build.gradle)ファイルを編集し、以下の行を追加します:
buildscript {
dependencies {
// Add this line
classpath 'com.google.gms:google-services:4.0.1'
}
}
これを追加すると、プロジェクトの同期を促す黄色いメッセージが表示されます。今は無視してください。
アプリレベルのbuild.gradle(//build.gradle)ファイルを編集し、以下を追加する:
dependencies {
// Add this line.
implementation 'com.google.firebase:firebase-core:16.0.1'
// Firebase Messaging library for sending push notifications. Add this line.
implementation 'com.google.firebase:firebase-messaging:17.3.3'
// PubNub Android SDK. Add this line.
implementation group: 'com.pubnub', name: 'pubnub-gson', version: '4.20.0'
}
...
// Add to the bottom of the file
apply plugin: 'com.google.gms.google-services'
Android Studioに表示されるバーの "Sync now "をクリックする。
MainActivity.javaファイルを編集してPubNub Android SDKを初期化します。また、プッシュ通知を表示するには、Android APIレベル26以上の通知チャネルを作成する必要があります。
package com.pubnub.hellopush;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.content.Context;
import android.graphics.Color;
import android.os.Build;
import com.pubnub.api.PNConfiguration;
import com.pubnub.api.PubNub;
public class MainActivity extends AppCompatActivity {
public static PubNub pubnub; // PubNub instance
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initPubnub();
createChannel();
}
// Creates PubNub instance with your PubNub credentials. https://admin.pubnub.com/signup
// This instance will be used when we need to create connection to PubNub.
private void initPubnub() {
PNConfiguration pnConfiguration = new PNConfiguration();
pnConfiguration.setPublishKey("YOUR_PUB_KEY_HERE");
pnConfiguration.setSubscribeKey("YOUR_SUB_KEY_HERE");
pnConfiguration.setSecure(true);
pubnub = new PubNub(pnConfiguration);
}
// Creates notification channel.
private void createChannel() {
// Notification channel should only be created for devices running Android API level 26+.
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
NotificationChannel chan1 = new NotificationChannel(
"default",
"default",
NotificationManager.IMPORTANCE_NONE);
chan1.setLightColor(Color.TRANSPARENT);
chan1.setLockscreenVisibility(Notification.VISIBILITY_SECRET);
notificationManager.createNotificationChannel(chan1);
}
}
}
PubNub管理ダッシュボードから固有のPubNubキーを取得します。 YOUR_PUB_KEY_HERE」と「YOUR_SUB_KEY_HERE」をPubNub管理ダッシュボードのキーに置き換えます。
デバイストークンを取得するサービスと、トークンを登録サーバー(PubNub)に送信するメソッドを追加する必要があります。PubNub Android SDKを使用して、登録トークンにチャネルを関連付けます。フォアグラウンドでデータメッセージを処理したり、通知メッセージを表示できるようにするには、FirebaseMessagingServiceを継承したサービスも追加する必要があります。
プロジェクトエクスプローラで、"app > java > [パッケージ名]" ディレクトリを展開します。次に右クリックし、"New > Java Class "を選択します。クラス名を "MyFirebaseMessageService.Java "とします。
package com.pubnub.hellopush;
import android.util.Log;
import com.google.firebase.messaging.FirebaseMessagingService;
import com.google.firebase.messaging.RemoteMessage;
import com.pubnub.api.callbacks.PNCallback;
import com.pubnub.api.enums.PNPushType;
import com.pubnub.api.models.consumer.PNStatus;
import com.pubnub.api.models.consumer.push.PNPushAddChannelResult;
import java.util.Arrays;
public class MyFirebaseMessagingService extends FirebaseMessagingService {
private static final String TAG = "FirebaseService";
@Override
public void onNewToken(String token) {
super.onNewToken(token);
Log.d(TAG,"NEW_TOKEN: "+token);
sendRegistrationToPubNub(token);
}
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
// If the application is in the foreground handle or display both data and notification FCM messages here.
// Here is where you can display your own notifications built from a received FCM message.
super.onMessageReceived(remoteMessage);
Log.d(TAG, "From: " + remoteMessage.getFrom());
if (remoteMessage.getData().size() > 0) {
Log.d(TAG, "Message data payload: " + remoteMessage.getData());
}
if (remoteMessage.getNotification() != null) {
Log.d(TAG, "Message Notification Body: " + remoteMessage.getNotification().getBody());
}
// displayNotification(remoteMessage.getNotification().getBody());
}
private void sendRegistrationToPubNub(String token) {
// Configure PubNub mobile push notifications.
MainActivity.pubnub.addPushNotificationsOnChannels()
.pushType(PNPushType.GCM)
.channels(Arrays.asList("HelloPush", "TestPushChannel"))
.deviceId(token)
.async(new PNCallback<PNPushAddChannelResult>() {
@Override
public void onResponse(PNPushAddChannelResult result, PNStatus status) {
Log.d("PUBNUB", "-->PNStatus.getStatusCode = " + status.getStatusCode());
}
});
}
}
このクラスをAndroidManifest.xmlファイルに追加します。
<service android:name=".MyFirebaseMessagingService">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT"/>
</intent-filter>
</service>
AndroidManifest.xmlファイルの<application>
タグの前に、これらのパーミッションを追加します。
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
PubNubからモバイルプッシュ通知を送信する
AndroidデバイスまたはAndroidエミュレータでアプリをビルドして実行します。
PubNubでモバイルプッシュ通知を送信するには、デバイスが追加されたチャネルまたはチャネルにメッセージを発行します。重要なことは、デバイスがそのチャンネルの通知を受信するためにチャンネルを購読する必要はないということです。デバイスはプッシュ通知用のチャンネルに登録するだけで、そのデバイスタイプ用のプッシュ通知キーがあるメッセージのプッシュ通知を受け取ることができます。
- 関連するFCMデバイスは
pn_gcm
キー内のデータのみを受信します。 - ネイティブPubNub購読者は通知キーを含むオブジェクトリテラル全体を受信します。
このチュートリアルでは、デバイスを "Notifications "チャネルに登録しました。そのチャネルにpn_gcm
キーで送信されたメッセージは、登録されたデバイスにモバイルプッシュ通知として送信されます。
モバイルプッシュ通知をテストする最も簡単な方法は、PubNub管理ダッシュボード内のPubNubデバッグコンソールから送信することです。
PubNub管理ダッシュボードに移動し、アプリを選択し、キーセットを選択します。
Debug Console "をクリックし、"Default Channel "をNotificationsに
設定してクライアントを作成します。
作成したクライアントを使用して、pn_gcm
キーを含むメッセージを送信することで、デバイスに通知を送信できます。
notification
キーを使用してAndroidプッシュ通知を送信します:
{"pn_gcm":{"notification":{"body":"Hello World."}}}
モバイルプッシュ通知の送信に問題がある場合は、トラブルシューティングガイドを参照してください。
目次
FCMを使用してAndroidにFirebaseプッシュ通知を送信する方法の概要PubNubを使用してAndroidにFirebaseプッシュ通知を送信する方法PubNubを使用してFirebaseプッシュ通知を開始する新しいAndroidアプリを作成するFirebaseクラウドメッセージングを追加してリアルタイム通知を構築するFirebaseモバイルプッシュ通知用にFCMとPubNubを設定するPubNubからモバイルプッシュ通知を送信する
PubNubはどのようにお役に立ちますか?
この記事はPubNub.comに掲載されたものです。
PubNubのプラットフォームは、開発者がWebアプリ、モバイルアプリ、IoTデバイス向けにリアルタイムのインタラクティブ機能を構築、配信、管理できるように支援します。
私たちのプラットフォームの基盤は、業界最大かつ最もスケーラブルなリアルタイムエッジメッセージングネットワークです。世界15か所以上で8億人の月間アクティブユーザーをサポートし、99.999%の信頼性を誇るため、停電や同時実行数の制限、トラフィックの急増による遅延の問題を心配する必要はありません。
PubNubを体験
ライブツアーをチェックして、5分以内にすべてのPubNub搭載アプリの背後にある本質的な概念を理解する
セットアップ
PubNubアカウントにサインアップすると、PubNubキーに無料ですぐにアクセスできます。
始める
PubNubのドキュメントは、ユースケースやSDKに関係なく、あなたを立ち上げ、実行することができます。