C++ を使用して Firebase Cloud Messaging クライアント アプリを設定する

クロスプラットフォーム対応の Firebase Cloud Messaging クライアント アプリを C++ で記述するには、Firebase Cloud Messaging API を使用します。 Android と iOS それぞれに必要な設定を追加すれば、両方のプラットフォームで C++ SDK を動作させることができます。

Firebase と FCM SDK を設定する

Android

  1. FCM クライアント アプリには、Android 4.0 以降を実行している端末が必要です。また、Google Play 開発者サービス アプリケーションがインストールされていて、Android Studio 1.4 以降を使用して Gradle で構築されている必要があります。
  2. まだ追加していない場合は、Firebase を C++ プロジェクトに追加します
  3. Android Studio でアプリレベルの build.gradle ファイルに FCM との依存関係を追加します。
    repositories {
      flatDir {
        dirs project.ext.firebase_cpp_sdk_dir + "/libs/android"
      }
    }
    dependencies {
         compile 'com.google.firebase:firebase-messaging:11.0.4'
         compile 'com.google.firebase.messaging.cpp:firebase_messaging_cpp@aar'
    }
  4. libapp.a および libmessaging.a 静的ライブラリに C++ SDK からリンクします。
  5. JNI 環境とアクティビティを引数で渡し、Firebase App オブジェクトを作成します。
    app = ::firebase::App::Create(::firebase::AppOptions(), jni_env, activity);
    
  6. firebase::messaging::Listener インターフェースを実装するクラスを定義します。
  7. アプリと構築済みリスナーを引数で渡し、Firebase Cloud Messaging を初期化します。
    ::firebase::messaging::Initialize(app, listener);
    
  8. Google Play 開発者サービスの SDK に依存するアプリについては、機能にアクセスする前に必ず、互換性のある Google Play 開発者サービスの APK が端末にインストールされているかチェックする必要があります。詳しくは、Google Play 開発者サービスの APK のチェック手順をご覧ください。

iOS

  1. 有効な APNs 証明書が必要です。まだお持ちでない場合は、APNs の SSL 証明書のプロビジョニング手順をご覧ください。
  2. まだ追加していない場合は、Firebase を C++ プロジェクトに追加します
  3. プロジェクトの Podfile に FCM の依存関係を追加します。
    pod 'Firebase/Messaging'
  4. フレームワーク firebase.frameworkfirebase_messaging.frameworkC++ SDK から XCode プロジェクトにドラッグします。
  5. Firebase アプリ オブジェクトを作成します。
    app = ::firebase::App::Create(::firebase::AppOptions());
  6. firebase::messaging::Listener インターフェースを実装するクラスを定義します。
  7. アプリと構築済みリスナーを引数で渡し、Firebase Cloud Messaging を初期化します。
    ::firebase::messaging::Initialize(app, listener);

端末登録トークンにアクセスする

Firebase Cloud Messaging ライブラリの初期化の際に、クライアント アプリのインスタンス用に登録トークンがリクエストされます。アプリは OnTokenReceived コールバックで登録トークンを受け取ります。このトークンは firebase::messaging::Listener を実装するクラスで定義される必要があります。

その特定の端末をターゲットにする場合は、このトークンにアクセスする必要があります。

Android でのメッセージ配信に関する注意点

アプリがまったく実行されていないときにユーザーが通知をタップすると、デフォルトでは、メッセージが FCM の組み込みコールバックでルーティングされません。この場合、メッセージ ペイロードは、アプリの起動に使用される Intent を通じて受信されます。FCM がこれらの受信メッセージを C++ ライブラリのコールバックに転送するには、Activity の onNewIntent メソッドをオーバーライドし、IntentMessageForwardingService に渡す必要があります。

import com.google.firebase.messaging.MessageForwardingService;

class MyActivity extends Activity {
  private static final String TAG = "MyActvity";

  @Override
  protected void onNewIntent(Intent intent) {
    Log.d(TAG, "A message was sent to this app while it was in the background.");
    Intent message = new Intent(this, MessageForwardingService.class);
    message.setAction(MessageForwardingService.ACTION_REMOTE_INTENT);
    message.putExtras(intent);
    startService(message);
  }
}

Android でのカスタム メッセージ処理

アプリに送信される通知はデフォルトで ::firebase::messaging::Listener::OnMessageReceived に渡されますが、場合によってはデフォルトの動作をオーバーライドすることもできます。Android でこれを行うには、com.google.firebase.messaging.cpp.ListenerService を拡張するカスタムクラスを作成し、プロジェクトの AndroidManifest.xml を更新する必要があります。

ListenerService メソッドをオーバーライドする

ListenerService は、アプリに送信された受信メッセージを傍受し、C++ ライブラリにルーティングする Java クラスです。アプリがフォアグラウンドにあるとき(またはアプリがバックグラウンドで、データのみのペイロードを受け取るとき)、メッセージはこのクラスで提供されるコールバックの 1 つを通過します。メッセージ処理にカスタム動作を追加するには、FCM のデフォルトの ListenerService を拡張する必要があります。

import com.google.firebase.messaging.cpp.ListenerService;

class MyListenerService extends ListenerService {

ListenerService.onMessageReceived メソッドをオーバーライドすると、受信した RemoteMessage オブジェクトに基づいてアクションを実行し、メッセージ データを取得できます。

@Override
public void onMessageReceived(RemoteMessage message) {
  Log.d(TAG, "A message has been received.");
  // Do additional logic...
  super.onMessageReceived(message);
}

ListenerService には、それほど頻繁に使用されない他のいくつかのメソッドもあります。これらはオーバーライドすることもできます。詳しくは、FirebaseMessagingService のリファレンスをご覧ください。

@Override
public void onDeletedMessages() {
  Log.d(TAG, "Messages have been deleted on the server.");
  // Do additional logic...
  super.onDeletedMessages();
}

@Override
public void onMessageSent(String messageId) {
  Log.d(TAG, "An outgoing message has been sent.");
  // Do additional logic...
  super.onMessageSent(messageId);
}

@Override
public void onSendError(String messageId, Exception exception) {
  Log.d(TAG, "An outgoing message encountered an error.");
  // Do additional logic...
  super.onSendError(messageId, exception);
}

AndroidManifest.xml を更新する

カスタムクラスを作成したら、AndroidManifest.xml に含めて有効にする必要があります。以下の例のように、<manifest> タグ内に適切な属性を宣言することによって、マニフェストにマージツールが含まれるようにします。

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.google.firebase.messaging.cpp.samples"
    xmlns:tools="http://schemas.android.com/tools">

firebase_messaging_cpp.aar アーカイブには、FCM のデフォルトの ListenerService を宣言する AndroidManifest.xml ファイルがあります。このマニフェストは通常、ListenerService の実行方法であるプロジェクト固有のマニフェストとマージされます。この ListenerService は、カスタム リスナー サービスで置き換える必要があります。これを行うには、プロジェクトの AndroidManifest.xml ファイルに以下の数行を追加することで、デフォルトの ListenerService を削除し、カスタム サービスを追加します。

<service android:name="com.google.firebase.messaging.cpp.ListenerService"
         tools:node="remove" />
<service android:name="com.google.firebase.messaging.cpp.samples.MyListenerService"
         android:exported="false">
  <intent-filter>
    <action android:name="com.google.firebase.MESSAGING_EVENT"/>
  </intent-filter>
</service>

次のステップ

クライアント アプリを設定したら、Firebase でダウンストリーム メッセージやトピック メッセージを送信できる状態になります。詳細については、ダウンロードして実行可能なクイックスタート サンプルでこの機能に関するデモをご確認ください。

別のより高度な動作をアプリに追加するには、アプリサーバーからのメッセージの送信に関するガイドをご覧ください。

これらの機能を利用するには、サーバーの実装が必要です。

フィードバックを送信...

ご不明な点がありましたら、Google のサポートページをご覧ください。