Azure Notification Hubs から iOS へのプッシュ通知の送信Sending push notifications to iOS with Azure Notification Hubs

概要Overview

注意

このチュートリアルを完了するには、アクティブな 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.

このチュートリアルでは、Azure Notification Hubs を使用して iOS アプリケーションにプッシュ通知を送信する方法について説明します。This tutorial shows you how to use Azure Notification Hubs to send push notifications to an iOS application. Apple Push Notification サービス (APNs)を使用してプッシュ通知を受信する空の iOS アプリケーションを作成します。You'll create a blank iOS app that receives push notifications by using the Apple Push Notification service (APNs).

完了すると、通知ハブを使用して、アプリケーションを実行するすべてのデバイスにプッシュ通知をブロードキャストできるようになります。When you're finished, you'll be able to use your notification hub to broadcast push notifications to all the devices running your app.

開始する前にBefore you begin

この記事の目的は、できるだけ迅速に Azure Notification Hubs の使用を開始できるようにすることです。The goal of this article is to help you get started using Azure Notification Hubs as quickly as possible. この記事では、Notification Hubs の基本的な概念に焦点を当てた、非常に単純なブロードキャスト シナリオについて説明します。The article presents a very simple broadcast scenario that focuses on the basic concepts of Notification Hubs.

既に Notification Hubs の使用に慣れている場合は、左側のナビゲーションから別のトピックを選択できます。または、「次のステップ」で関連する記事に移動できます。If you are already familiar with Notification Hubs, you might want to select another topic from the left navigation or go to the relevant articles in the "Next steps" section.

Microsoft は、お客様からのフィードバックを真剣に受け止めています。We take your feedback seriously. このトピックを完了するうえで問題がある場合、またはこのコンテンツを改善するためのご提案がある場合は、記事の最後でフィードバックをご送信ください。If you have any difficulty completing this topic, or if you have recommendations for improving this content, we invite you to provide feedback at the end of the article.

このチュートリアルの完成したコードについては、 GitHubを参照してください。The completed code for this tutorial can be found on GitHub.

前提条件Prerequisites

このチュートリアルには、次のものが必要です。This tutorial requires the following:

  • Mobile Services iOS SDK バージョン 1.2.4[Mobile Services iOS SDK version 1.2.4]
  • XcodeLatest version of Xcode
  • iOS 8 (またはこれ以降のバージョン) に対応したデバイスAn iOS 8 (or later version)-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.

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

  1. Mac で、キーチェーン アクセス ツールを実行します。On your Mac, run the Keychain Access tool. これは、Launchpad の [Utilities] フォルダーまたは [Other] フォルダーから開くことができます。It can be opened from the Utilities folder or the Other folder on the launch pad.
  2. [Keychain Access] をクリックし、[Certificate Assistant] を展開して、[Request a Certificate from a Certificate Authority] をクリックします。Click Keychain Access, expand Certificate Assistant, then click Request a Certificate from a Certificate Authority....

  3. [User Email Address][Common Name] を選択し、[Saved to disk] が選択されていることを確認して、[Continue] をクリックします。Select your User Email Address and Common Name , make sure that Saved to disk is selected, and then click Continue. 必要ではないため、" CA 電子メール アドレス " フィールドを空白のままにします。Leave the CA Email Address field blank as it is not required.

  4. [Save As] に証明書署名要求 (CSR) ファイルの名前を入力し、[Where] で保存場所を選択して [Save] をクリックします。Type a name for the Certificate Signing Request (CSR) file in Save As, select the location in Where, then click Save.

    指定選択した場所に CSR ファイルが保存されます。既定の場所は [Desktop] です。This saves the CSR file in the selected location; the default location is in the Desktop. このファイル用に選択した場所を忘れないでください。Remember the location chosen for this file.

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

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

iOS アプリケーションにプッシュ通知を送信できるようにするには、アプリケーションを Apple に登録し、プッシュ通知にも登録する必要があります。To be able to send push notifications to an iOS app, you must register your application with Apple and also register for push notifications.

  1. アプリをまだ登録していない場合は、Apple Developer センターで iOS Provisioning Portal に移動し、Apple ID でログインして、[Identifiers] をクリックし、[App IDs] をクリックします。最後に、+ 記号をクリックして新しいアプリを登録します。If you have not already registered your app, navigate to the iOS Provisioning Portal at the Apple Developer Center, log on with your Apple ID, click Identifiers, then click App IDs, and finally click on the + sign to register a new app.

  2. 新しいアプリの次の 3 つのフィールドを更新し、 [Continue]をクリックします。Update the following three fields for your new app and then click Continue:

    • Name: [App ID Description] セクションの [Name] フィールドに、アプリのわかりやすい名前を入力します。Name: Type a descriptive name for your app in the Name field in the App ID Description section.
    • Bundle Identifier: [Explicit App ID] セクションに、アプリ ディストリビューション ガイドで説明したように <Organization Identifier>.<Product Name> の形式でバンドル ID を入力します。Bundle Identifier: Under the Explicit App ID section, enter a Bundle Identifier in the form <Organization Identifier>.<Product Name> as mentioned in the App Distribution Guide. 使用する "組織 ID" と "製品名" は XCode プロジェクトを作成する際に使用する組織 ID と製品名に一致させる必要があります。The Organization Identifier and Product Name you use must match the organization identifier and product name you will use when you create your XCode project. 次のスクリーンショットでは、組織 ID として NotificationHubs、製品名として GetStarted を使用しています。In the screeshot below NotificationHubs is used as a organization idenitifier and GetStarted is used as the product name. XCode プロジェクトで使用する値と一致していることを確認することで、XCode で正しい発行プロファイルが使用できるようになります。Making sure this matches the values you will use in your XCode project will allow you to use the correct publishing profile with XCode.
    • Push Notifications: [App Services] セクションの [Push Notifications] オプションをオンにします。Push Notifications: Check the Push Notifications option in the App Services section, .

      これで、アプリケーション ID が生成され、情報の確認が求められます。This generates your App ID and requests you to confirm the information. [Register (登録)] をクリックして新しいアプリケーション ID を確定します。Click Register to confirm the new App ID.

      [Register] をクリックすると、以下のような [Registration complete] 画面が表示されます。Once you click Register, you will see the Registration complete screen, as shown below. [Done]をクリックします。Click Done.

  3. Developer センターで、アプリケーション ID の一覧から作成したアプリケーション ID を見つけ、その行をクリックします。In the Developer Center, under App IDs, locate the app ID that you just created, and click on its row.

    アプリケーション ID をクリックすると、アプリケーションの詳細が表示されます。Clicking on the app ID will display the app details. 画面の下部にある [Edit] をクリックします。Click the Edit button at the bottom.

  4. 画面の下部までスクロールし、[Development Push SSL Certificate] セクションの [Create Certificate] ボタンをクリックします。Scroll to the bottom of the screen, and click the Create Certificate... button under the section Development Push SSL Certificate.

    これで、[Add iOS Certificate] アシスタントが表示されます。This displays the "Add iOS Certificate" assistant.

    注意

    このチュートリアルでは開発証明書を使用します。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.

  5. [Choose File] をクリックして、最初の作業で CSR ファイルを保存した場所に移動し、[Generate] をクリックします。Click Choose File, browse to the location where you saved the CSR file that you created in the first task, then click Generate.

  6. ポータルで証明書が作成されたら [Download] ボタンをクリックし、[Done] をクリックします。After the certificate is created by the portal, click the Download button, and click Done.

    これによって、証明書がダウンロードされ、コンピューターの Downloads フォルダーに保存されます。This downloads the certificate and saves it to your computer in your Downloads folder.

    注意

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

  7. ダウンロードしたプッシュ証明書 aps_development.cer をダブルクリックします。Double-click the downloaded push certificate aps_development.cer.

    下図のように、新しい証明書が Keychain にインストールされます。This installs the new certificate in the Keychain, as shown below:

    注意

    証明書の名前は異なることがありますが、名前の前に Apple Development iOS Push Services:が付けられます。The name in your certificate might be different, but it will be prefixed with Apple Development iOS Push Services:.

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

    エクスポートした .p12 証明書のファイル名と場所を書き留めます。Make a note of the file name and location of the exported .p12 certificate. APNS での認証には、これが使用されます。It will be used to enable authentication with APNS.

    注意

    このチュートリアルでは QuickStart.p12 ファイルを作成します。This tutorial creates a QuickStart.p12 file. ファイル名と場所は同じである必要はありません。Your file name and location might be different.

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

  1. iOS Provisioning Portal に戻って [Provisioning Profiles] を選択し、[All] を選択してから + ボタンをクリックして、新しいプロファイルを作成します。Back in the iOS Provisioning Portal, select Provisioning Profiles, select All, and then click the + button to create a new profile. これで、 Add iOS Provisiong Profile ウィザードが起動されます。This launches the Add iOS Provisiong Profile Wizard

  2. [Development] でプロビジョニング プロファイルの種類として [iOS App Development] を選択し、[Continue] をクリックします。Select iOS App Development under Development as the provisiong profile type, and click Continue.
  3. 次に、[App ID] ドロップダウン リストから作成したばかりのアプリケーション ID を選択し、[Continue] をクリックしますNext, select the app ID you just created from the App ID drop-down list, and click Continue

  4. [Select certificates] 画面で、コードの署名に使用される通常の開発証明書を選択して、[Continue] をクリックします。In the Select certificates screen, select your usual development certificate used for code signing, and click Continue. これは作成したプッシュの証明書ではありません。This is not the push certificate you just created.

  5. 次に、テストに使用するデバイスを選択し、[Continue] をクリックしますNext, select the Devices to use for testing, and click Continue

  6. 最後に、[Profile Name] でプロファイルの名前を選択し、[Generate] をクリックします。Finally, pick a name for the profile in Profile Name, click Generate.

  7. 新しいプロビジョニング プロファイルが作成されたら、それをクリックしてダウンロードし、Xcode の開発用コンピューターにインストールします。When the new provisioning profile is created click to download it and install it on your Xcode development machine. 次に、 [Done]をクリックします。Then click Done.

iOS プッシュ通知向けに通知ハブを構成するConfigure your Notification Hub for iOS push notifications

このセクションでは、作成した .p12 プッシュ証明書を使用して、新しい通知ハブを作成し、APNS での認証を構成する方法について説明します。This section walks you through creating a new notification hub and configuring authentication with APNS using the .p12 push certificate that you created. 既に作成した通知ハブを使用する場合は、手順 5. に進んでください。If you want to use a notification hub that you have already created, you can skip to step 5.

  1. Azure ポータルにサインインします。Sign in to the Azure portal.

  2. [新規] > [Web + モバイル] > [Notification Hub] の順に選択します。Select New > Web + Mobile > Notification Hub.

    Azure Portal - 通知ハブを作成

  3. [Notification Hub] ボックスに一意の名前を入力します。In the Notification Hub box, type a unique name. リージョンサブスクリプションリソース グループを選択します (既にある場合)。Select your Region, Subscription, and Resource Group (if you have one already).

    ハブを作成する Service Bus 名前空間を既に用意してある場合、以下を行います。If you already have a service bus namespace that you want to create the hub in, do the following:

    a.a. [名前空間] 領域で、[既存項目の選択] リンクを選択します。In the Namespace area, select the Select Existing link.

    b.b. [作成]を選択します。Select Create.

    まだ Service Bus 名前空間を用意していない場合、ハブ名に基づいて作成される既定の名前を使用できます (その名前空間名が使用できる場合)。If you don't already have a service bus namespace, you can use the default name, which is created based on the hub name (if the namespace name is available).

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

    名前空間と通知ハブを作成したら、Azure Portal が開きます。After you've created the namespace and notification hub, the Azure portal opens.

    Azure Portal - 通知ハブのポータル ページ

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

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

  1. [設定] ブレードの [Notification Services] ボタンをクリックし、[Apple (APNS)] を選択します。Click the Notification Services button in the Settings blade, then select Apple (APNS). [証明書のアップロード] をクリックし、先にエクスポートしておいた .p12 ファイルを選択します。Click on Upload Certificate and select the .p12 file that you exported earlier. 必ず正しいパスワードも入力してください。Make sure you also specify the correct password.

    これは開発用であるため、[サンドボックス] モードを選択してください。Make sure to select Sandbox mode since this is for development. [実稼働] は、ストアからアプリを購入したユーザーにプッシュ通知を送信する場合にのみ使用します。Only use the Production if you want to send push notifications to users who purchased your app from the store.

    Azure Portal で APNS を構成する    Configure APNS in Azure Portal

    Configure APNS certification in Azure Portal

これで、通知ハブが APNS と連動するように構成されました。接続文字列にアプリケーションを登録し、プッシュ通知を送信できます。Your notification hub is now configured to work with APNS, and you 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 を設定したときと同じ製品名組織 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 previously set the bundle ID on the Apple Developer portal.

    Xcode - project options

  3. [Target (ターゲット)] でプロジェクト名をクリックし、[Build Settings (ビルド設定)] タブをクリックして [Code Signing Identity (コード署名 ID)] を展開し、[Debug (デバッグ)] でコード署名 ID を選択します。Under Targets, click your project name, click the Build Settings tab and expand Code Signing Identity, and then under Debug, set your code-signing identity. [Levels (レベル)][Basic (基本)] から [All (すべて)] に切り替え、[Provisioning Profile (プロビジョニング プロファイル)] に、事前に作成したプロビジョニング プロファイルを設定します。Toggle Levels from Basic to All, and set Provisioning Profile to the provisioning profile that you created previously.

    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. Mobile Services iOS SDK バージョン 1.2.4 をダウンロードしてファイルを解凍します。Download the [Mobile Services iOS SDK version 1.2.4] and unzip the file. 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 (必要に応じてアイテムをコピー)] を選択し、[Add (追加)] をクリックします。Select Copy items if needed, and then click Add.

    注意

    Notification Hubs SDK は現在、Xcode 7 におけるビットコードをサポートしていません。The notification hubs SDK does not currently support bitcode on Xcode 7. プロジェクトの [Build Options (ビルド オプション)][Enable Bitcode (ビットコードの有効化)][No (いいえ)] に設定する必要があります。You must set Enable Bitcode to No in the Build Options for your project.

    Unzip Azure SDK

  5. HubInfo.hという名前の新しいヘッダー ファイルをプロジェクトに追加します。Add a new header file to your project named HubInfo.h. このファイルに通知ハブの定数が保存されます。This file will hold the constants for your notification hub. 次の定義を追加し、文字列リテラルのプレースホルダーを "ハブ名" とメモしておいた DefaultListenSharedAccessSignature に置き換えます。Add the following definitions and replace the string literal placeholders with your hub name and the DefaultListenSharedAccessSignature that you noted earlier.

     #ifndef HubInfo_h
     #define HubInfo_h
    
         #define HUBNAME @"<Enter the name of your hub>"
         #define HUBLISTENACCESS @"<Enter your DefaultListenSharedAccess connection string"
    
     #endif /* HubInfo_h */
    
  6. AppDelegate.h ファイルを開き、次の import ディレクティブを追加します。Open your AppDelegate.h file add the following import directives:

      #import <WindowsAzureMessaging/WindowsAzureMessaging.h> 
      #import "HubInfo.h"
    
  7. AppDelegate.m file で、iOS のバージョンに基づいて didFinishLaunchingWithOptions メソッド内に次のコードを追加します。In your AppDelegate.m file, add the following code in the didFinishLaunchingWithOptions method based on your version of iOS. このコードにより、APNs にデバイス ハンドルが登録されます。This code registers your device handle with APNs:

    iOS 8 の場合:For iOS 8:

      UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeSound |
                                             UIUserNotificationTypeAlert | UIUserNotificationTypeBadge categories:nil];
    
     [[UIApplication sharedApplication] registerUserNotificationSettings:settings];
     [[UIApplication sharedApplication] registerForRemoteNotifications];
    

    iOS 8 より前のバージョンの場合:For iOS versions prior to 8:

      [[UIApplication sharedApplication] registerForRemoteNotificationTypes: UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound];
    
  8. 同じファイルで、次のメソッドを追加します。In the same file, add the following methods. このコードは、HubInfo.h に指定した接続情報を使用して通知ハブに接続します。This code connects to the notification hub using the connection information you specified in HubInfo.h. その後、通知ハブが通知を送信できるように、通知ハブにデバイス トークンを指定します。It then gives the device token to the notification hub so that the notification hub can send notifications:

     - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *) deviceToken {
         SBNotificationHub* hub = [[SBNotificationHub alloc] initWithConnectionString:HUBLISTENACCESS
                                     notificationHubPath:HUBNAME];
    
         [hub registerNativeWithDeviceToken:deviceToken tags:nil completion:^(NSError* error) {
             if (error != nil) {
                 NSLog(@"Error registering for notifications: %@", error);
             }
             else {
                 [self MessageBox:@"Registration Status" message:@"Registered"];
             }
         }];
     }
    
     -(void)MessageBox:(NSString *)title message:(NSString *)messageText
     {
         UIAlertView *alert = [[UIAlertView alloc] initWithTitle:title message:messageText delegate:self
             cancelButtonTitle:@"OK" otherButtonTitles: nil];
         [alert show];
     }
    
  9. 同じファイルで次のメソッドを追加し、アプリケーションがアクティブのときに通知を受信した場合に UIAlert が表示されるようにします。In the same file, add the following method to display a UIAlert if the notification is received while the app is active:

     - (void)application:(UIApplication *)application didReceiveRemoteNotification: (NSDictionary *)userInfo {
         NSLog(@"%@", userInfo);
         [self MessageBox:@"Notification" message:[[userInfo objectForKey:@"aps"] valueForKey:@"alert"]];
     }
    
  10. お使いのデバイスでアプリケーションをビルドして実行し、エラーがないことを確認します。Build and run the app on your device to verify that there are no failures.

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

アプリで通知の受信テストを行うには、Azure Portal でハブ ブレードの [トラブルシューティング] から ( [テストの送信] オプションを使用して) プッシュ通知を送信します。You can test receiving notifications in your app by sending push notifications in the Azure Portal via the Troubleshooting section in the hub blade (use the Test Send option).

Azure Portal - Test Send

プッシュ通知は通常、互換性のあるライブラリを使用して 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 を直接使用して通知メッセージを送信できます。You can also use the REST API directly to send notification messages if a library is not available for your back-end.

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

チュートリアルの次のセクションでは、 Notification Hub REST インターフェイス を使用してアプリで直接通知メッセージを送信する方法について説明します。In the next section of the tutorial, you will learn how to use the Notification Hub REST interface to send the notification message directly in your app. すべての登録デバイスは、任意のデバイスから送信された通知を受信します。All registered devices receive the notification sent by any device.

(省略可能) アプリからプッシュ通知を送信する(Optional) Send push notifications from the app

重要

この例では、クライアント アプリからの通知の送信方法を学習目的でのみ紹介しています。This example of sending notifications from the client app is provided for learning purposes only. クライアント アプリには DefaultFullSharedAccessSignature が存在している必要があります。この点がご利用の通知ハブにとってリスクとなります。ユーザーによって不正な通知がクライアントに送信される可能性があります。Since this will require the DefaultFullSharedAccessSignature to be present on the client app, it exposes your notification hub to the risk that a user may gain access to send unauthorized notifications to your clients.

このセクションでは、REST インターフェイスを使用して、アプリ内からプッシュ通知を送信する方法の例を示します。If you want to send push notifications from within an app, this section provides an example of how to do this using the REST interface.

  1. Xcode で Main.storyboard を開き、オブジェクト ライブラリから次の UI コンポーネントを追加して、ユーザーがアプリでプッシュ通知を送信できるようにします。In Xcode, open Main.storyboard and add the following UI components from the object library to allow the user to send push notifications in the app:

    • ラベル テキストなしのラベル。A label with no label text. これは、通知の送信時にエラーをレポートするために使用されます。It will be used to report errors in sending notifications. [Lines (線)] プロパティを 0 に設定して、左右の余白とビューの上部の制約を受けてサイズが自動で設定されるようにします。The Lines property should be set to 0 so that it will automatically size constrained to the right and left margins and the top of the view.
    • [Placeholder (プレースホルダー)] テキストが Enter Notification Message に設定されたテキスト フィールド。A text field with Placeholder text set to Enter Notification Message. 次に示すように、ラベルのすぐ下のフィールドを制限します。Constrain the field just below the label as shown below. ビュー コントローラーをアウトレット デリゲートに設定します。Set the View Controller as the outlet delegate.
    • テキスト フィールドのすぐ下で水平方向の中央に制約された [Send Notification] というタイトルのボタン。A button titled Send Notification constrained just below the text field and in the horizontal center.

      ビューは次のようになります。The view should look as follows:

      Xcode designer

  2. ビューに関連付けられたラベルとテキスト フィールドにアウトレットを追加し、UITextFieldDelegateNSXMLParserDelegate をサポートするように interface の定義を更新します。Add outlets for the label and text field connected your view, and update your interface definition to support UITextFieldDelegate and NSXMLParserDelegate. 以下に示す 3 つのプロパティ宣言を追加し、REST API の呼び出しと応答の解析をサポートします。Add the three property declarations shown below to help support calling the REST API and parsing the response.

    ViewController.h ファイルは次のようになります。Your ViewController.h file should look as follows:

     #import <UIKit/UIKit.h>
    
     @interface ViewController : UIViewController <UITextFieldDelegate, NSXMLParserDelegate>
     {
         NSXMLParser *xmlParser;
     }
    
     // Make sure these outlets are connected to your UI by ctrl+dragging
     @property (weak, nonatomic) IBOutlet UITextField *notificationMessage;
     @property (weak, nonatomic) IBOutlet UILabel *sendResults;
    
     @property (copy, nonatomic) NSString *statusResult;
     @property (copy, nonatomic) NSString *currentElement;
    
     @end
    
  3. HubInfo.h を開いて、次の定数を追加します。これらの定数は、ハブに通知を送信する際に使用されます。Open HubInfo.h and add the following constants which will be used for sending notifications to your hub. プレースホルダーの文字列リテラルを実際の DefaultFullSharedAccessSignature 接続文字列に置き換えます。Replace the placeholder string literal with your actual DefaultFullSharedAccessSignature connection string.

     #define API_VERSION @"?api-version=2015-01"
     #define HUBFULLACCESS @"<Enter Your DefaultFullSharedAccess Connection string>"
    
  4. 次の #import ステートメントを ViewController.h ファイルに追加します。Add the following #import statements to your ViewController.h file.

     #import <CommonCrypto/CommonHMAC.h>
     #import "HubInfo.h"
    
  5. ViewController.m で、インターフェイスの実装に次のコードを追加します。In ViewController.m add the following code to the interface implementation. これは、 DefaultFullSharedAccessSignature 接続文字列を解析するコードです。This code will parse your DefaultFullSharedAccessSignature connection string. REST API リファレンスで説明したように、解析されたこの情報は Authorization 要求ヘッダーの SaS トークンの生成に使用されます。As mentioned in the REST API reference, this parsed information will be used to generate a SaS token for the Authorization request header.

     NSString *HubEndpoint;
     NSString *HubSasKeyName;
     NSString *HubSasKeyValue;
    
     -(void)ParseConnectionString
     {
         NSArray *parts = [HUBFULLACCESS componentsSeparatedByString:@";"];
         NSString *part;
    
         if ([parts count] != 3)
         {
             NSException* parseException = [NSException exceptionWithName:@"ConnectionStringParseException"
                 reason:@"Invalid full shared access connection string" userInfo:nil];
    
             @throw parseException;
         }
    
         for (part in parts)
         {
             if ([part hasPrefix:@"Endpoint"])
             {
                 HubEndpoint = [NSString stringWithFormat:@"https%@",[part substringFromIndex:11]];
             }
             else if ([part hasPrefix:@"SharedAccessKeyName"])
             {
                 HubSasKeyName = [part substringFromIndex:20];
             }
             else if ([part hasPrefix:@"SharedAccessKey"])
             {
                 HubSasKeyValue = [part substringFromIndex:16];
             }
         }
     }
    
  6. ViewController.m で、viewDidLoad メソッドを更新してビューの読み込み時に接続文字列を解析します。In ViewController.m, update the viewDidLoad method to parse the connection string when the view loads. また、以下に示したユーティリティ メソッドをインターフェイスの実装に追加します。Also add the utility methods, shown below, to the interface implementation.

     - (void)viewDidLoad
     {
         [super viewDidLoad];
         [self ParseConnectionString];
         [_notificationMessage setDelegate:self];
     }
    
     -(NSString *)CF_URLEncodedString:(NSString *)inputString
     {
        return (__bridge NSString *)CFURLCreateStringByAddingPercentEscapes(NULL, (CFStringRef)inputString,
             NULL, (CFStringRef)@"!*'();:@&=+$,/?%#[]", kCFStringEncodingUTF8);
     }
    
     -(void)MessageBox:(NSString *)title message:(NSString *)messageText
     {
         UIAlertView *alert = [[UIAlertView alloc] initWithTitle:title message:messageText delegate:self
             cancelButtonTitle:@"OK" otherButtonTitles: nil];
         [alert show];
     }
    
  7. ViewController.mで、 REST API リファレンス で説明されているように、次のコードをインターフェイスの実装に追加して、 Authorizationヘッダーに指定する SaS 認証トークンを生成します。In ViewController.m, add the following code to the interface implementation to generate the SaS authorization token that will be provided in the Authorization header, as mentioned in the REST API Reference.

     -(NSString*) generateSasToken:(NSString*)uri
     {
         NSString *targetUri;
         NSString* utf8LowercasedUri = NULL;
         NSString *signature = NULL;
         NSString *token = NULL;
    
         @try
         {
             // Add expiration
             uri = [uri lowercaseString];
             utf8LowercasedUri = [self CF_URLEncodedString:uri];
             targetUri = [utf8LowercasedUri lowercaseString];
             NSTimeInterval expiresOnDate = [[NSDate date] timeIntervalSince1970];
             int expiresInMins = 60; // 1 hour
             expiresOnDate += expiresInMins * 60;
             UInt64 expires = trunc(expiresOnDate);
             NSString* toSign = [NSString stringWithFormat:@"%@\n%qu", targetUri, expires];
    
             // Get an hmac_sha1 Mac instance and initialize with the signing key
             const char *cKey  = [HubSasKeyValue cStringUsingEncoding:NSUTF8StringEncoding];
             const char *cData = [toSign cStringUsingEncoding:NSUTF8StringEncoding];
             unsigned char cHMAC[CC_SHA256_DIGEST_LENGTH];
             CCHmac(kCCHmacAlgSHA256, cKey, strlen(cKey), cData, strlen(cData), cHMAC);
             NSData *rawHmac = [[NSData alloc] initWithBytes:cHMAC length:sizeof(cHMAC)];
             signature = [self CF_URLEncodedString:[rawHmac base64EncodedStringWithOptions:0]];
    
             // Construct authorization token string
             token = [NSString stringWithFormat:@"SharedAccessSignature sig=%@&se=%qu&skn=%@&sr=%@",
                 signature, expires, HubSasKeyName, targetUri];
         }
         @catch (NSException *exception)
         {
             [self MessageBox:@"Exception Generating SaS Token" message:[exception reason]];
         }
         @finally
         {
             if (utf8LowercasedUri != NULL)
                 CFRelease((CFStringRef)utf8LowercasedUri);
             if (signature != NULL)
             CFRelease((CFStringRef)signature);
         }
    
         return token;
     }
    
  8. Ctrl キーを押しながら [Send Notification] ボタンを ViewController.m にドラッグし、Touch Down イベントに対するアクション SendNotificationMessage を追加します。Ctrl+drag from the Send Notification button to ViewController.m to add an action named SendNotificationMessage for the Touch Down event. REST API を使用して通知を送信するように次のコードでメソッドを更新します。Update method with the following code to send the notification using the REST API.

     - (IBAction)SendNotificationMessage:(id)sender
     {
         self.sendResults.text = @"";
         [self SendNotificationRESTAPI];
     }
    
     - (void)SendNotificationRESTAPI
     {
         NSURLSession* session = [NSURLSession
                          sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]
                          delegate:nil delegateQueue:nil];
    
         // Apple Notification format of the notification message
         NSString *json = [NSString stringWithFormat:@"{\"aps\":{\"alert\":\"%@\"}}",
                             self.notificationMessage.text];
    
         // Construct the message's REST endpoint
         NSURL* url = [NSURL URLWithString:[NSString stringWithFormat:@"%@%@/messages/%@", HubEndpoint,
                                             HUBNAME, API_VERSION]];
    
         // Generate the token to be used in the authorization header
         NSString* authorizationToken = [self generateSasToken:[url absoluteString]];
    
         //Create the request to add the APNs notification message to the hub
         NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
         [request setHTTPMethod:@"POST"];
         [request setValue:@"application/json;charset=utf-8" forHTTPHeaderField:@"Content-Type"];
    
         // Signify Apple notification format
         [request setValue:@"apple" forHTTPHeaderField:@"ServiceBusNotification-Format"];
    
         //Authenticate the notification message POST request with the SaS token
         [request setValue:authorizationToken forHTTPHeaderField:@"Authorization"];
    
         //Add the notification message body
         [request setHTTPBody:[json dataUsingEncoding:NSUTF8StringEncoding]];
    
         // Send the REST request
         NSURLSessionDataTask* dataTask = [session dataTaskWithRequest:request
             completionHandler:^(NSData *data, NSURLResponse *response, NSError *error)
         {
             NSHTTPURLResponse* httpResponse = (NSHTTPURLResponse*) response;
             if (error || (httpResponse.statusCode != 200 && httpResponse.statusCode != 201))
             {
                 NSLog(@"\nError status: %d\nError: %@", httpResponse.statusCode, error);
             }
             if (data != NULL)
             {
                 xmlParser = [[NSXMLParser alloc] initWithData:data];
                 [xmlParser setDelegate:self];
                    [xmlParser parse];
             }
         }];
         [dataTask resume];
     }
    
  9. ViewController.mで、テキスト フィールドのキーボードを閉じる動作をサポートする次のデリゲート メソッドを追加します。In ViewController.m, add the following delegate method to support closing the keyboard for the text field. Ctrl キーを押しながらテキスト フィールドからインターフェイス デザイナーの View Controller アイコンにドラッグし、ビュー コントローラーをアウトレット デリゲートとして設定します。Ctrl+drag from the text field to the View Controller icon in the interface designer to set the view controller as the outlet delegate.

     //===[ Implement UITextFieldDelegate methods ]===
    
     -(BOOL)textFieldShouldReturn:(UITextField *)textField
     {
         [textField resignFirstResponder];
         return YES;
     }
    
  10. ViewController.m で、NSXMLParser を使用した応答の解析をサポートする次のデリゲート メソッドを追加します。In ViewController.m, add the following delegate methods to support parsing the response by using NSXMLParser.

    //===[ Implement NSXMLParserDelegate methods ]===
    
    -(void)parserDidStartDocument:(NSXMLParser *)parser
    {
        self.statusResult = @"";
    }
    
    -(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName
        namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
        attributes:(NSDictionary *)attributeDict
    {
        NSString * element = [elementName lowercaseString];
        NSLog(@"*** New element parsed : %@ ***",element);
    
        if ([element isEqualToString:@"code"] | [element isEqualToString:@"detail"])
        {
            self.currentElement = element;
        }
    }
    
    -(void) parser:(NSXMLParser *)parser foundCharacters:(NSString *)parsedString
    {
        self.statusResult = [self.statusResult stringByAppendingString:
            [NSString stringWithFormat:@"%@ : %@\n", self.currentElement, parsedString]];
    }
    
    -(void)parserDidEndDocument:(NSXMLParser *)parser
    {
        // Set the status label text on the UI thread
        dispatch_async(dispatch_get_main_queue(),
        ^{
            [self.sendResults setText:self.statusResult];
        });
    }
    
  11. プロジェクトをビルドし、エラーがないことを確認します。Build the project and verify that there are no errors.

注意

Xcode7 でビットコード サポートに関するビルド エラーが発生した場合は、Xcode の [Build Settings (ビルド設定)] > [Enable Bitcode (ビットコードの有効化)] (ENABLE_BITCODE) を [NO (いいえ)] に変更する必要があります。If you encounter a build error in Xcode7 about bitcode support, you should change the Build Settings > Enable Bitcode (ENABLE_BITCODE) to NO in Xcode. Notification Hubs SDK は、現在ビットコードをサポートしていません。The Notification Hubs SDK does not currently support bitcode.

Apple の「 Local and Push Notification Programming Guide (ローカルおよびプッシュ通知プログラミング ガイド)」に、使用できるすべての通知ペイロードが記載されています。You can find all the possible notification payloads in the Apple [Local and Push Notification Programming Guide].

アプリでプッシュ通知を受信できるかどうかを確認するChecking if your app can receive 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 からテスト プッシュ通知を送信することができます。You can send a test push notification from the Azure Portal, as described above. アプリにプッシュ通知を送信するためのコードを追加した場合は、テキスト フィールドの内部をタップして、通知メッセージを入力します。If you added code for sending push notifications in the app, touch inside the text field to enter a notification message. 入力後、キーボードの Send キーまたはビュー内の [Send Notification] ボタンを押して、通知メッセージを送信します。Then press the Send button on the keyboard or the Send Notification button in the view to send the notification message.

    iOS App Push Notification Send Test

  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. 学習の次のステップとして、「Azure Notification Hubs と .NET バックエンドによる iOS ユーザーへの通知」に進むことをお勧めします。このチュートリアルでは、バックエンドを作成し、タグを使用してプッシュ通知を送信する方法について説明しています。We suggest as a next step in your learning that you proceed to the [Azure Notification Hubs Notify Users for iOS with .NET backend] tutorial, which will walk you through creating a backend to send push notifications using tags.

対象グループごとにユーザーを区分する場合は、チュートリアル「 Notification Hubs を使用したニュース速報の送信 」もご覧ください。If you want to segment your users by interest groups, you can additionally move on to the [Use Notification Hubs to send breaking news] tutorial.

Notification Hubs の全般的な情報については、「 Notification Hubs の概要」を参照してください。For general information about Notification Hubs, see [Notification Hubs Guidance].