チャット アプリでプッシュ通知を有効にする

このチュートリアルでは、Azure Communication Chat SDK を使用して IOS アプリでプッシュ通知を有効にする方法について説明します。
プッシュ通知は、モバイル アプリがフォアグラウンドで動作していない状況で、チャット スレッドでメッセージの着信をクライアントにアラートすることができます。 Azure Communication Services では、2 つのバージョンのプッシュ通知がサポートされています。

  • Basic Version : ユーザーは、アプリのアイコンに 1 のバッジ番号を表示し、通知音を受信し、ポップアップ アラート バナーを表示できます。

  • Advanced Version: 基本バージョンでサポートされている機能を除き、Contoso はアラート バナーのタイトルおよびメッセージ プレビュー セクションをカスタマイズできます。

    Screenshot of basic version of push notification.

    [基本バージョン]

    Screenshot of advanced version of push notification.

    [詳細バージョン]

コードをダウンロードする

GitHub 上のこのチュートリアルに対するサンプル コードにアクセスします。

前提条件

  1. チャット クイック スタートの前提条件となるすべての手順を完了する

  2. ANH セットアップ
    Communication Services リソースと同じサブスクリプション内に Azure Notification Hub を作成し、Notification Hub を Communication Services リソースにリンクします。 通知ハブのプロビジョニングを参照してください。

  3. APNS 証明書の構成
    ここでは、.p12 APNS 証明書を作成し、Notification Hub で設定することをお勧めします。

    If you are not a Microsoft internal client、手順 1 から 9 に従ってください。
    If you are a Microsoft internal clientここでチケットを送信し、アプリのバンドル ID を指定して .p12 証明書を取得してください。有効な証明書を発行したら、手順 9 を実行してください。

  • 手順 1: Apple Developer ポータルにログインします。 Certificates, IDs & Profiles > Identifiers > App IDs に移動して、アプリに関連付けられているアプリ ID をクリックします。

    Screenshot of APNS Cert Configuration step 1.
  • 手順 2: アプリ ID の画面で、Capabilities > Push Notifications を確認します。 [保存] をクリックし、表示される [アプリ機能の変更] ダイアログボックスに [確認] と応答します。

    Screenshot of APNS Cert Configuration step 2-1.Screenshot of APNS Cert Configuration step 2-2.
  • 手順 3: 同じページで、Capabilities > Push Notifications > Configure をクリックします。 次のいずれかのボタンをクリックします。

    • [開発 SSL 証明書] > [証明書の作成] (iOS アプリの開発中にプッシュ通知をテストする場合)
    • [運用 SSL 証明書] > [証明書の作成] (運用環境でプッシュ通知を送信する場合)
    Screenshot of APNS Cert Configuration step 3.
  • 手順 4: 続いて下のページに移動します。 ここでは、証明書署名要求 (CSR) をアップロードします。 次の手順に従って CSR を作成します。

    Screenshot of APNS Cert Configuration step 4.
  • 手順 5: 新しいブラウザー タブで、このヘルプ ページに従って CSR を作成し、ファイルを "App name.cer" として保存します。

    Screenshot of APNS Cert Configuration step 5 - 1.Screenshot of APNS Cert Configuration step 5 - 2.
  • 手順 6: .cerファイルを [ファイルの選択] 領域までドラッグします。 続いて、右上隅にある [続行] をクリックします。

    Screenshot of APNS Cert Configuration step 6.
  • 手順 7: [ダウンロード] をクリックし、ファイルをローカル ディスクに保存します。

    Screenshot of APNS Cert Configuration step 7.
  • 手順 8: ダウンロードした .cer ファイルを開きます。キーチェーン アクセスが開きます。 証明書を選択し、右クリックし、.p12 形式で証明書をエクスポートします。

    Screenshot of APNS Cert Configuration step 8.
  • 手順 9: 通知ハブに移動し、[設定] の [Apple (APNS)] をクリックし、[認証モード] で [証明書] を選択します。 また、必要に応じてアプリケーション モードを選択します。 続いて、先ほど作成した .p12 ファイルをアップロードします。

    Screenshot of APNS Cert Configuration step 9.
  1. XCode の構成
  • XCode で、Signing & Capabilities に移動します。 [+ 機能] を選択して機能を追加してから、[プッシュ通知] を選択します。

  • [+ 機能] を選択して別の機能を追加してから、[バックグラウンド モード] を選択します。 また、[バックグラウンド モード] で [リモート通知] を選択します。

Screenshot of Enable Push Notifications and Background modes in Xcode.
  • ポッド ターゲットに対して "App-Extension-セーフ API のみを要求する" を "いいえ" に設定する - AzureCore

実装

1 - 基本バージョン

プッシュ通知の基本バージョンを実装する場合は、APNS (Apple Push Notification Service) でリモート通知に登録する必要があります。 AppDelegate.swift で関連する実装を確認するには、サンプル コードを参照してください。

2 - 詳細バージョン

詳細バージョンのプッシュ通知を実装する場合は、アプリに次の項目を含める必要があります。 その理由は、プッシュ通知ペイロードでお客様のコンテンツ (チャット メッセージの内容、送信者の表示名など) を暗号化しており、ユーザー側で何らかの回避策が必要になるためです。

  • 項目 1: 暗号化キーのデータ ストレージ

まず、IOS デバイスに永続的なデータ ストレージを作成する必要があります。 このデータ ストレージでは、メイン アプリとアプリ拡張機能の間でデータを共有できる必要があります (アプリ拡張機能 – Notification Service の拡張機能の詳細については、項目 2 を参照してください)。

サンプル コードでは、データ ストレージとして "アプリ グループ" を選択します。 "アプリ グループ" を作成して使用するための推奨の手順を次に示します。

機能の追加に関するページの手順に従って、アプリのターゲット (メイン アプリと Notification Service 拡張機能の両方) にアプリ グループ機能を追加します (Notification Service 拡張機能を作成する方法については、項目 2 を参照してください)。

また、この Apple 公式ドキュメントの手順に従って、アプリ グループを構成します。 メイン アプリとアプリ拡張機能のコンテナー名が同じであることを確認します。

  • 項目 2: Notification Service の拡張機能

次に、メイン アプリにバンドルされた "Notification Service 拡張機能" を実装する必要があります。 これは、プッシュ通知ペイロードを受信時に復号化するために使用されます。

この Apple 公式ドキュメントに移動します。"プロジェクトにサービス アプリ拡張機能を追加する" 手順と "拡張機能のハンドラー メソッドを実装する" 手順に従います。

"拡張機能のハンドラー メソッドを実装する" 手順では、データを復号化するサンプル コードが Apple から提供されており、その全体的な構造に従うことに注意してください。 ただし、復号化にはチャット SDK を使用するため、“// Try to decode the encrypted message data.” から始まる部分をカスタマイズしたロジックに置き換える必要があります。 NotificationService.swift で関連する実装を確認するには、サンプル コードを参照してください。

  • 項目 3: PushNotificationKeyStorage プロトコルの実装

3 番目に、PushNotificationKeyStorage が詳細バージョンに必要になります。 SDK ユーザーとして、チャット SDK で提供される既定の AppGroupPushNotificationKeyStorage クラスを使用できます。 キー ストレージとして App Group を使用しない場合、またはキー ストレージ メソッドをカスタマイズする場合は、PushNotificationKeyStorage プロトコルに準拠した独自のクラスを作成します。

PushNotificationKeyStorage では、onPersistKey(encryptionKey:expiryTime)onRetrieveKeys() -> [String] の 2 つのメソッドが定義されます。

最初の方法は、ユーザーの IOS デバイスのストレージに暗号化キーを保持するために使用されます。 Chat SDK では、暗号化キーの有効期限として 45 分が設定されます。 プッシュ通知を 45 分以上有効にする場合は、古いキーの有効期限が切れる前に新しい暗号化キーを登録できるように、比較的頻繁に (たとえば 15 分ごとに) chatClient.startPushNotifications(deviceToken:) を呼び出すようにスケジュールする必要があります。

2 番目のメソッドは、以前に格納された有効なキーを取得するために使用されます。 選択したデータ ストレージ (項目 1) に基づいて柔軟にカスタマイズできます。

プロトコル拡張では、Chat SDK により、利用できる decryptPayload(notification:) -> PushNotificationEvent メソッドの実装が提供されます。 NotificationService.swift で関連する実装を確認するには、サンプル コードを参照してください。

テスト

  1. ユーザー A とユーザー B を使用してチャット スレッドを作成します。

  2. サンプル アプリ リポジトリをダウンロードし、前提条件と実装のセクションで上記の手順に従います。

  3. ユーザー A の <ACESS_TOEKN> と <ACS_RESOURCE_ENDPOINT> を AppSettings.plist に入力します。

  4. 2 つのポッド ターゲット (AzureCommunicationChat と Trouter) に対して、[Bitcode を有効にする] を [いいえ] に設定します。

  5. IOS デバイスを Mac に接続し、プログラムを実行し、デバイス上のプッシュ通知を認可するように求められたら [許可] をクリックします。

  6. ユーザー B として、チャット メッセージを送信します。 ユーザー A は、IOS デバイスでプッシュ通知を受信できる必要があります。