チュートリアル:Firebase SDK バージョン 0.6 を使用して Android デバイスにプッシュ通知を送信するTutorial: Send push notifications to Android devices using Firebase SDK version 0.6

このチュートリアルでは、Azure Notification Hubs と Firebase Cloud Messaging (FCM) SDK バージョン 0.6 を使用して Android アプリケーションにプッシュ通知を送信する方法について説明します。This tutorial shows you how to use Azure Notification Hubs and the Firebase Cloud Messaging (FCM) SDK version 0.6 to send push notifications to an Android application. このチュートリアルでは、Firebase Cloud Messaging (FCM) を使用してプッシュ通知を受信する空の Android アプリケーションを作成します。In this tutorial, you create a blank Android app that receives push notifications by using Firebase Cloud Messaging (FCM).

このチュートリアルの完成したコードは、GitHub からダウンロードできます。The completed code for this tutorial can be downloaded from GitHub.

このチュートリアルでは、次の手順を実行します。In this tutorial, you take the following steps:

  • Android Studio プロジェクトを作成します。Create an Android Studio project.
  • Firebase Cloud Messaging をサポートする Firebase プロジェクトを作成します。Create a Firebase project that supports Firebase Cloud Messaging.
  • ハブを作成します。Create a hub.
  • そのハブにアプリを接続します。Connect your app to the hub.
  • アプリをテストします。Test the app.

前提条件Prerequisites

このチュートリアルを完了するには、アクティブな Azure アカウントが必要です。To complete this tutorial, you must have an active Azure account. アカウントがない場合は、無料試用アカウントを数分で作成することができます。If you don't have an account, you can create a free trial account in just a couple of minutes. 詳細については、「Azure の無料試用版サイト」を参照してください。For details, see Azure Free Trial.

次のものも必要です。You also need the following items:

  • 最新バージョンの Android StudioThe latest version of Android Studio
  • Android 2.3 以上 (Firebase Cloud Messaging 対応)Android 2.3 or higher for Firebase Cloud Messaging
  • Google Repository リビジョン 27 以上 (Firebase Cloud Messaging 対応)Google Repository revision 27 or higher for Firebase Cloud Messaging
  • Google Play 開発者サービス 9.0.2 以上 (Firebase Cloud Messaging 対応)Google Play Services 9.0.2 or higher for Firebase Cloud Messaging

このチュートリアルを完了することは、Android アプリの他のすべての Notification Hubs チュートリアルを行うための前提条件です。Completing this tutorial is a prerequisite for doing all other Notification Hubs tutorials for Android apps.

Android Studio プロジェクトを作成するCreate an Android Studio Project

  1. Android Studio を起動します。Launch Android Studio.
  2. [File](ファイル) を選択し、 [New](新規) をポイントして、 [New Project](新しいプロジェクト) を選択します。Select File , point to New , and then select New Project.
  3. [Choose your project](プロジェクトの選択) ページで、 [Empty Activity](空のアクティビティ) を選択してから、 [Next](次へ) を選択します。On the Choose your project page, select Empty Activity , and then select Next.
  4. [Configure your project](プロジェクトの構成) ページで、次の手順を実行します。On the Configure your project page, take the following steps:
    1. アプリケーションの名前を入力します。Enter a name for the application.

    2. プロジェクト ファイルを保存する場所を指定します。Specify a location in which to save the project files.

    3. [完了] を選択します。Select Finish.

      プロジェクトを構成する

FCM をサポートする Firebase プロジェクトを作成するCreate a Firebase project that supports FCM

  1. Firebase コンソールにサインインします。Sign in to the Firebase console. Firebase プロジェクトがまだない場合は、新しく作成します。Create a new Firebase project if you don't already have one.

  2. プロジェクトを作成した後、 [Add Firebase to your Android app](Android アプリに Firebase を追加する) を選択します。After you create your project, select Add Firebase to your Android app.

    Android アプリへの Firebase の追加

  3. [Android アプリへの Firebase の追加] ページで、次の手順を実行します。On the Add Firebase to your Android app page, take the following steps:

    1. [Android package name](Android パッケージ名) については、お使いのアプリケーションの build.gradle ファイル内にある applicationId の値をコピーします。For Android package name, copy the value of your applicationId in your application's build.gradle file. この例では com.fabrikam.fcmtutorial1app です。In this example, it's com.fabrikam.fcmtutorial1app.

      パッケージ名を指定する

    2. [アプリの登録] を選択します。Select Register app.

  4. [google-services.json をダウンロード] を選択し、プロジェクトの app フォルダーにファイルを保存して、 [次へ] をクリックします。Select Download google-services.json, save the file into the app folder of your project, and then select Next.

    google-services.json をダウンロードする

  5. Android Studio で、プロジェクトに次の構成変更を加えます。Make the following configuration changes to your project in Android Studio.

    1. プロジェクト レベルの build.gradle ファイル (<project>/build.gradle) で、dependencies セクションに次のステートメントを追加します。In your project-level build.gradle file (<project>/build.gradle), add the following statement to the dependencies section.

      classpath 'com.google.gms:google-services:4.0.1'
      
    2. アプリレベルの build.gradle ファイル (<project>/<app-module>/build.gradle) で、dependencies セクションに次のステートメントを追加します。In your app-level build.gradle file (<project>/<app-module>/build.gradle), add the following statements to the dependencies section.

      implementation 'com.google.firebase:firebase-core:16.0.8'
      implementation 'com.google.firebase:firebase-messaging:17.3.4'
      
    3. アプリ レベルの build.gradle ファイルの最後の dependencies セクションの末尾に次の行を追加します。Add the following line to the end of the app-level build.gradle file after the dependencies section.

      apply plugin: 'com.google.gms.google-services'
      
    4. ツールバーの [今すぐ同期] を選択します。Select Sync now on the toolbar.

      build.gradle の構成変更

  6. [次へ] を選択します。Select Next.

  7. [この手順をスキップする] を選択します。Select Skip this step.

    最後の手順をスキップする

  8. Firebase コンソールで、プロジェクトの歯車アイコンを選択します。In the Firebase console, select the cog for your project. 次に、 [Project Settings](プロジェクト設定) を選択します。Then select Project Settings.

    [Project Settings](プロジェクト設定) の選択

  9. google-services.json ファイルをお使いの Android Studio プロジェクトの app フォルダーにダウンロードしていない場合は、このページでダウンロードできます。If you haven't downloaded the google-services.json file into the app folder of your Android Studio project, you can do so on this page.

  10. 上部にある [クラウド メッセージング] タブに切り替えます。Switch to the Cloud Messaging tab at the top.

  11. 後で使用するために、サーバー キーをコピーし、保存します。Copy and save the Server key for later use. この値を使用して、ハブを構成します。You use this value to configure your hub.

ハブの構成Configure a hub

  1. Azure portal にサインインするSign in to the Azure portal.

  2. 左側のメニューで [すべてのサービス] を選択し、 [モバイル] セクションの [Notification Hubs] を選択します。Select All services on the left menu, and then select Notification Hubs in the Mobile section. サービス名の横にある星のアイコンを選択して、左側のメニューにある [お気に入り] セクションにサービスを追加します。Select the star icon next to the service name to add the service to the FAVORITES section on the left menu. Notification Hubs[お気に入り] に追加した後、左側のメニューでそれを選択します。After you add Notification Hubs to FAVORITES, select it on the left menu.

    Azure portal - Notification Hubs を選択する

  3. [Notification Hubs] ページで、ツール バーの [追加] を選択します。On the Notification Hubs page, select Add on the toolbar.

    Notification Hubs - [追加] ツール バー ボタン

  4. [Notification Hub] ページで、次の手順のようにします。On the Notification Hub page, do the following steps:

    1. [通知ハブ] に名前を入力します。Enter a name in Notification Hub.

    2. [新しい名前空間の作成] に名前を入力します。Enter a name in Create a new namespace. 名前空間には、少なくとも 1 つのハブが存在します。A namespace contains one or more hubs.

    3. [場所] ドロップダウン リスト ボックスで値を選択します。Select a value from the Location drop-down list box. この値には、ハブを作成する場所を指定します。This value specifies the location in which you want to create the hub.

    4. [リソース グループ] で既存のリソース グループを選択します。または、新しいリソース グループに名前を作成します。Select an existing resource group in Resource Group, or create a name for a new resource group.

    5. 作成 を選択します。Select Create.

      Azure Portal - 通知ハブのプロパティを設定

  5. [通知] (ベルのアイコン) を選択し、 [リソースに移動] を選択します。Select Notifications (the bell icon), and then select Go to resource. [Notification Hubs] ページの一覧を最新の情報に更新して、お使いの通知ハブを選択することもできます。You can also refresh the list on the Notification Hubs page and select your hub.

    Azure portal - リソースに移動

  6. リストから [アクセス ポリシー] を選択します。Select Access Policies from the list. 使用可能な 2 つの接続文字列を書き留めてください。Note that the two connection strings are available to you. これらは、後でプッシュ通知を処理するために必要になります。You'll need them later to handle push notifications.

    重要

    DefaultFullSharedAccessSignature ポリシーはアプリケーションで使用 "しない" でください。Do not use the DefaultFullSharedAccessSignature policy in your application. これの使用が意図されているのはバックエンドだけです。This is meant to be used in your back end only.

    Azure Portal - 通知ハブの接続文字列

Firebase Cloud Messaging の設定をハブ用に構成するConfigure Firebase Cloud Messaging settings for the hub

  1. 左側のウィンドウの [Settings](設定) で、 [Google (GCM/FCM)] を選択します。In the left pane, under Settings, select Google (GCM/FCM).

  2. 前に保存した FCM プロジェクトの サーバー キー を入力します。Enter the server key for the FCM project that you saved earlier.

  3. ツールバーで、 [Save](保存) をクリックします。On the toolbar, select Save.

    Azure Notification Hubs - Google (FCM)

  4. Azure portal に、ハブが正常に更新されたことを示すアラートのメッセージが表示されます。The Azure portal displays a message in alerts that the hub has been successfully updated. [Save](保存) ボタンが無効になります。The Save button is disabled.

これで、Firebase Cloud Messaging と連携するようにハブが構成されました。Your hub is now configured to work with Firebase Cloud Messaging. また、デバイスに通知を送信したり、通知を受信するアプリを登録したりするために必要な接続文字列も取得されました。You also have the connection strings that are necessary to send notifications to a device and register an app to receive notifications.

通知ハブにアプリを接続するConnect your app to the notification hub

プロジェクトへの Google Play Services の追加Add Google Play services to the project

  1. Android Studio で、メニューから [ツール] を選択し、 [SDK Manager] を選択します。In Android Studio, select Tools on the menu, and then select SDK Manager.

  2. 自分のプロジェクトで使用される Android SDK のターゲット バージョンを選択します。Select the target version of the Android SDK that is used in your project. 次に、 [パッケージの詳細ページの表示] を選択します。Then select Show Package Details.

    Android SDK Manager - ターゲット バージョンを選択する

  3. まだインストールされていない場合は、 [Google API] を選択します。Select Google APIs , if it's not already installed.

    Android SDK Manager - Google API の選択

  4. [SDK Tools](SDK ツール) タブに切り替えます。Google Play 開発者サービスをまだインストールしていない場合は、次の図に示すように [Google Play 開発者サービス] を選択します。Switch to the SDK Tools tab. If you haven't already installed Google Play Services, select Google Play Services as shown in the following image. 次に、 [適用] をクリックしてインストールします。Then select Apply to install. SDK のパスは後の手順で使用するので、メモしておいてください。Note the SDK path, for use in a later step.

    Android SDK Manager - Google Play 開発者サービスの選択

  5. [Confirm Change](変更の確認) ダイアログ ボックスが表示される場合は、 [OK] を選択します。If you see the Confirm Change dialog box, select OK. コンポーネント インストーラーによって、要求したコンポーネントがインストールされます。The Component Installer installs the requested components. コンポーネントがインストールされた後、 [Finish](完了) を選択します。Select Finish after the components are installed.

  6. [OK] を選択して、 [Settings for New Projects](新しいプロジェクトの設定) ダイアログ ボックスを閉じます。Select OK to close the Settings for New Projects dialog box.

  7. AndroidManifest.xml ファイルを開き、次のタグを application タグに追加します。Open the AndroidManifest.xml file, and then add the following tag to the application tag.

    <meta-data android:name="com.google.android.gms.version"
         android:value="@integer/google_play_services_version" />
    

Azure Notification Hubs ライブラリの追加Add Azure Notification Hubs libraries

  1. アプリの Build.Gradle ファイルで、dependencies セクションに次の行を追加します。In the Build.Gradle file for the app, add the following lines in the dependencies section.

    implementation 'com.microsoft.azure:notification-hubs-android-sdk:0.6@aar'
    
  2. dependencies セクションの後に次のリポジトリを追加します。Add the following repository after the dependencies section.

    repositories {
        maven {
            url "https://dl.bintray.com/microsoftazuremobile/SDK"
        }
    }
    

Google Firebase のサポートを追加するAdd Google Firebase support

  1. アプリの Build.Gradle ファイルで、 dependencies セクションに次の行を追加します (まだ存在しない場合)。In the Build.Gradle file for the app, add the following lines in the dependencies section if they don't already exist.

    implementation 'com.google.firebase:firebase-core:16.0.8'
    implementation 'com.google.firebase:firebase-messaging:17.3.4'
    
  2. ファイルの最後に次のプラグインを追加します (まだそこにない場合)。Add the following plug-in at the end of the file if it's not already there.

    apply plugin: 'com.google.gms.google-services'
    
  3. ツール バーの [Sync Now](今すぐ同期) を選択します。Select Sync Now on the toolbar.

AndroidManifest.xml ファイルの更新Update the AndroidManifest.xml file

  1. FCM 登録トークンを受信したら、それを使用して Azure Notification Hubs に登録しますAfter you receive your FCM registration token, you use it to register with Azure Notification Hubs. この登録は、RegistrationIntentService という名前の IntentService を使用してバックグラウンドでサポートします。You support this registration in the background by using an IntentService named RegistrationIntentService. また、このサービスは FCM 登録トークンを更新します。This service also refreshes your FCM registration token. さらに、通知の受信と処理のために、FirebaseMessagingService のサブクラスとして FirebaseService という名前のクラスを作成し、onMessageReceived メソッドをオーバーライドします。You also create a class named FirebaseService as a subclass of FirebaseMessagingService and override the onMessageReceived method to receive and handle notifications.

    次のサービス定義を AndroidManifest.xml ファイルの <application> タグ内に追加します。Add the following service definition to the AndroidManifest.xml file, inside the <application> tag.

    <service
        android:name=".RegistrationIntentService"
        android:exported="false">
    </service>
    <service
        android:name=".FirebaseService"
        android:exported="false">
        <intent-filter>
            <action android:name="com.google.firebase.MESSAGING_EVENT" />
        </intent-filter>
    </service>
    
  2. 次の必要な FCM 関連のアクセス許可を </application> タグの下に追加します。Add the following necessary FCM-related permissions below the </application> tag.

    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.GET_ACCOUNTS"/>
    <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
    

コードの追加Add code

  1. [Project (プロジェクト)] ビューで、 [app] > [src] > [main] > [java] の順に展開します。In the Project View, expand app > src > main > java. [java] のパッケージ フォルダーを右クリックして、 [New](新規)[Java Class](Java クラス) の順に選択します。Right-click your package folder under java , select New , and then select Java Class. 名前に「 NotificationSettings 」と入力して、 [OK] を選択します。Enter NotificationSettings for the name, and then select OK.

    以下の NotificationSettings クラスのコード内にある次の 3 つのプレースホルダーを忘れずに更新してください。Make sure to update these three placeholders in the following code for the NotificationSettings class:

    • HubListenConnectionString : ハブの DefaultListenAccessSignature 接続文字列。HubListenConnectionString : The DefaultListenAccessSignature connection string for your hub. 接続文字列をコピーするには、 Azure portal のハブにある [アクセス ポリシー] をクリックします。You can copy that connection string by clicking Access Policies in your hub in the Azure portal.

    • HubName : Azure portal のハブ ページに表示されるハブの名前を使用します。HubName : Use the name of your hub that appears in the hub page in the Azure portal.

      NotificationSettings のコードは次のとおりです。NotificationSettings code:

      public class NotificationSettings {
          public static String HubName = "<Your HubName>";
          public static String HubListenConnectionString = "<Enter your DefaultListenSharedAccessSignature connection string>";
      }
      

      重要

      先に進む前に、ハブの 名前DefaultListenSharedAccessSignature を入力します。Enter the name and the DefaultListenSharedAccessSignature of your hub before proceeding further.

  2. RegistrationIntentServiceという名前の別の新しいクラスをプロジェクトに追加します。Add another new class to your project named RegistrationIntentService. このクラスによって、IntentService インターフェイスが実装されます。This class implements the IntentService interface. また、FCM トークンの更新通知ハブへの登録も処理されます。It also handles refreshing the FCM token and registering with the notification hub.

    次のコードをこのクラスに使用します。Use the following code for this class.

    import android.app.IntentService;
    import android.content.Intent;
    import android.content.SharedPreferences;
    import android.preference.PreferenceManager;
    import android.util.Log;
    import com.google.android.gms.tasks.OnSuccessListener;
    import com.google.firebase.iid.FirebaseInstanceId;
    import com.google.firebase.iid.InstanceIdResult;
    import com.microsoft.windowsazure.messaging.NotificationHub;
    import java.util.concurrent.TimeUnit;
    
    public class RegistrationIntentService extends IntentService {
    
        private static final String TAG = "RegIntentService";
        String FCM_token = null;
    
        private NotificationHub hub;
    
        public RegistrationIntentService() {
            super(TAG);
        }
    
        @Override
        protected void onHandleIntent(Intent intent) {
    
            SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
            String resultString = null;
            String regID = null;
            String storedToken = null;
    
            try {
                FirebaseInstanceId.getInstance().getInstanceId().addOnSuccessListener(new OnSuccessListener<InstanceIdResult>() { 
                    @Override 
                    public void onSuccess(InstanceIdResult instanceIdResult) { 
                        FCM_token = instanceIdResult.getToken(); 
                        Log.d(TAG, "FCM Registration Token: " + FCM_token); 
                    } 
                }); 
                TimeUnit.SECONDS.sleep(1);
    
                // Storing the registration ID that indicates whether the generated token has been
                // sent to your server. If it is not stored, send the token to your server.
                // Otherwise, your server should have already received the token.
                if (((regID=sharedPreferences.getString("registrationID", null)) == null)){
    
                    NotificationHub hub = new NotificationHub(NotificationSettings.HubName,
                            NotificationSettings.HubListenConnectionString, this);
                    Log.d(TAG, "Attempting a new registration with NH using FCM token : " + FCM_token);
                    regID = hub.register(FCM_token).getRegistrationId();
    
                    // If you want to use tags...
                    // Refer to : https://azure.microsoft.com/documentation/articles/notification-hubs-routing-tag-expressions/
                    // regID = hub.register(token, "tag1,tag2").getRegistrationId();
    
                    resultString = "New NH Registration Successfully - RegId : " + regID;
                    Log.d(TAG, resultString);
    
                    sharedPreferences.edit().putString("registrationID", regID ).apply();
                    sharedPreferences.edit().putString("FCMtoken", FCM_token ).apply();
                }
    
                // Check to see if the token has been compromised and needs refreshing.
               else if (!(storedToken = sharedPreferences.getString("FCMtoken", "")).equals(FCM_token)) {
    
                    NotificationHub hub = new NotificationHub(NotificationSettings.HubName,
                            NotificationSettings.HubListenConnectionString, this);
                    Log.d(TAG, "NH Registration refreshing with token : " + FCM_token);
                    regID = hub.register(FCM_token).getRegistrationId();
    
                    // If you want to use tags...
                    // Refer to : https://azure.microsoft.com/documentation/articles/notification-hubs-routing-tag-expressions/
                    // regID = hub.register(token, "tag1,tag2").getRegistrationId();
    
                    resultString = "New NH Registration Successfully - RegId : " + regID;
                    Log.d(TAG, resultString);
    
                    sharedPreferences.edit().putString("registrationID", regID ).apply();
                    sharedPreferences.edit().putString("FCMtoken", FCM_token ).apply();
                }
    
                else {
                    resultString = "Previously Registered Successfully - RegId : " + regID;
                }
            } catch (Exception e) {
                Log.e(TAG, resultString="Failed to complete registration", e);
                // If an exception happens while fetching the new token or updating registration data
                // on a third-party server, this ensures that we'll attempt the update at a later time.
            }
    
            // Notify UI that registration has completed.
            if (MainActivity.isVisible) {
                MainActivity.mainActivity.ToastNotify(resultString);
            }
        }
    }
    
  3. MainActivity クラスで、クラス宣言の上に次の import ステートメントを追加します。In the MainActivity class, add the following import statements above the class declaration.

    import com.google.android.gms.common.ConnectionResult;
    import com.google.android.gms.common.GoogleApiAvailability;
    import android.content.Intent;
    import android.util.Log;
    import android.widget.TextView;
    import android.widget.Toast;
    
  4. クラスの先頭に次のメンバーを追加します。Add the following members at the top of the class. これらのフィールドは、Google の推奨に従って Google Play 開発者サービスの可用性をチェックするために使用します。You use these fields to check the availability of Google Play Services as recommended by Google.

    public static MainActivity mainActivity;
    public static Boolean isVisible = false;
    private static final String TAG = "MainActivity";
    private static final int PLAY_SERVICES_RESOLUTION_REQUEST = 9000;
    
  5. MainActivity クラスに、Google Play 開発者サービスが利用可能かどうかを確認する次のメソッドを追加します。In the MainActivity class, add the following method to check the availability of Google Play Services.

    /**
    * Check the device to make sure it has the Google Play Services APK. If
    * it doesn't, display a dialog box that enables  users to download the APK from
    * the Google Play Store or enable it in the device's system settings.
    */
    
    private boolean checkPlayServices() {
        GoogleApiAvailability apiAvailability = GoogleApiAvailability.getInstance();
        int resultCode = apiAvailability.isGooglePlayServicesAvailable(this);
        if (resultCode != ConnectionResult.SUCCESS) {
            if (apiAvailability.isUserResolvableError(resultCode)) {
                apiAvailability.getErrorDialog(this, resultCode, PLAY_SERVICES_RESOLUTION_REQUEST)
                        .show();
            } else {
                Log.i(TAG, "This device is not supported by Google Play Services.");
                ToastNotify("This device is not supported by Google Play Services.");
                finish();
            }
            return false;
        }
        return true;
    }
    
  6. MainActivity クラスに次のコードを追加します。このコードは、Google Play 開発者サービスを確認してから、IntentService を呼び出して FCM 登録トークンを取得し、ハブに登録します。In the MainActivity class, add the following code that checks for Google Play Services before calling the IntentService to get your FCM registration token and register with your hub:

    public void registerWithNotificationHubs()
    {
        if (checkPlayServices()) {
            // Start IntentService to register this application with FCM.
            Intent intent = new Intent(this, RegistrationIntentService.class);
            startService(intent);
        }
    }
    
  7. MainActivity クラスの OnCreate メソッドで、アクティビティの作成時に登録プロセスを開始するために次のコードを追加します。In the OnCreate method of the MainActivity class, add the following code to start the registration process when the activity is created:

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
        mainActivity = this;
        registerWithNotificationHubs();
        FirebaseService.createChannelAndHandleNotifications(getApplicationContext());
    }
    
  8. アプリの状態を確認してアプリ内で報告するには、次の追加メソッドを MainActivity に追加します。To verify app state and report status in your app, add these additional methods to MainActivity:

    @Override
    protected void onStart() {
        super.onStart();
        isVisible = true;
    }
    
    @Override
    protected void onPause() {
        super.onPause();
        isVisible = false;
    }
    
    @Override
    protected void onResume() {
        super.onResume();
        isVisible = true;
    }
    
    @Override
    protected void onStop() {
        super.onStop();
        isVisible = false;
    }
    
    public void ToastNotify(final String notificationMessage) {
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                Toast.makeText(MainActivity.this, notificationMessage, Toast.LENGTH_LONG).show();
                TextView helloText = (TextView) findViewById(R.id.text_hello);
                helloText.setText(notificationMessage);
            }
        });
    }
    
  9. ToastNotify メソッドでは " Hello World " TextView コントロールを使用し、アプリで状態と通知を継続的にレポートします。The ToastNotify method uses the "Hello World" TextView control to report status and notifications persistently in the app. res > layout > activity_main.xml レイアウトで、そのコントロールに次の ID を追加します。In your res > layout > activity_main.xml layout, add the following ID for that control.

    android:id="@+id/text_hello"
    

    TextView コントロールに適用された android:id="@+id/text_hello" ID を示すスクリーンショット。

  10. 次に、AndroidManifest.xml で定義したレシーバーのサブクラスを追加します。Next you add a subclass for the receiver that you defined in AndroidManifest.xml. FirebaseServiceという名前の別の新しいクラスをプロジェクトに追加します。Add another new class to your project named FirebaseService.

  11. 次の import ステートメントを FirebaseService.java の先頭に追加します。Add the following import statements at the top of FirebaseService.java:

    import com.google.firebase.messaging.FirebaseMessagingService;
    import com.google.firebase.messaging.RemoteMessage;
    import android.util.Log;
    import android.app.NotificationChannel;
    import android.app.NotificationManager;
    import android.app.PendingIntent;
    import android.content.Context;
    import android.content.Intent;
    import android.media.RingtoneManager;
    import android.net.Uri;
    import android.os.Build;
    import android.os.Bundle;
    import androidx.core.app.NotificationCompat;
    
  12. FirebaseService クラス用に次のコードを追加して、FirebaseMessagingService のサブクラスにします。Add the following code for the FirebaseService class, making it a subclass of FirebaseMessagingService.

    このコードでは onMessageReceived メソッドをオーバーライドし、受信した通知をレポートします。This code overrides the onMessageReceived method and reports notifications that are received. また、sendNotification() メソッドを使用して Android の通知マネージャーにプッシュ通知を送信します。it also sends the push notification to the Android notification manager by using the sendNotification() method. アプリが動作していないときに通知を受信した場合は、sendNotification() メソッドを呼び出します。Call the sendNotification() method when the app isn't running and a notification is received.

    public class FirebaseService extends FirebaseMessagingService
    {
        private String TAG = "FirebaseService";
    
        public static final String NOTIFICATION_CHANNEL_ID = "nh-demo-channel-id";
        public static final String NOTIFICATION_CHANNEL_NAME = "Notification Hubs Demo Channel";
        public static final String NOTIFICATION_CHANNEL_DESCRIPTION = "Notification Hubs Demo Channel";
    
        public static final int NOTIFICATION_ID = 1;
        private NotificationManager mNotificationManager;
        NotificationCompat.Builder builder;
        static Context ctx;
    
        @Override
        public void onMessageReceived(RemoteMessage remoteMessage) {
            // ...
    
            // TODO(developer): Handle FCM messages here.
            // Not getting messages here? See why this may be: https://goo.gl/39bRNJ
            Log.d(TAG, "From: " + remoteMessage.getFrom());
    
            String nhMessage;
            // Check if message contains a notification payload.
            if (remoteMessage.getNotification() != null) {
                Log.d(TAG, "Message Notification Body: " + remoteMessage.getNotification().getBody());
    
                nhMessage = remoteMessage.getNotification().getBody();
            }
            else {
                nhMessage = remoteMessage.getData().values().iterator().next();
            }
    
            // Also if you intend on generating your own notifications as a result of a received FCM
            // message, here is where that should be initiated. See sendNotification method below.
            if (MainActivity.isVisible) {
                MainActivity.mainActivity.ToastNotify(nhMessage);
            }
            sendNotification(nhMessage);
        }
    
        private void sendNotification(String msg) {
    
            Intent intent = new Intent(ctx, MainActivity.class);
            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    
            mNotificationManager = (NotificationManager)
                    ctx.getSystemService(Context.NOTIFICATION_SERVICE);
    
            PendingIntent contentIntent = PendingIntent.getActivity(ctx, 0,
                    intent, PendingIntent.FLAG_ONE_SHOT);
    
            Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
            NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(
                    ctx,
                    NOTIFICATION_CHANNEL_ID)
                    .setContentText(msg)
                    .setPriority(NotificationCompat.PRIORITY_HIGH)
                    .setSmallIcon(android.R.drawable.ic_popup_reminder)
                    .setBadgeIconType(NotificationCompat.BADGE_ICON_SMALL);
    
            notificationBuilder.setContentIntent(contentIntent);
            mNotificationManager.notify(NOTIFICATION_ID, notificationBuilder.build());
        }
    
        public static void createChannelAndHandleNotifications(Context context) {
            ctx = context;
    
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                NotificationChannel channel = new NotificationChannel(
                        NOTIFICATION_CHANNEL_ID,
                        NOTIFICATION_CHANNEL_NAME,
                        NotificationManager.IMPORTANCE_HIGH);
                channel.setDescription(NOTIFICATION_CHANNEL_DESCRIPTION);
                channel.setShowBadge(true);
    
                NotificationManager notificationManager = context.getSystemService(NotificationManager.class);
                notificationManager.createNotificationChannel(channel);
             }
        }
    }
    
  13. Android Studio のメニュー バーで、 [Build](ビルド) > [Rebuild Project](プロジェクトのリビルド) の順に選択し、コードにエラーがないことを確認します。In Android Studio, on the menu bar, select Build > Rebuild Project to make sure that there aren't any errors in your code. ic_launcher アイコンに関するエラーが発生する場合は、AndroidManifest.xml ファイルから次のステートメントを削除します。If you receive an error about the ic_launcher icon, remove the following statement from the AndroidManifest.xml file:

        android:icon="@mipmap/ic_launcher"
    
  14. アプリを実行するための仮想デバイスがあることを確認します。Ensure you have a virtual device for running the app. ない場合は、次の手順に従って追加してください。If you do not have one, add one as follows:

    1. デバイス マネージャーを開く
    2. 仮想デバイスを作成する
  15. 選択したデバイスでアプリを実行し、そのアプリがハブに正常に登録されることを確認します。Run the app on your selected device and verify that it registers successfully with the hub.

    注意

    インスタンス ID サービスの onTokenRefresh() メソッドが呼び出されるまでは、初期起動時に登録が失敗する場合があります。Registration might fail during the initial launch until the onTokenRefresh() method of the instance ID service is called. 更新すると、通知ハブに正常に登録されるようになります。The refresh should initiate a successful registration with the notification hub.

    デバイス登録成功

通知ハブから通知をテスト送信するTest send notification from the notification hub

次の手順を実行することで、Azure portal からプッシュ通知を送信できます。You can send push notifications from the Azure portal by taking the following steps:

  1. Azure portal 内のお使いのハブの [Notification Hub] ページで、 [トラブルシューティング] セクションの [テスト送信] を選択します。In the Azure portal, on the Notification Hub page for your hub, select Test Send in the Troubleshooting section.

  2. [プラットフォーム] として、 [Android] を選択します。For Platforms , select Android.

  3. [送信] を選択します。Select Send. Android デバイス上でモバイル アプリを実行していないため、まだそのデバイスに通知は表示されません。You won't see a notification on the Android device yet because you haven't run the mobile app on it. モバイル アプリを実行したら、再度 [送信] ボタンを選択して通知メッセージを表示します。After you run the mobile app, select the Send button again to see the notification message.

  4. 一番下の一覧にある操作の結果を確認します。See the result of the operation in the list at the bottom.

    Azure Notification Hubs - Test Send

  5. デバイスに通知メッセージが表示されます。You see the notification message on your device.

    デバイスの通知メッセージ

プッシュ通知は通常、互換性のあるライブラリを使用して Mobile Apps などのバックエンド サービスや ASP.NET に送信されます。Push notifications are normally sent in a back-end service like Mobile Apps or ASP.NET using a compatible library. ライブラリがバックエンドに使用できない場合は、REST API を直接使用して通知メッセージを送信することもできます。If a library isn't available for your back end, you can also use the REST API directly to send notification messages.

通知の送信方法を確認できるチュートリアルの一覧を次に示します。Here is a list of some other tutorials you might want to review for sending notifications:

エミュレーターでモバイル アプリを実行するRun the mobile app on emulator

エミュレーターの内部でプッシュ通知をテストする前に、エミュレーター イメージがアプリ用に選択した Google API レベルをサポートしていることを確認してください。Before you test push notifications inside an emulator, make sure that your emulator image supports the Google API level that you chose for your app. イメージでネイティブの Google API がサポートされていない場合、 SERVICE_NOT_AVAILABLE 例外を受け取ることがあります。If your image doesn't support native Google APIs, you might get the SERVICE_NOT_AVAILABLE exception.

また、 [設定] > [アカウント] で、実行中のエミュレーターに Google アカウントを追加したことを確認してください。Also make sure that you've added your Google account to your running emulator under Settings > Accounts. そうでない場合、FCM で登録しようとすると、 AUTHENTICATION_FAILED 例外が発生する可能性があります。Otherwise, your attempts to register with FCM might result in the AUTHENTICATION_FAILED exception.

次のステップNext steps

このチュートリアルでは、Firebase Cloud Messaging を使用して、このサービスに登録されたすべての Android デバイスに通知をブロードキャストしました。In this tutorial, you used Firebase Cloud Messaging to broadcast notifications to all Android devices that were registered with the service. 特定のデバイスにプッシュ通知を送信する方法を学習するには、次のチュートリアルに進んでください。To learn how to push notifications to specific devices, advance to the following tutorial: