チュートリアル:Azure Notification Hubs を使用して Xamarin.iOS アプリにプッシュ通知を送信する

概要

このチュートリアルでは、Azure Notification Hubs を使用して iOS アプリケーションにプッシュ通知を送信する方法について説明します。 Apple Push Notification Service (APNS) を使用してプッシュ通知を受信する空の Xamarin.iOS アプリを作成します。

完了すると、通知ハブを使用して、アプリを実行しているすべてのデバイスにプッシュ通知をブロードキャストできます。 完成したコードは、NotificationHubs アプリ サンプルで参照できます。

このチュートリアルでは、次のタスクを実行するコードを作成および更新します。

  • 証明書の署名要求ファイルを生成する
  • アプリケーションをプッシュ通知に登録する
  • アプリケーションのプロビジョニング プロファイルを作成する
  • iOS プッシュ通知向けに通知ハブを構成する
  • テスト プッシュ通知を送信する

前提条件

  • Azure サブスクリプション。 Azure サブスクリプションをお持ちでない場合は、開始する前に無料の Azure アカウントを作成してください。

  • Xcode

  • iOS 10 以降のバージョンに対応するデバイス

  • Apple Developer Program メンバーシップ

  • Visual Studio for Mac

    Note

    iOS Push Notifications の構成要件に従って、サンプル アプリケーションのデプロイとテストは、シミュレーターではなく、物理的な iOS デバイス (iPhone または iPad) で行う必要があります。

このチュートリアルを完了することは、Xamarin.iOS アプリの他のすべての Notification Hubs チュートリアルの前提条件です。

証明書の署名要求ファイルを生成する

Apple Push Notification Service (APNs) では、証明書を使用してプッシュ通知を認証します。 次の手順に従って、通知を送受信するために必要なプッシュ証明書を作成します。 これらの概念の詳細については、Apple Push Notification Service の公式ドキュメントを参照してください。

証明書署名要求 (CSR) ファイルを生成します。これは、Apple が署名済みのプッシュ証明書を生成するために使用します。

  1. Mac で、キーチェーン アクセス ツールを実行します。 これは、Launchpad のユーティリティ フォルダーまたはその他フォルダーから開くことができます。

  2. [キーチェーン アクセス] を選択し、 [証明書アシスタント] を展開して、 [認証局に証明書を要求] を選択します。

    Use Keychain Access to request a new certificate

    Note

    既定では、キーチェーン アクセスによってリスト内の最初の項目が選択されます。 これは、 [証明書] カテゴリで、 [Apple Worldwide Developer Relations Certification Authority] が一覧の最初の項目ではない場合に問題になることがあります。 CSR (証明書署名要求) を生成する前に、キー以外の項目があること、または [Apple Worldwide Developer Relations Certification Authority] キーが選択されていることを確認します。

  3. [ユーザーのメール アドレス] を選択し、 [通称] の値を入力します。 [ディスクに保存] を指定したことを確認してから、 [続ける] を選択します。 [CA のメール アドレス] は、必要がないため空白のままにします。

    Required certificate information

  4. [名前] に CSR ファイルの名前を入力し、 [場所] で保存先を選択してから、 [保存] を選択します。

    Choose a file name for the certificate

    このアクションにより、選択した場所に CSR ファイルが保存されます。 既定の場所は [デスクトップ] です。 ファイル用に選択した場所を忘れないでください。

次に、アプリを Apple に登録し、プッシュ通知を有効にして、エクスポートした CSR をアップロードしてプッシュ証明書を作成します。

アプリケーションをプッシュ通知に登録する

プッシュ通知を iOS アプリに送信するには、アプリケーションを Apple に登録すると共に、プッシュ通知にも登録します。

  1. ご自分のアプリをまだ登録していない場合は、Apple Developer Center の iOS Provisioning Portal に移動します。 自分の Apple ID を使用してポータルにサインインし、 [Identifiers](識別子) を選択します。 次に、 [+] を選択して、新しいアプリを登録します。

    iOS Provisioning Portal App IDs page

  2. [Register a New Identifier](新しい識別子の登録) 画面で、 [App IDs](アプリ ID) を選択します。 その後 [続行] を選択します。

    iOS Provisioning Portal register new ID page

  3. 新しいアプリで次の 3 つの値を更新してから、 [Continue](続行) を選択します。

    • 説明:アプリのわかりやすい名前を入力します。

    • [Bundle ID](バンドル ID) : アプリ ディストリビューション ガイドの説明のとおりに、 <組織 ID>.<製品名> の形式のバンドル ID を入力します。 <組織 ID> と <製品名> の値は Xcode プロジェクトを作成する際に使用する組織 ID と製品名に一致させる必要があります。 次のスクリーンショットでは、NotificationHubs という値が組織 ID として使用され、GetStarted という値が製品名として使用されています。 Xcode で正しい発行プロファイルが使用されるように、 [Bundle Identifier](バンドル識別子) の値はご自分の Xcode プロジェクトの値と一致させるようにしてください。

      iOS Provisioning Portal register app ID page

    • [Push Notifications](プッシュ通知) : [Capabilities](機能) セクションの [Push Notifications](プッシュ通知) オプションをオンにします。

      Form to register a new App ID

      このアクションにより、アプリ ID が生成され、その情報を確認するよう求められます。 [Continue](続行) を選択し、 [Register](登録) を選択して新しいアプリ ID を確認します。

      Confirm new App ID

      [Register]\(登録\) を選択すると、新しいアプリ ID が [Certificates, Identifiers & Profiles]\(証明書、識別子、およびプロファイル\) ページに 1 行の項目として表示されます。

  4. [Certificates, Identifiers & Profiles]\(証明書、識別子、およびプロファイル\) ページの [Identifiers]\(識別子\) で、先ほど作成したアプリ ID の行項目を探し、その行を選択すると [Edit your App ID Configuration]\(App ID 構成の編集\) 画面が表示されます。

Notification Hubs の証明書を作成する

通知ハブを APNs と連携させるには、証明書が必要です。 これには、次の 2 とおりの方法があります。

  1. Notification Hubs に直接アップロードできる .p12 を作成します。
  2. トークンベースの認証 ("より新しいアプローチ") に使用できる .p8 を作成します。

APNS のトークンベース (HTTP/2) 認証」にも記載されているように、新しい方のアプローチには (証明書を使用した場合と比べて) 多くの利点があります。 ただし、ここでは両方のアプローチの手順を取り上げています。

オプション 1: Notification Hubs に直接アップロードできる .p12 プッシュ証明書を作成する

  1. チェック マークが付いた [Push Notifications](プッシュ通知) オプションまで下へスクロールします。証明書を作成するために [Configure](構成) を選択します。

    Edit App ID page

  2. [Apple Push Notification service SSL Certificates](Apple Push Notification Service の SSL 証明書) ウィンドウが表示されます。 [Development SSL Certificate](開発 SSL 証明書) セクションで [Create Certificate](証明書の作成) ボタンを選択します。

    Create certificate for App ID button

    [Create a new Certificate](新しい証明書の作成) 画面が表示されます。

    注意

    このチュートリアルでは、一意のデバイス トークンを生成するためにアプリで使用される開発証明書を使用します。 運用証明書の場合も同じ処理を行います。 通知の送信と同じ証明書の種類を使用するようにします。

  3. [Choose File](ファイルの選択) を選択して、最初のタスクで CSR ファイルを保存した場所を参照し、証明書名をダブルクリックして読み込みます。 その後 [続行] を選択します。

  4. ポータルで証明書が作成されたら、 [Download](ダウンロード) ボタンを選択します。 この証明書を保存し、この保存場所を覚えておいてください。

    Generated certificate download page

    証明書がダウンロードされ、自分のコンピューターのダウンロード フォルダーに保存されます。

    Locate certificate file in the Downloads folder

    Note

    既定では、ダウンロードした開発証明書の名前は aps_development.cer になっています。

  5. ダウンロードしたプッシュ証明書 aps_development.cer をダブルクリックします。 このアクションで、以下の図のように、新しい証明書がキーチェーンにインストールされます:

    Keychain access certificates list showing new certificate

    Note

    証明書の名前は場合によって異なりますが、名前の前には Apple Development iOS Push Services が付けられます。

  6. Keychain Access の [Certificates] カテゴリで、作成した新しいプッシュ証明書を右クリックします。 [書き出す] を選択し、ファイルに名前を付けて、 .p12 形式を選択します。次に、 [保存] を選択します。

    Export certificate as p12 format

    パスワードを使用して証明書を保護することもできますが、これはオプションです。 パスワードの作成を省略する場合は、 [OK] をクリックします。 エクスポートした .p12 証明書のファイル名と場所を書き留めます。 これらは、APNs での認証を有効にするために使用されます。

    注意

    実際の .p12 ファイルの名前と場所は、このチュートリアルの図に示されているものと異なる場合があります。

オプション 2: トークンベースの認証に使用できる .p8 証明書を作成する

  1. 次の情報をメモしておきます。

    • アプリ ID プレフィックス (チーム ID)
    • バンドル ID
  2. [Certificates, Identifiers & Profiles]\(証明書、識別子、およびプロファイル\) に戻って [Keys]\(キー\) をクリックします。

    Note

    APNS 用に構成されたキーが既にある場合は、作成直後にダウンロードした .p8 証明書を再利用できます。 その場合、手順 3. から手順 5. は無視してかまいません。

  3. [+] ボタン (または [Create a key](キーの作成) ボタン) をクリックして新しいキーを作成します。

  4. [Key Name](キー名) に適切な値を入力し、 [Apple Push Notifications service (APNs)] オプションをオンにして、 [Continue](続行) をクリックし、次の画面で [Register](登録) をクリックします。

  5. [Download](ダウンロード) をクリックして .p8 ファイル (AuthKey_ で始まるファイル) を安全なローカル ディレクトリに移動し、 [Done](完了) をクリックします。

    注意

    .p8 ファイルは必ず安全な場所に保管してください (さらにバックアップを保存すること)。 キーのダウンロード後は、サーバー コピーが削除されるため、再ダウンロードすることはできません。

  6. [Keys](キー) で、先ほど作成したキー (または既存のキーを使用するように選択した場合はそのキー) をクリックします。

  7. [Key ID](キー ID) の値をメモしておきます。

  8. 任意の適切なアプリケーション (Visual Studio Code など) で .p8 証明書を開き、キーの値をメモします。 -----BEGIN PRIVATE KEY----------END PRIVATE KEY----- で挟まれた値が該当します。

    -----BEGIN PRIVATE KEY-----
    <key_value>
    -----END PRIVATE KEY-----
    

    注意

    これは、後で Notification Hub の構成に使用するトークン値です。

以上の手順を終えると、次の情報が確認済みとなります。これらの情報は、後出の「APNs 情報を使用して通知ハブを構成する」で使用します。

  • チーム ID (手順 1. を参照)
  • バンドル ID (手順 1. を参照)
  • キー ID (手順 7. を参照)
  • トークン値 (.p8 キー値) (手順 8. を参照)

アプリケーションのプロビジョニング プロファイルを作成する

  1. iOS Provisioning Portal に戻り、[Certificates, Identifiers & Profiles]\(証明書、識別子、およびプロファイル\) を選択します。左側のメニューから [Profiles]\(プロファイル\) を選択し、+[] を選択して新しいプロファイルを作成します。 [Register a New Provisioning Profile](新しいプロビジョニング プロファイルの登録) 画面が表示されます。

  2. [Development](開発) で、プロビジョニング プロファイルの種類として [iOS App Development](iOS アプリ開発) を選択し、 [Continue](続行) を選択します。

    Provisioning profile list

  3. 次に、 [App ID](アプリ ID) ドロップダウン リストで、自分が作成したアプリ ID を選択し、 [Continue](続行) を選択します。

    Select the App ID

  4. [Select certificates](証明書の選択) ウィンドウで、コード署名に使用する開発証明書を選択し、 [Continue](続行) を選択します。 この証明書は、作成したプッシュ証明書ではありません。 存在しない場合は、作成する必要があります。 証明書が存在する場合は、次の手順に進みます。 開発証明書が存在しない場合に証明書を作成するには:

    1. "No Certificates are available (利用可能な証明書がありません) " と表示されたら、 [Create Certificate](証明書の作成) を選択します。
    2. [Software](ソフトウェア) セクションで、 [Apple Development](Apple 開発) を選択します。 その後 [続行] を選択します。
    3. [Create a New Certificate](新しい証明書の作成) 画面で、 [Choose File](ファイルの選択) を選択します。
    4. 先ほど作成した証明書署名要求証明書を参照して選択し、 [Open](開く) を選択します。
    5. [続行] をクリックします。
    6. 開発証明書をダウンロードします。この保存場所を覚えておいてください。
  5. [Certificates, Identifiers & Profiles]\(証明書、識別子、およびプロファイル\) ページに戻り、左側のメニューから [Profiles]\(プロファイル\) を選択し、+[] を選択して新しいプロファイルを作成します。 [Register a New Provisioning Profile](新しいプロビジョニング プロファイルの登録) 画面が表示されます。

  6. [Select certificates](証明書の選択) ウィンドウで、先ほど作成した開発証明書を選択します。 その後 [続行] を選択します。

  7. 次に、テストに使用するデバイスを選択し、 [Continue](続行) を選択します。

  8. 最後に、 [Provisioning Profile Name](プロビジョニング プロファイル名) でプロファイルの名前を選択し、 [Generate](生成) を選択します。

    Choose a provisioning profile name

  9. 新しいプロビジョニング プロファイルが作成されたら、 [Download](ダウンロード) を選択します。 この保存場所を覚えておいてください。

  10. プロビジョニング プロファイルの場所を参照し、それをダブルクリックして Xcode 開発マシンにインストールします。

通知ハブを作成する

このセクションでは、通知ハブを作成し、.p12 プッシュ証明書またはトークンベースの認証を使用して APNs での認証を構成します。 既に作成した通知ハブを使用する場合は、手順 5. に進んでください。

  1. Azure portal にサインインします。

  2. 左側のメニューから、 [すべてのサービス] を選択します。 A screenshot showing select All Services for an existing namespace.

  3. [サービスのフィルター] テキスト ボックスに「Notification Hubs」と入力します。 サービス名の横にある星のアイコンを選択して、左側のメニューにある [お気に入り] セクションにサービスを追加します。 [Notification Hubs] を選択します。

    A screenshot showing how to filter for notification hubs.

  4. [Notification Hubs] ページで、ツール バーの [作成] を選択します。

    A screenshot showing how to create a new notification hub.

  5. [Notification Hub] ページの [基本] タブで、次の手順を行います。

    1. [サブスクリプション] で、使用する Azure サブスクリプションの名前を選択し、既存のリソース グループを選択するか、新しいリソース グループを作成します。

    2. [名前空間の詳細] に新しい名前空間の一意の名前を入力します。

    3. 名前空間には 1 つ以上の通知ハブが含まれているので、 [通知ハブの詳細] にそのハブの名前を入力します。

    4. [場所] ドロップダウン リスト ボックスで値を選択します。 この値には、ハブを作成する場所を指定します。

      Screenshot showing notification hub details.

    5. Availability Zones オプションをレビューします。 可用性ゾーンがあるリージョンを選んだ場合は、既定でチェック ボックスが選択されます。 Availability Zones は有料機能であるため、追加料金がレベルに追加されます。

    6. [ディザスター リカバリー] オプションを選びます。[None] (なし)、[Paired recovery region] (ペアの復旧リージョン)、または [Flexible recovery region] (フレキシブル復旧リージョン) のオプションがあります。 Paired recovery region (ペアリングされた復旧リージョン) を選択すると、フェールオーバー リージョンが表示されます。 Flexible recovery region (柔軟な復旧リージョン) を選択した場合は、ドロップダウンを使用して復旧リージョンの一覧から選択します。

      Screenshot showing availability zone details.

    7. [作成] を選択します

  6. デプロイが完了したら、[リソースに移動] を選択します。

APNs 情報を使用して通知ハブを構成する

[Notification Services][Apple (APNS)] を選択し、先ほど「Notification Hubs の証明書を作成する」セクションで選択したアプローチに応じて適切な手順に従います。

注意

App Store またはアドホック配布プロファイルを使用してアプリをビルドする場合は、 [Application Mode](アプリケーション モード)[Production](運用) を使用します。 これにより、デバイスは、ストアからアプリを購入したユーザーにプッシュ通知を送信できるようになります。

オプション 1: .p12 プッシュ証明書を使用する

  1. [Certificate] を選択します。

  2. ファイル アイコンを選択します。

  3. 先ほどエクスポートした .p12 ファイルを選択し、 [Open](開く) を選択します。

  4. 必要に応じて、適切なパスワードを指定します。

  5. [サンドボックス] モードを選択します。

    Configure APNs certification in Azure portal

  6. [保存] を選択します。

オプション 2: トークンベースの認証を使用する

  1. [トークン] を選択します。

  2. 先ほど取得した次の値を入力します。

    • キー ID
    • バンドル ID
    • チーム ID
    • トークン
  3. [サンドボックス] を選択します。

  4. [保存] を選択します。

これで、APNs での通知ハブの構成が完了しました。 接続文字列を使用してアプリを登録し、プッシュ通知を送信することもできます。

通知ハブにアプリケーションを接続する

新しいプロジェクトを作成する

  1. Visual Studio で、新しい iOS プロジェクトを作成し、 [単一ビュー アプリ] テンプレートを選択し、 [次へ] をクリックします。

    Visual Studio - Select Application Type

  2. アプリケーション名と組織の識別子を入力し、 [次へ][作成] の順にクリックします。

  3. ソリューション ビューから [Info.plist] をダブルクリックし、 [ID] で、バンドル識別子がプロビジョニング プロファイルを作成するときに使用したものに一致することを確認します。 [署名] で、 [チーム] に Developer アカウントを選択し、[Automatically manage signing](署名を自動的に管理する) をオンにし、署名証明書とプロビジョニング プロファイルが自動的に選択されることを確認します。

    Visual Studio- iOS App Config

  4. ソリューション ビューで、Entitlements.plist をダブルクリックし、 [プッシュ通知を有効にする] チェック ボックスがオンになっていることを確認します。

    Visual Studio- iOS Entitlements Config

  5. Azure Messaging パッケージを追加します。 ソリューション ビューでプロジェクトを右クリックし、 [追加]>[NuGet パッケージの追加] を選択します。 Xamarin.Azure.NotificationHubs.iOS を検索し、パッケージをプロジェクトに追加します。

  6. 新しいファイルをクラスに追加し、Constants.cs と名前を付け、次の変数を追加し、文字列リテラルのプレースホルダーを hubname とメモしておいた DefaultListenSharedAccessSignature に置き換えます。

    // Azure app-specific connection string and hub path
    public const string ListenConnectionString = "<Azure DefaultListenSharedAccess Connection String>";
    public const string NotificationHubName = "<Azure Notification Hub Name>";
    
  7. AppDelegate.cs に次の using ステートメントを追加します。

    using WindowsAzure.Messaging.NotificationHubs;
    using UserNotifications
    
  8. AppDelegate.cs に、MSNotificationHubDelegate の実装を作成します。

    public class AzureNotificationHubListener : MSNotificationHubDelegate
    {
        public override void DidReceivePushNotification(MSNotificationHub notificationHub, MSNotificationHubMessage message)
        {
    
        }
    }
    
  9. AppDelegate.cs で、次のコードと一致するように FinishedLaunching() を更新します。

    public override bool FinishedLaunching(UIApplication application, NSDictionary launchOptions)
    {
        // Set the Message listener
        MSNotificationHub.SetDelegate(new AzureNotificationHubListener());
    
        // Start the SDK
        MSNotificationHub.Start(ListenConnectionString, NotificationHubName);
    
        return true;
    }
    
  10. AppDelegate.cs で、AzureNotificationHubListener クラスの DidReceivePushNotification メソッドを実装します。

    public override void DidReceivePushNotification(MSNotificationHub notificationHub, MSNotificationHubMessage message)
    {
        // This sample assumes { aps: { alert: { title: "Hello", body: "World" } } }
        var alertTitle = message.Title ?? "Notification";
        var alertBody = message.Body;
    
        var myAlert = UIAlertController.Create(alertTitle, alertBody, UIAlertControllerStyle.Alert);
        myAlert.AddAction(UIAlertAction.Create("OK", UIAlertActionStyle.Default, null));
        UIApplication.SharedApplication.KeyWindow.RootViewController.PresentViewController(myAlert, true, null);
    }
    
  11. デバイスでアプリケーションを実行します。

テスト プッシュ通知を送信する

アプリの通知の受信をテストするには、Azure Portal[テスト送信] オプションを使用します。 これは、デバイスにテスト プッシュ通知を送信します。

Azure portal - Test Send

プッシュ通知は通常、互換性のあるライブラリを使用して Mobile Apps などのバックエンド サービスや ASP.NET に送信されます。 ライブラリがバックエンドに使用できない場合は、REST API を直接使用して通知メッセージを送信することもできます。

次の手順

このチュートリアルでは、バックエンドに登録されているすべての iOS デバイスにブロードキャスト通知を送信しました。 特定の iOS デバイスにプッシュ通知を送信する方法を学習するには、次のチュートリアルに進んでください。