チュートリアル:Azure Notification Hubs を使用して iOS アプリにプッシュ通知を送信するTutorial: Send push notifications to iOS apps using Azure Notification Hubs

このチュートリアルでは、Azure Notification Hubs を使用して iOS アプリケーションにプッシュ通知を送信します。In this tutorial, you use Azure Notification Hubs to send push notifications to an iOS application. Apple Push Notification Service (APNS) を使用してプッシュ通知を受信する空の iOS アプリを作成します。You create a blank iOS app that receives push notifications by using the Apple Push Notification service (APNs).

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

  • 証明書の署名要求ファイルを生成するGenerate the certificate signing request file
  • アプリをプッシュ通知用に要求するRequest your app for push notifications
  • アプリケーションのプロビジョニング プロファイルを作成するCreate a provisioning profile for the app
  • iOS プッシュ通知向けに通知ハブを構成するConfigure your notification hub for iOS push notifications
  • iOS アプリを通知ハブに接続するConnect your iOS app to notification hubs
  • テスト プッシュ通知を送信するSend test push notifications
  • アプリが通知を受信することを確認するVerify that your app receives notifications

このチュートリアルの完成したコードは、GitHub 上にあります。The complete code for this tutorial can be found on GitHub.

前提条件Prerequisites

このチュートリアルを完了するには、次の前提条件を用意しておく必要があります。To complete this tutorial, you need the following prerequisites:

  • アクティブな Azure アカウントアカウントがない場合、Azure 試用版にサインアップして、最大 10 件の無料 Mobile Apps を入手できます。An active Azure account. アカウントがない場合は、無料の Azure アカウントを作成できます。If you don't have an account, you can create a free Azure account.

  • Windows Azure Messaging FrameworkWindows Azure Messaging Framework

  • XcodeLatest version of Xcode

  • iOS バージョン 10 (またはそれ以降) 対応のデバイスAn iOS version 10 (or later)-capable device

  • Apple Developer Program メンバーシップApple Developer Program membership.

    注意

    プッシュ通知の構成要件により、プッシュ通知のデプロイとテストは、iOS シミュレーターではなく物理 iOS デバイス (iPhone または iPad) で行う必要があります。Because of configuration requirements for push notifications, you must deploy and test push notifications on a physical iOS device (iPhone or iPad) instead of the iOS Simulator.

このチュートリアルを完了することは、iOS アプリケーションの他のすべての Notification Hubs チュートリアルの前提条件です。Completing this tutorial is a prerequisite for all other Notification Hubs tutorials for iOS apps.

証明書の署名要求ファイルを生成するGenerate the certificate-signing request file

Apple Push Notification Service (APNs) では、証明書を使用してプッシュ通知を認証します。The Apple Push Notification Service (APNs) uses certificates to authenticate your push notifications. 次の手順に従って、通知を送受信するために必要なプッシュ証明書を作成します。Follow these instructions to create the necessary push certificate to send and receive notifications. これらの概念の詳細については、Apple Push Notification Service の公式ドキュメントを参照してください。For more information on these concepts, see the official Apple Push Notification Service documentation.

証明書署名要求 (CSR) ファイルを生成します。これは、Apple が署名済みのプッシュ証明書を生成するために使用します。Generate the Certificate Signing Request (CSR) file, which Apple uses to generate a signed push certificate.

  1. Mac で、キーチェーン アクセス ツールを実行します。On your Mac, run the Keychain Access tool. これは、Launchpad のユーティリティ フォルダーまたはその他フォルダーから開くことができます。It can be opened from the Utilities folder or the Other folder on the Launchpad.

  2. [キーチェーン アクセス] を選択し、 [証明書アシスタント] を展開して、 [認証局に証明書を要求] を選択します。Select Keychain Access, expand Certificate Assistant, and then select Request a Certificate from a Certificate Authority.

    Keychain Access を使用して新しい証明書を要求する

    注意

    既定では、キーチェーン アクセスによってリスト内の最初の項目が選択されます。By default, Keychain Access selects the first item in the list. これは、 [証明書] カテゴリで、 [Apple Worldwide Developer Relations Certification Authority] が一覧の最初の項目ではない場合に問題になることがあります。This can be a problem if you're in the Certificates category and Apple Worldwide Developer Relations Certification Authority is not the first item in the list. CSR (証明書署名要求) を生成する前に、キー以外の項目があること、または [Apple Worldwide Developer Relations Certification Authority] キーが選択されていることを確認します。Make sure you have a non-key item, or the Apple Worldwide Developer Relations Certification Authority key is selected, before generating the CSR (Certificate Signing Request).

  3. [ユーザーのメール アドレス] を選択し、 [通称] の値を入力します。 [ディスクに保存] を指定したことを確認してから、 [続ける] を選択します。Select your User Email Address, enter your Common Name value, make sure that you specify Saved to disk, and then select Continue. [CA のメール アドレス] は、必要がないため空白のままにします。Leave CA Email Address blank as it isn't required.

    必要な証明書情報

  4. [名前] に CSR ファイルの名前を入力し、 [場所] で保存先を選択してから、 [保存] を選択します。Enter a name for the CSR file in Save As, select the location in Where, and then select Save.

    証明書のファイル名を選択する

    このアクションにより、選択した場所に CSR ファイルが保存されます。This action saves the CSR file in the selected location. 既定の場所は [デスクトップ] です。The default location is Desktop. ファイル用に選択した場所を忘れないでください。Remember the location chosen for the file.

次に、アプリを Apple に登録し、プッシュ通知を有効にして、エクスポートした CSR をアップロードしてプッシュ証明書を作成します。Next, register your app with Apple, enable push notifications, and upload the exported CSR to create a push certificate.

アプリケーションをプッシュ通知に登録するRegister your app for push notifications

プッシュ通知を iOS アプリに送信するには、アプリケーションを Apple に登録すると共に、プッシュ通知にも登録します。To send push notifications to an iOS app, register your application with Apple, and also register for push notifications.

  1. ご自分のアプリをまだ登録していない場合は、Apple Developer Center の iOS Provisioning Portal に移動します。If you haven't already registered your app, browse to the iOS Provisioning Portal at the Apple Developer Center. 自分の Apple ID を使用してポータルにサインインし、 [Identifiers](識別子) を選択します。Sign in to the portal with your Apple ID, and select Identifiers. 次に、 [+] を選択して、新しいアプリを登録します。Then select + to register a new app.

    iOS Provisioning Portal の [App IDs](アプリ ID) ページ

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

    iOS Provisioning Portal の ID の新規登録ページ

  3. 新しいアプリで次の 3 つの値を更新してから、 [Continue](続行) を選択します。Update the following three values for your new app, and then select Continue:

    • 説明:アプリのわかりやすい名前を入力します。Description: Type a descriptive name for your app.

    • [Bundle ID](バンドル ID) : アプリ ディストリビューション ガイドの説明のとおりに、 <組織 ID>.<製品名> の形式のバンドル ID を入力します。Bundle ID: Enter a Bundle ID of the form Organization Identifier.Product Name as mentioned in the App Distribution Guide. <組織 ID> と <製品名> の値は Xcode プロジェクトを作成する際に使用する組織 ID と製品名に一致させる必要があります。The Organization Identifier and Product Name values must match the organization identifier and product name you use when you create your Xcode project. 次のスクリーンショットでは、NotificationHubs という値が組織 ID として使用され、GetStarted という値が製品名として使用されています。In the following screenshot, the NotificationHubs value is used as an organization identifier and the GetStarted value is used as the product name. Xcode で正しい発行プロファイルが使用されるように、 [Bundle Identifier](バンドル識別子) の値はご自分の Xcode プロジェクトの値と一致させるようにしてください。Make sure the Bundle Identifier value matches the value in your Xcode project, so that Xcode uses the correct publishing profile.

      iOS Provisioning Portal のアプリ ID の登録ページ

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

      新しいアプリ ID を登録するフォーム

      このアクションにより、アプリ ID が生成され、その情報を確認するよう求められます。This action generates your App ID and requests that you confirm the information. [Continue](続行) を選択し、 [Register](登録) を選択して新しいアプリ ID を確認します。Select Continue, then select Register to confirm the new App ID.

      新しいアプリ ID を確認する

      [Register](登録) を選択すると、新しいアプリ ID が [Certificates, Identifiers & Profiles](証明書、識別子、およびプロファイル) ページに 1 行の項目として表示されます。After you select Register, you see the new App ID as a line item in the Certificates, Identifiers & Profiles page.

  4. [Certificates, Identifiers & Profiles](証明書、識別子、およびプロファイル) ページの [Identifiers](識別子) で、先ほど作成したアプリ ID の行項目を探し、その行を選択すると [Edit your App ID Configuration](App ID 構成の編集) 画面が表示されます。In the Certificates, Identifiers & Profiles page, under Identifiers, locate the App ID line item that you just created, and select its row to display the Edit your App ID Configuration screen.

  5. チェック マークが付いた [Push Notifications](プッシュ通知) オプションまで下へスクロールします。証明書を作成するために [Configure](構成) を選択します。Scroll down to the checked Push Notifications option, and then select Configure to create the certificate.

    アプリ ID の編集ページ

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

    アプリ ID の証明書の作成ボタン

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

    注意

    このチュートリアルでは開発証明書を使用します。This tutorial uses a development certificate. 運用証明書の場合も同じ処理を行います。The same process is used when registering a production certificate. 通知の送信と同じ証明書の種類を使用するようにします。Just make sure that you use the same certificate type when sending notifications.

  7. [Choose File](ファイルの選択) を選択して、最初のタスクで CSR ファイルを保存した場所を参照し、証明書名をダブルクリックして読み込みます。Select Choose File, browse to the location where you saved the CSR file from the first task, and then double-click the certificate name to load it. その後 [続行] を選択します。Then select Continue.

  8. ポータルで証明書が作成されたら、 [Download](ダウンロード) ボタンを選択します。After the portal creates the certificate, select the Download button. この証明書を保存し、この保存場所を覚えておいてください。Save the certificate, and remember the location to which it's saved.

    生成された証明書のダウンロード ページ

    証明書がダウンロードされ、自分のコンピューターのダウンロード フォルダーに保存されます。The certificate is downloaded and saved to your computer in your Downloads folder.

    Downloads フォルダーの証明書ファイルを見つける

    注意

    既定では、ダウンロードした開発証明書の名前は aps_development.cer になっています。By default, the downloaded development certificate is named aps_development.cer.

  9. ダウンロードしたプッシュ証明書 aps_development.cer をダブルクリックします。Double-click the downloaded push certificate aps_development.cer. このアクションで、以下の図のように、新しい証明書がキーチェーンにインストールされます:This action installs the new certificate in the Keychain, as shown in the following image:

    新しい証明書が表示されたキーチェーン アクセス証明書リスト

    注意

    証明書の名前は場合によって異なりますが、名前の前には Apple Development iOS Push Services が付けられます。Although the name in your certificate might be different, the name will be prefixed with Apple Development iOS Push Services.

  10. Keychain Access の [Certificates] カテゴリで、作成した新しいプッシュ証明書を右クリックします。In Keychain Access, right-click the new push certificate that you created in the Certificates category. [書き出す] を選択し、ファイルに名前を付けて、 .p12 形式を選択します。次に、 [保存] を選択します。Select Export, name the file, select the .p12 format, and then select Save.

    p12 形式として証明書をエクスポートする

    パスワードを使用して証明書を保護することもできますが、これはオプションです。You can choose to protect the certificate with a password, but this is optional. パスワードの作成を省略する場合は、 [OK] をクリックします。Click OK if you want to bypass password creation. エクスポートした .p12 証明書のファイル名と場所を書き留めます。Make a note of the file name and location of the exported .p12 certificate. これらは、APNs での認証を有効にするために使用されます。They are used to enable authentication with APNs.

    注意

    実際の .p12 ファイルの名前と場所は、このチュートリアルの図に示されているものと異なる場合があります。Your .p12 file name and location might be different than what is pictured in this tutorial.

アプリケーションのプロビジョニング プロファイルを作成するCreate a provisioning profile for the app

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

  2. [Development](開発) で、プロビジョニング プロファイルの種類として [iOS App Development](iOS アプリ開発) を選択し、 [Continue](続行) を選択します。Select iOS App Development under Development as the provisioning profile type, and then select Continue.

    プロビジョニング プロファイル リスト

  3. 次に、 [App ID](アプリ ID) ドロップダウン リストで、自分が作成したアプリ ID を選択し、 [Continue](続行) を選択します。Next, select the app ID you created from the App ID drop-down list, and select Continue.

    アプリ ID を選択する

  4. [Select certificates](証明書の選択) ウィンドウで、コード署名に使用する開発証明書を選択し、 [Continue](続行) を選択します。In the Select certificates window, select the development certificate that you use for code signing, and select Continue. この証明書は、作成したプッシュ証明書ではありません。This certificate isn't the push certificate you created. 存在しない場合は、作成する必要があります。If one does not exist, you must create it. 証明書が存在する場合は、次の手順に進みます。If a certificate does exist, skip to the next step. 開発証明書が存在しない場合に証明書を作成するには:To create a development certificate if one does not exist:

    1. "No Certificates are available (利用可能な証明書がありません) " と表示されたら、 [Create Certificate](証明書の作成) を選択します。If you see No Certificates are available, select Create Certificate.
    2. [Software](ソフトウェア) セクションで、 [Apple Development](Apple 開発) を選択します。In the Software section, select Apple Development. その後 [続行] を選択します。Then select Continue.
    3. [Create a New Certificate](新しい証明書の作成) 画面で、 [Choose File](ファイルの選択) を選択します。In the Create a New Certificate screen, select Choose File.
    4. 先ほど作成した証明書署名要求証明書を参照して選択し、 [Open](開く) を選択します。Browse to the Certificate Signing Request certificate you created earlier, select it, and then select Open.
    5. [続行] をクリックします。Select Continue.
    6. 開発証明書をダウンロードします。この保存場所を覚えておいてください。Download the development certificate, and remember the location to which it's saved.
  5. [Certificates, Identifiers & Profiles](証明書、識別子、およびプロファイル) ページに戻り、左側のメニューから [Profiles](プロファイル) を選択し、 [+] を選択して新しいプロファイルを作成します。Return to the Certificates, Identifiers & Profiles page, select Profiles from the left menu, and then select + to create a new profile. [Register a New Provisioning Profile](新しいプロビジョニング プロファイルの登録) 画面が表示されます。The Register a New Provisioning Profile screen appears.

  6. [Select certificates](証明書の選択) ウィンドウで、先ほど作成した開発証明書を選択します。In the Select certificates window, select the development certificate that you just created. その後 [続行] を選択します。Then select Continue.

  7. 次に、テストに使用するデバイスを選択し、 [Continue](続行) を選択します。Next, select the devices to use for testing, and select Continue.

  8. 最後に、 [Provisioning Profile Name](プロビジョニング プロファイル名) でプロファイルの名前を選択し、 [Generate](生成) を選択します。Finally, choose a name for the profile in Provisioning Profile Name, and select Generate.

    プロビジョニング プロファイル名を選択する

  9. 新しいプロビジョニング プロファイルが作成されたら、 [Download](ダウンロード) を選択します。When the new provisioning profile is created, select Download. この保存場所を覚えておいてください。Remember the location to which it's saved.

  10. プロビジョニング プロファイルの場所を参照し、それをダブルクリックして Xcode 開発マシンにインストールします。Browse to the location of the provisioning profile, and then double-click it to install it on your Xcode development machine.

通知ハブを作成するCreate a notification hub

このセクションでは、前に作成した .p12 プッシュ証明書を使用して、通知ハブを作成し、APNs での認証を構成します。In this section, you create a notification hub and configure authentication with APNs by using the .p12 push certificate that you previously created. 既に作成した通知ハブを使用する場合は、手順 5. に進んでください。If you want to use a notification hub that you've already created, you can skip to step 5.

  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 - 通知ハブの接続文字列

APNs 情報を使用して通知ハブを構成するConfigure your notification hub with APNs information

  1. [Notification Services] で、 [Apple (APNS)] を選択します。Under Notification Services, select Apple (APNS).

  2. [Certificate] を選択します。Select Certificate.

  3. ファイル アイコンを選択します。Select the file icon.

  4. 先ほどエクスポートした .p12 ファイルを選択し、 [Open](開く) を選択します。Select the .p12 file that you exported earlier, and then select Open.

  5. 必要に応じて、適切なパスワードを指定します。If required, specify the correct password.

  6. [サンドボックス] モードを選択します。Select Sandbox mode. [Production] (運用) モードは、ストアからアプリを購入したユーザーにプッシュ通知を送信する場合にのみ使用します。Use the Production mode only if you want to send push notifications to users who purchased your app from the store.

    Azure portal で APNs 証明書を構成する

  7. [保存] を選択します。Select Save.

これで、APNs での通知ハブの構成が完了しました。You've now configured your notification hub with APNs. 接続文字列を使用してアプリを登録し、プッシュ通知を送信することもできます。You also have the connection strings to register your app and send push notifications.

Notification Hubs に iOS アプリケーションを接続するConnect your iOS app to Notification Hubs

  1. Xcode で、新しい iOS プロジェクトを作成し、 [Single View Application] テンプレートを選択します。In Xcode, create a new iOS project and select the Single View Application template.

    Xcode - Single View Application

  2. 新しいプロジェクトのオプションを設定する際には、Apple Developer ポータルでバンドル ID を設定したときと同じ製品名組織識別子を使用してください。When setting the options for your new project, make sure to use the same Product Name and Organization Identifier that you used when you set the bundle identifier in the Apple Developer portal.

  3. プロジェクト ナビゲーターで、 [Targets](ターゲット) で目的のプロジェクト名を選択し、 [Signing & Capabilities](署名と機能) タブを選択します。Apple Developer アカウントに適したチームを選択します。Under Project Navigator, select your project name under Targets, then select the Signing & Capabilities tab. Make sure you select the appropriate Team for your Apple Developer account. XCode を選択すると、バンドル識別子に基づいて以前に作成したプロビジョニング プロファイルが自動的に表示されます。XCode should automatically pull down the Provisioning Profile you created previously based on your bundle identifier.

    Xcode で作成した新しいプロビジョニング プロファイルが表示されない場合は、署名 ID のプロファイルを更新してみてください。If you don't see the new provisioning profile that you created in Xcode, try refreshing the profiles for your signing identity. メニュー バーの Xcode をクリックし、 [Preference (ユーザー設定)][Account (アカウント)] タブ、 [View Details (詳細の表示)] ボタンの順にクリックします。次に、署名 ID をクリックし、右下隅にある更新ボタンをクリックします。Click Xcode on the menu bar, click Preferences, click the Account tab, click the View Details button, click your signing identity, and then click the refresh button in the bottom-right corner.

    Xcode - provisioning profile

  4. [Signing & Capabilities](署名と機能) タブで、 [+ Capability](+ 機能) を選択します。In the Signing & Capabilities tab, select + Capability. [Push Notifications](プッシュ通知) をダブルクリックして有効にします。Double-click Push Notifications to enable it.

    Xcode - プッシュ機能

  5. Azure Notification Hubs SDK モジュールを追加します。Add the Azure Notification Hubs SDK modules.

    Cocoapods を使用して、またはバイナリをプロジェクトに手動で追加して、アプリに Azure Notification Hubs SDK を統合することができます。You can integrate the Azure Notification Hubs SDK in your app by using Cocoapods or by manually adding the binaries to your project.

    • Cocoapods による統合Integration via Cocoapods

      次の依存関係を podfile に追加して、アプリに Azure Notification Hubs SDK を組み込みます。Add the following dependencies to your podfile to include Azure Notification Hubs SDK into your app.

      pod 'AzureNotificationHubs-iOS'
      

      pod install を実行して新しく定義したポッドをインストールし、.xcworkspace を開きます。Run pod install to install your newly defined pod and open your .xcworkspace.

      注意

      pod install を実行している間に [[!] Unable to find a specification for AzureNotificationHubs-iOS](AzureNotificationHubs-iOS に対応する仕様を見つけることができません) などのエラーが発生した場合、pod repo update を実行して Cocoapods リポジトリから最新のポッドを取得してから、pod install を実行してください。If you see an error such as [!] Unable to find a specification for AzureNotificationHubs-iOS while running pod install, please run pod repo update to get the latest pods from the Cocoapods repository, and then run pod install.

    • Carthage による統合Integration via Carthage

      次の依存関係を Cartfile に追加して、アプリに Azure Notification Hubs SDK を組み込みます。Add the following dependencies to your Cartfile to include Azure Notification Hubs SDK into your app.

      github "Azure/azure-notificationhubs-ios"
      

      次に、依存関係を更新してビルドします。Next, update, and build dependencies:

      $ carthage update
      

      Carthage の使用について詳しくは、Carthage GitHub リポジトリをご覧ください。For more information about using Carthage, see the Carthage GitHub repository.

    • バイナリをプロジェクトにコピーすることによる統合Integration by copying the binaries into your project

      1. zip ファイルとして提供されいるり Azure Notification Hubs SDK フレームワークをダウンロードして、解凍します。Download the Azure Notification Hubs SDK framework provided as a zip file and unzip it.

      2. Xcode でプロジェクトを右クリックして [Add Files to (ファイルの追加先)] オプションをクリックし、Xcode プロジェクトに WindowsAzureMessaging.framework フォルダーを追加します。In Xcode, right-click your project and click the Add Files to option to add the WindowsAzureMessaging.framework folder to your Xcode project. [オプション] を選択し、 [Copy items if needed](必要に応じてアイテムをコピーする) をオンにして [追加] をクリックします。Select Options and make sure Copy items if needed is selected, and then click Add.

        Unzip Azure SDK

  6. Constants.h という名前の新しいヘッダー ファイルをプロジェクトに追加します。Add a new header file to your project named Constants.h. そのためには、プロジェクト名を右クリックし、 [New File](新しいファイル) を選択します。次に、 [Header File](ヘッダー ファイル) を選択します。To do so, right-click the project name and select New File.... Then select Header File. このファイルは、通知ハブの定数を保持します。This file holds the constants for your notification hub. 次に、 [次へ] を選択します。Then select Next. ファイルに Constants.h という名前を付けます。Name the file Constants.h.

  7. 次のコードを Constants.h ファイルに追加します。Add the following code to the Constants.h file:

    #ifndef Constants_h
    #define Constants_h
    
    extern NSString* const NHInfoConnectionString;
    extern NSString* const NHInfoHubName;
    extern NSString* const NHUserDefaultTags;
    
    #endif /* Constants_h */
    
  8. Constants.h の実装ファイルを追加します。Add the implementation file for Constants.h. そのためには、プロジェクト名を右クリックし、 [New File](新しいファイル) を選択します。 [Objective-C File](Objective-C ファイル) を選択し、 [Next](次へ) を選択します。To do so, right-click the project name and select New File.... Select Objective-C File, and then select Next. ファイルに Constants.m という名前を付けます。Name the file Constants.m.

    .m ファイルを追加する

  9. Constants.m ファイルを開き、その内容を次のコードに置き換えます。Open the Constants.m file and replace its contents with the following code. 文字列リテラルのプレースホルダー NotificationHubConnectionStringNotificationHubConnectionString を、以前にポータルから取得した、ハブ名と DefaultListenSharedAccessSignature にそれぞれ置き換えます。Replace the string literal placeholders NotificationHubConnectionString and NotificationHubConnectionString with the hub name and the DefaultListenSharedAccessSignature, respectively, as you previously obtained from the portal:

    #import <Foundation/Foundation.h>
    #import "Constants.h"
    
    NSString* const NHInfoConnectionString = @"NotificationHubConnectionString";
    NSString* const NHInfoHubName = @"NotificationHubName";
    NSString* const NHUserDefaultTags = @"notification_tags";
    
  10. プロジェクトの AppDelegate.h ファイルを開き、その内容を次のコードに置き換えます。Open your project's AppDelegate.h file and replace its contents with the following code:

    #import <UIKit/UIKit.h>
    #import <WindowsAzureMessaging/WindowsAzureMessaging.h>
    #import <UserNotifications/UserNotifications.h> 
    
    @interface AppDelegate : UIResponder <UIApplicationDelegate,UNUserNotificationCenterDelegate>
    
    @property (strong, nonatomic) UIWindow *window;
    
    - (void)handleRegister;
    - (void)handleUnregister;
    
    @end
    
    
  11. プロジェクトの AppDelegate.m ファイルに、次の import ステートメントを追加します。In the project's AppDelegate.m file, add the following import statements:

    #import "Constants.h"
    #import "NotificationDetailViewController.h"
    
  12. さらに、AppDelegate.m ファイルで、使用している iOS バージョンに基づいて didFinishLaunchingWithOptions メソッドに次のコードを追加します。Also in your AppDelegate.m file, add the following line of code in the didFinishLaunchingWithOptions method based on your version of iOS. このコードにより、APNs にデバイス ハンドルが登録されます。This code registers your device handle with APNs:

    [[UNUserNotificationCenter currentNotificationCenter] setDelegate:self];
    
  13. 同じ AppDelegate.m ファイルで、didFinishLaunchingWithOptions の後のすべてのコードを次のコードに置き換えます。In the same AppDelegate.m file, replace all the code after didFinishLaunchingWithOptions with the following code:

    // Tells the app that a remote notification arrived that indicates there is data to be fetched.
    
    - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))completionHandler {
        NSLog(@"Received remote (silent) notification");
        [self logNotificationDetails:userInfo];
    
        //
        // Let the system know the silent notification has been processed.
        //
        completionHandler(UIBackgroundFetchResultNoData);
    }
    
    // Tells the delegate that the app successfully registered with Apple Push Notification service (APNs).
    
    - (void) application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
        NSMutableSet *tags = [[NSMutableSet alloc] init];
    
        // Load and parse stored tags
        NSString *unparsedTags = [[NSUserDefaults standardUserDefaults] valueForKey:NHUserDefaultTags];
        if (unparsedTags.length > 0) {
            NSArray *tagsArray = [unparsedTags componentsSeparatedByString: @","];
            [tags addObjectsFromArray:tagsArray];
        }
    
        // Register the device with the Notification Hub.
        // If the device has not already been registered, this will create the registration.
        // If the device has already been registered, this will update the existing registration.
        //
        SBNotificationHub* hub = [self getNotificationHub];
        [hub registerNativeWithDeviceToken:deviceToken tags:tags completion:^(NSError* error) {
            if (error != nil) {
                NSLog(@"Error registering for notifications: %@", error);
            } else {
                [self showAlert:@"Registered" withTitle:@"Registration Status"];
            }
        }];
    }
    
    // UNUserNotificationCenterDelegate methods
    //
    // Asks the delegate how to handle a notification that arrived while the app was running in the  foreground.
    
    - (void)userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions options))completionHandler {
        NSLog(@"Received notification while the application is in the foreground");
    
        // The system calls this delegate method when the app is in the foreground. This allows the app to handle the notification
        // itself (and potentially modify the default system behavior).
    
        // Handle the notification by displaying custom UI.
        //
        [self showNotification:notification.request.content.userInfo];
    
        // Use 'options' to specify which default behaviors to enable.
        // - UNAuthorizationOptionBadge: Apply the notification's badge value to the app’s icon.
        // - UNAuthorizationOptionSound: Play the sound associated with the notification.
        // - UNAuthorizationOptionAlert: Display the alert using the content provided by the notification.
        //
        // In this case, do not pass UNAuthorizationOptionAlert because the notification was handled by the app.
        //
        completionHandler(UNAuthorizationOptionBadge | UNAuthorizationOptionSound);
    }
    
    // Asks the delegate to process the user's response to a delivered notification.
    //
    
    - (void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void(^)(void))completionHandler {
        NSLog(@"Received notification while the application is in the background");
    
        // The system calls this delegate method when the user taps or responds to the system notification.
    
        // Handle the notification response by displaying custom UI
        //
        [self showNotification:response.notification.request.content.userInfo];
    
        // Let the system know the response has been processed.
        //
        completionHandler();
    }
    
    // App logic and helpers
    
    - (SBNotificationHub *)getNotificationHub {
        NSString *hubName = [[NSBundle mainBundle] objectForInfoDictionaryKey:NHInfoHubName];
        NSString *connectionString = [[NSBundle mainBundle] objectForInfoDictionaryKey:NHInfoConnectionString];
    
        return [[SBNotificationHub alloc] initWithConnectionString:connectionString notificationHubPath:hubName];
    }
    
    - (void)handleRegister {
        UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
    
        UNAuthorizationOptions options =  UNAuthorizationOptionAlert | UNAuthorizationOptionSound | UNAuthorizationOptionBadge;
        [center requestAuthorizationWithOptions:(options) completionHandler:^(BOOL granted, NSError * _Nullable error) {
            if (error != nil) {
                NSLog(@"Error requesting for authorization: %@", error);
            }
        }];
        [[UIApplication sharedApplication] registerForRemoteNotifications];
    }
    
    - (void)handleUnregister {
        //
        // Unregister the device with the Notification Hub.
        //
        SBNotificationHub *hub = [self getNotificationHub];
        [hub unregisterNativeWithCompletion:^(NSError* error) {
            if (error != nil) {
                NSLog(@"Error unregistering for push: %@", error);
            } else {
                [self showAlert:@"Unregistered" withTitle:@"Registration Status"];
            }
        }];
    }
    
    - (void)logNotificationDetails:(NSDictionary *)userInfo {
        if (userInfo != nil) {
            UIApplicationState state = [UIApplication sharedApplication].applicationState;
            BOOL background = state != UIApplicationStateActive;
            NSLog(@"Received %@notification: \n%@", background ? @"(background) " : @"", userInfo);
        }
    }
    
    - (void)showAlert:(NSString *)message withTitle:(NSString *)title {
        if (title == nil) {
            title = @"Alert";
        }
        UIAlertController *alert = [UIAlertController alertControllerWithTitle:title message:message preferredStyle:UIAlertControllerStyleAlert];
        [alert addAction:[UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:nil]];
        [[[[UIApplication sharedApplication] keyWindow] rootViewController] presentViewController:alert animated:YES completion:nil];
    }
    
    - (void)showNotification:(NSDictionary *)userInfo {
        [self logNotificationDetails:userInfo];
    
        NotificationDetailViewController *notificationDetail = [[NotificationDetailViewController alloc] initWithUserInfo:userInfo];
        [[[[UIApplication sharedApplication] keyWindow] rootViewController] presentViewController:notificationDetail animated:YES completion:nil];
    }
    
    @end
    

    このコードは、Constants.h に指定した接続情報を使用して通知ハブに接続します。This code connects to the notification hub using the connection information you specified in Constants.h. その後、通知ハブが通知を送信できるように、通知ハブにデバイス トークンを指定します。It then gives the device token to the notification hub so that the notification hub can send notifications.

NotificationDetailViewControllerNotificationDetailViewController

  1. 前の手順と同様に、NotificationDetailViewController.h という名前の別のヘッダー ファイルを追加します。Similar the previous instructions, add another header file named NotificationDetailViewController.h. 新しいヘッダー ファイルの内容を次のコードに置き換えます。Replace the contents of the new header file with the following code:

    #import <UIKit/UIKit.h>
    
    NS_ASSUME_NONNULL_BEGIN
    
    @interface NotificationDetailViewController : UIViewController
    
    @property (strong, nonatomic) IBOutlet UILabel *titleLabel;
    @property (strong, nonatomic) IBOutlet UILabel *bodyLabel;
    @property (strong, nonatomic) IBOutlet UIButton *dismissButton;
    
    @property (strong, nonatomic) NSDictionary *userInfo;
    
    - (id)initWithUserInfo:(NSDictionary *)userInfo;
    
    @end
    
    NS_ASSUME_NONNULL_END
    
  2. 実装ファイル NotificationDetailViewController.m を追加します。Add the implementation file NotificationDetailViewController.m. ファイルの内容を、UIViewController メソッドを実装する次のコードに置き換えます。Replace the contents of the file with the following code, which implements the UIViewController methods:

    #import "NotificationDetailViewController.h"
    
    @interface NotificationDetailViewController ()
    
    @end
    
    @implementation NotificationDetailViewController
    
    - (id)initWithUserInfo:(NSDictionary *)userInfo {
        self = [super initWithNibName:@"NotificationDetail" bundle:nil];
        if (self) {
            _userInfo = userInfo;
        }
        return self;
    }
    
    - (void)viewDidLayoutSubviews {
        [self.titleLabel sizeToFit];
        [self.bodyLabel sizeToFit];
    }
    
    - (void)viewDidLoad {
        [super viewDidLoad];
    
        NSString *title = nil;
        NSString *body = nil;
    
        NSDictionary *aps = [_userInfo valueForKey:@"aps"];
        NSObject *alertObject = [aps valueForKey:@"alert"];
        if (alertObject != nil) {
            if ([alertObject isKindOfClass:[NSDictionary class]]) {
                NSDictionary *alertDict = (NSDictionary *)alertObject;
                title = [alertDict valueForKey:@"title"];
                body = [alertObject valueForKey:@"body"];
            } else if ([alertObject isKindOfClass:[NSString class]]) {
                body = (NSString *)alertObject;
            } else {
                NSLog(@"Unable to parse notification content. Unexpected format: %@", alertObject);
            }
        }
    
        if (title == nil) {
            title = @"<unset>";
        }
    
        if (body == nil) {
            body = @"<unset>";
        }
    
        self.titleLabel.text = title;
        self.bodyLabel.text = body;
    }
    
    - (IBAction)handleDismiss:(id)sender {
        [self dismissViewControllerAnimated:YES completion:nil];
    }
    
    @end
    

ViewControllerViewController

  1. プロジェクトの ViewController.h ファイルに、次の import ステートメントを追加します。In the project's ViewController.h file, add the following import statements:

    #import <WindowsAzureMessaging/WindowsAzureMessaging.h>
    #import <UserNotifications/UserNotifications.h>
    
  2. また、ViewController.h で、@interface 宣言の後に次のプロパティ宣言を追加します。Also in ViewController.h, add the following property declarations after the @interface declaration:

    @property (strong, nonatomic) IBOutlet UITextField *tagsTextField;
    @property (strong, nonatomic) IBOutlet UIButton *registerButton;
    @property (strong, nonatomic) IBOutlet UIButton *unregisterButton;
    
  3. プロジェクトの ViewController.m 実装ファイルで、ファイルの内容を次のコードに置き換えます。In the project's ViewController.m implementation file, replace the contents of the file with the following code:

    #import "ViewController.h"
    #import "Constants.h"
    #import "AppDelegate.h"
    
    @interface ViewController ()
    
    @end
    
    @implementation ViewController
    
    // UIViewController methods
    
    - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
        // Simple method to dismiss keyboard when user taps outside of the UITextField.
        [self.view endEditing:YES];
    }
    
    - (void)viewDidLoad {
        [super viewDidLoad];
    
        // Load raw tags text from storage and initialize the text field
        self.tagsTextField.text = [[NSUserDefaults standardUserDefaults] valueForKey:NHUserDefaultTags];
    }
    
    - (IBAction)handleRegister:(id)sender {
        // Save raw tags text in storage
        [[NSUserDefaults standardUserDefaults] setValue:self.tagsTextField.text forKey:NHUserDefaultTags];
    
    // Delegate processing the register action to the app delegate.
    [[[UIApplication sharedApplication] delegate] performSelector:@selector(handleRegister)];
    }
    
    - (IBAction)handleUnregister:(id)sender {
        [[[UIApplication sharedApplication] delegate] performSelector:@selector(handleUnregister)];
    }
    
    @end
    
  4. エラーがないことを確認するために、デバイスでアプリをビルドして実行します。To verify there are no failures, build and run the app on your device.

テスト プッシュ通知を送信するSend test push notifications

アプリの通知の受信をテストするには、Azure Portal[テスト送信] オプションを使用します。You can test receiving notifications in your app with the Test Send option in the Azure portal. これは、デバイスにテスト プッシュ通知を送信します。It sends a test push notification to your device.

Azure Portal - テスト送信

プッシュ通知は通常、互換性のあるライブラリを使用して 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:

アプリがプッシュ通知を受信することを確認するVerify that your app receives push notifications

iOS でプッシュ通知をテストするには、物理 iOS デバイスにアプリをデプロイする必要があります。To test push notifications on iOS, you must deploy the app to a physical iOS device. iOS シミュレーターを使用して Apple のプッシュ通知を送信することはできません。You cannot send Apple push notifications by using the iOS Simulator.

  1. アプリケーションを実行して登録が成功したことを確認したら、 [OK] を押します。Run the app and verify that registration succeeds, and then press OK.

    iOS App Push Notification Registration Test

  2. 次に、前のセクションで説明されているように、Azure Portal からテスト プッシュ通知を送信します。Next you send a test push notification from the Azure portal, as described in the previous section.

  3. 特定の通知ハブから通知を受信するように登録されているすべてのデバイスにプッシュ通知が送信されます。The push notification is sent to all devices that are registered to receive the notifications from the particular Notification Hub.

    iOS App Push Notification Receive Test

次の手順Next steps

この簡単な例では、すべての登録済み iOS デバイスにプッシュ通知をブロードキャストしました。In this simple example, you broadcasted push notifications to all your registered iOS devices. 特定の iOS デバイスにプッシュ通知を送信する方法を学習するには、次のチュートリアルに進んでください。To learn how to push notifications to specific iOS devices, advance to the following tutorial: