IBM Cloud Docs
Event Notificationsを使ったiOSモバイルへのプッシュ通知の作成と送信

Event Notificationsを使ったiOSモバイルへのプッシュ通知の作成と送信

Event Notifications サービスを作成し、Apple プッシュ通知サービス (APNs) のプッシュ宛先を追加し、iOS デバイスにメッセージを送信します。

Event Notifications とは何ですか?

Event Notificationsは、IBM Cloudアカウントで発生した重要なイベントを通知したり、Webhookを使用して自動化されたアクションをトリガするイベント通知ルーティングサービスです。 You can filter and route event notifications from IBM Cloud services like Availability Monitoring, to email, SMS, push notifications (FCM or APNs), and webhooks.

クライアントは iOS プッシュ通知をどのように使用しますか。

次の図は、クライアントが iOS プッシュ通知を使用する方法を示しています。

クライアントはプッシュ
ように利用しているか

目標

このチュートリアルでは、以下のようにプッシュ通知を送信する方法について説明します。

  • Event Notifications を使用してモバイル・アプリケーションを作成します。
  • APNs 資格情報を取得します。
  • コードをダウンロードし、通知のセットアップを完了します。
  • iOS プッシュ通知を構成してモバイル・デバイスに送信します。

開始前に

以下の前提条件を満たしている必要があります。

  • IBM Cloud アカウント。 持っていない場合は、 IBM Cloud アカウントを作成します
  • Event Notificationsインスタンス。
  • SDK がアカウントにアクセスできるようにするための IAM API キー。 ここを 1 つ作成します。
  • Xcode 9.3 以上
  • Swift 4.2+
  • iOS 10.0+

Event Notifications サービス・インスタンスの作成

  • IBM Cloud アカウントにログインします。
  • IBM Cloudカタログ で、'Event Notifications > Event Notifications を検索する。
  • サポートされるリージョンのリストからRegionを選択し、pricing planを選択します。
  • Service nameを提供します。
  • resource groupを選択します。
  • チェック・ボックスをクリックして、ご使用条件と条件に同意します。
  • Create をクリックします。

APNs 資格情報の取得

iOS デバイスおよび iOS アプリケーションの場合、Apple Push Notification Service (APNs) を使用すると、アプリケーション開発者は、Event Notifications (プロバイダー) 上の IBM Cloud サービス・インスタンスから iOS デバイスおよび iOS アプリケーションにリモート通知を送信できます。 メッセージは、デバイス上のターゲット・アプリケーションに送信されます。

APNs 資格情報を取得して構成する必要があります。 APNs の証明書は、Event Notificationsサービスによって安全に管理され、プロバイダーとしての APNs サーバーへの接続に使用されます。

アプリ ID の登録

アプリ ID (バンドル ID) は、特定のアプリケーションを識別する固有の ID です。 各アプリケーションにアプリ ID が必要です。 プッシュ通知サービスなどのサービスは、App ID に対して構成されます。

  • Appleデベロッパーポータルにアクセスし、Certificates, Identifiers & Proflesをi選択します。

    Certificates, Identifiers & Profiles
    Certificates, Identifiers & Profiles

  • Identifiers > Add identifier buttonに移動します。

    caption-side=bottom"
    識別子ボタン
    *識別子ボタン

  • 新しい「Identifier」を追加するボタンをクリックする。

    新しい識別子を追加するボタン
    *新しい識別子を追加するボタン
    新しい識別子を追加するボタン

  • 「アプリ ID」オプションを選択します。

    アプリIDオプション
    IDオプション
    アプリIDオプション

  • タイプを選択して、Continueをクリックします。

    App ID type
    App ID type

  • 「App ID Prefix」にストリングを入力します。 Description フィールドにアプリ名を入力します。 例えば、 Event Notifications iOS アプリケーションです。

  • Bundle ID」には*「Explicit*」を選択し、バンドルIDの値を指定する。 ドメイン名を逆にしたスタイルのストリングを指定することをお勧めします。 例えば、com.ibm.cloud.en.appなどです。

    新規App ID
    *を作成する新規App ID
    *を作成する

  • 「機能」からPush Notificationsチェック・ボックスを選択し、Continueをクリックします。

    プッシュ通知を有効にする
    を有効にする*プッシュ通知
    を有効にする

  • 設定を確認し、Register > Doneをクリックします。

これで、アプリケーション ID が登録されました。

App ID
Newly created App ID

開発および配布用 APNs SSL 証明書の作成

APNs 証明書を取得する前に、最初に証明書署名要求 (CSR) を生成し、それを Apple の認証局 (CA) にサブミットしておく必要があります。 CSR には、ユーザーの会社を識別する情報および Apple プッシュ通知に署名するために使用する公開鍵と秘密鍵が含まれます。 次に、iOS 開発者ポータル (iOS Developer Portal) で SSL 証明書を生成します。 証明書は、公開鍵および秘密鍵と共に「キーチェーンアクセス」に保管されます。

APNs は、以下の 2 つのモードで使用できます。

  • サンドボックス・モード。開発およびテスト用です。
  • 実動モード。App Store (またはその他のエンタープライズ配布メカニズム) を介してアプリケーションを配布するときのモードです。

開発環境と配布環境では別々の証明書を取得する必要があります。 証明書は、リモート通知の受信者であるアプリのアプリ ID に関連付けられます。 実動の場合は、最大 2 つの証明書を作成できます。 IBM Cloud は、証明書を使用して APNs との SSL 接続を確立します。

APNs p12 証明書の作成

  • Apple 開発者ポータルに移動し、「証明書、ID & プロファイル」を選択します。

    Certificates, Identifiers & Profiles
    Certificates, Identifiers & Profiles

  • Identifiers areaで、アプリ IDを選択します。

    識別子」タブ
    」タブ
    識別子」タブ

  • Push Notificationsチェック・ボックスを選択するか、Editオプションを選択します。

    プッシュ通知チェックボックス
    通知チェックボックス
    チェックボックス

    • 「開発 SSL 証明書」ペインで、「証明書の作成 ...」をクリックします。
    • 「実動 SSL 証明書」ペインで、「証明書の作成 ...」をクリックします。

    caption-side=bottom"
    証明書タイプ
    *証明書タイプ

  • Mac でキーチェーン・アクセス・アプリケーションを使用して、証明書署名要求 (CSR) を作成します。

  • メニューから「Keychain Access > Certificate Assistant > Request a Certificate From a Certificate Authority… 選択する。

    ![新しい証明書を要求する新しい証明書を](images/en-apns-p12-request-new-certificate.png "する新しい証明書の" caption-side="bottom"}を"){: caption="する*

  • 「証明書情報 (Certificate Information)」に、アプリ開発者アカウントに関連付けられている E メール・アドレスと共通名を入力します。 開発用の証明書 (サンドボックス) であるか、配布用の証明書 (実動) であるかを識別するのに役立つ分かりやすい名前を付けます。例えば、サンドボックス-apns-証明書実動-apns-証明書などです。

  • Saved to diskを選択して.certSigningRequestファイルを Mac にダウンロードし、Continueをクリックします。

    証明書の詳細
    の詳細*証明書の

  • Save As メニュー・オプションで、 .certSigningRequest ファイルに名前を付け、ファイルを保存する場所を選択し、 Save をクリックします。

    CSRファイルを保存する{: caption="を保存するCSR" caption-side="bottom"}を保存するCSRファイルを保存する

  • Done をクリックします。 これで CSR を使用できるようになりました。

    CSR作成
    作成
    CSR作成

  • Appleデベロッパーポータルに戻り、CSRファイルのアップロードオプションで「ファイルを選択」をクリックし、ファイル「CertificateSigningRequest.certSigningRequest」を選択します。 Continueをクリックします。

    ![CSRファイルをアップロードする](images/en-apns-p12-upload-csr.png "CSRファイルをアップロードするCSR" caption-side="bottom"}をアップ"){: caption="するCSRファイルをアップロードする

  • Download をクリックします。 aps_development.cer ファイルがダウンロードされます。

    ![証明書のダウンロード](images/en-apns-p12-download-cer.png "証明書のダウンロード*" caption-side="bottom"}書の"){: caption="*証明書のダウンロード

  • 新しくインストールした証明書を見つけます。 証明書をダブルクリックして、それを「キーチェーンアクセス」にインストールします。

  • Mac で、Keychain Access > My Certificatesに移動します。

  • 証明書と秘密鍵を選択し、Exportを選択して、証明書を個人情報交換形式 (.p12形式) に変換します。

    caption-side=bottom"
    輸出証明書
    書*輸出証明書

  • Save Asフィールドに、分かりやすい名前を証明書に提供します。 例えば、sandbox-apns.p12 または production-apns.p12Saveをクリックします。

    証明書を保存する
    書を保存する*証明書を保存する
    証明書を保存する

  • Enter a passwordフィールドに、エクスポートされた項目を保護するためのパスワードを入力し、OKをクリックします。 このパスワードは、Event Notifications サービスのコンソールで APNs 設定を構成するために使用できます。

    証明書を保護する
    書を保護する*証明書を保護する
    証明書を保護する

  • キー・アクセス・アプリは、キーチェーン画面からキーをエクスポートするように要求します。 ご使用の Mac の管理パスワードを入力して、システムがこれらの項目をエクスポートできるようにし、「常に許可 (Always Allow)」オプションを選択します。 選択した場所に A .p12 証明書が生成されます。

APNs p8 トークンの作成

  • Appleのデベロッパーポータルにアクセスし、「Certificates, Identifiers & Profiles 選択する。

    Certificates, Identifiers & Profiles
    Certificates, Identifiers & Profiles

  • Keys タブに行く。

    キー」タブ
    」タブ
    キー」タブ

  • Key Name と入力して APNs を有効にし、 continue をクリックします。

    P8 token details
    P8 token details

  • Register をクリックします。

    トー
    書*登録p8トークン
    登録

  • 登録後、新しいリダイレクトページでキーをダウンロードしてください。

KeyID はファイルの一部として UI に表示され、この 'KeyID は APNS 証明書の登録に使用されます。 TeamID」は開発者アカウント用にappleから提供されるもので、チーム名の隣に表示されます。 TeamID」はAPNS証明書の登録に使用します。 BundleID P12証明書と同様に登録できます。

汎用 API ソースの追加

次のステップを実行します。

  • Event Notifications ダッシュボードのSourcesセクションに移動します。
  • Addをクリックし、API ソースを選択します。
  • 名前とオプションの説明を入力し、Addをクリックします。

Event Notifications 宛先の作成

Event Notifications コンソールでDestinationsをクリックし、以下の宛先詳細を追加します。

  • Name: 宛先の名前を追加します。
  • Description: 宛先の説明 (オプション) を追加します。
  • Type: ドロップダウンリストから'iOS Push Notifications タイプを選択する。
  • 宛先計画 (実動前宛先または実動宛先) を選択します。
    • Pre-production destination-開発環境およびテスト環境用の低コストのプッシュ宛先としてこの宛先を選択します。
    • Production destination-この宛先の全機能を使用します。 デバイスと送信メッセージは無制限。
  • Authentication Type iOSプッシュ認証情報を更新し、「Environment 選択する。
    • 証明書タイプが p8 の場合は、 .p8 ファイルをアップロードし、 KeyIDTeamID、および BundleID を指定します。
    • 証明書タイプが「p12」の場合、p12証明書をアップロードし、「password 証明書を提供する。
  • Add をクリックします。

Event Notifications トピックの作成

Event Notifications コンソールでTopicsを選択し、Createをクリックします。 以下のトピックの詳細を入力します。

  • Name: トピックの名前を入力します。
  • Description: トピックのオプションの説明を追加します。
  • Source: ドロップダウン・リストからソースを選択します。
  • Event type: ドロップダウン・リストからイベント・タイプを選択します。
  • Event sub typeイベント・サブタイプ・ドロップダウン・リストからイベント・サブタイプを選択します。
  • Severity: 重大度ドロップダウン・リストから重大度を選択します。
  • Advanced conditions: 独自のカスタム条件を作成します。jsonpath の指定に従う必要があります。

Event Notifications サブスクリプションの作成

Event Notifications コンソールでSubscriptionsをクリックします。 以下のサブスクリプションの詳細を入力します。

  • Clickをクリックして、サブスクリプション・ウィザードを表示します。
  • 以下のサブスクリプションの詳細を入力します。
    • Subscription name: サブスクリプションの名前。
    • Subscription description: オプションの説明を追加します。
  • Subscribe to a topicセクションの下で、ドロップダウン・リストからトピックを選択し、宛先ドロップダウン・リストから宛先を選択します。
  • Destination type: Destinationの下でタイプを選択し、Addをクリックします。

Event Notifications iOS SDK のセットアップ

iOS SDK により、iOS アプリはプッシュ通知を受け取ることができます。 以下のステップを実行して、Event Notifications iOS SDK をインストールし、SDK を初期化し、iOS アプリの通知を登録します。

インストール

この SDK の現行バージョンは 0.0.1 です。

iOSデスティネーションSDKのEvent Notificationsを使用するには、次のようにサービスのアーティファクト座標(グループID、アーティファクトID、バージョン)を含む依存関係を定義します:

CocoaPods

use_frameworks!

target 'MyApp' do
   pod 'ENPushDestination', '~> 0.0.1'
end

Carthage

Carthage を使用してENPushDestinationをインストールするには、以下を Cartfile に追加します。

github "IBM/event-notifications-destination-ios-sdk" ~> 0.0.1

次に、以下のコマンドを実行して、依存関係とフレームワークをビルドする:

carthage update --platform iOS

Swift パッケージ・マネージャー

以下をPackage.swiftファイルに追加して、ENPushDestination を依存関係として識別します。 swift buildでプロジェクトをビルドすると、パッケージマネージャがENPushDestinationをクローンします。

dependencies: [
   .package(url: "https://github.com/IBM/event-notifications-destination-ios-sdk", from: "0.0.1")
]

インストール-SDK の初期化

iOS アプリケーションが通知を受信できるようにするには、以下のステップを実行します。

  1. .swiftファイルにimportステートメントを追加します。

    import ENPushDestination
    
  2. ENPushDestination SDK の初期化

    let instanceGUID = "<instance_guid>>";
    let destinationID = "<instance_destination_id>";
    let apiKey = "<instance_apikey>";
    
    let enPush = ENPush.sharedInstance
    enPush.setCloudRegion(region: .usSouth)
    enPush.initialize(instanceGUID, destinationID, apiKey)
    
    • region: Event Notifications インスタンスのリージョン。 例えば、Region.usSouth です。

通知の登録

ENPush.registerDevice() APIを使用して、Event NotificationsサービスのiOS宛先にデバイスを登録する。

次のオプションがサポートされています。

  • ユーザー ID なしで登録します。

    /**Register iOS devices*/
    enPush.registerWithDeviceToken(deviceToken: "<apns-device-token>") { response, statusCode, error in
       print(response?.id ?? "")
    }
    
  • ユーザー ID を使用して登録します。 userId ベースの通知では、registerメソッドはもう1つのパラメータ、'userId を受け付けます。

    /**Register iOS devices*/
    enPush.registerWithDeviceToken(deviceToken: "<apns-device-token>", withUserId: "userId") { response, statusCode, error in
    
       print(response?.id ?? "")
    
    }
    

    userId はEvent Notificationsに登録するためのユニークな'userId 値を渡すために使用されます。

通知からの登録抹消

以下のコード・スニペットを使用して、Event Notificationsからの登録を解除してください。

enPush.unregisterDevice { response, statusCode, error in
   /**.....*/
}

UserId ベースの登録から登録抹消するには、登録メソッドを呼び出す必要があります。 通知の登録Register without userId option を参照してください。

Event Notifications 宛先タグのサブスクリプション

タグのサブスクライブ

subscribe APIは、指定されたタグのデバイスをサブスクライブする。 デバイスが特定のタグにサブスクライブすると、デバイスはそのタグについて送信された通知を受け取ることができます。

以下のコード・スニペットを iOS モバイル・アプリケーションに追加して、タグのリストにサブスクライブします。

// Subscribe to the given tag
enPush.subscribeToTags(tagName: "<tag_name>") { response, statusCode, error in
   /**.....*/
});

サブスクライブしたタグの取得

retrieveSubscriptionsWithCompletionHandler APIは、そのデバイスが購読しているタグのリストを返す。 モバイル・アプリケーションで以下のコード・スニペットを使用して、サブスクリプション・リストを取得します。

// Get a list of tags that to which the device is subscribed.
enPush.retrieveSubscriptionsWithCompletionHandler { response, statusCode, error in
   /**.....*/
}

タグからアンサブスクライブ

unsubscribeFromTags API は、リスト・タグからデバイス・サブスクリプションを削除します。 以下のコード・スニペットを使用して、デバイスがタグからアンサブスクライブできるようにします。

// unsubscibe from the given tag ,that to which the device is subscribed.
enPush.unsubscribeFromTags(tagName: "<tag_name>") { response, statusCode, error in
   /**.....*/
}

iOS デバイスでのプッシュ通知の受け取り

iOSデバイスでプッシュ通知を受け取るには、以下のSwiftメソッドをアプリケーションの'appDelegate.swift に追加する:

func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {

   //UserInfo dictionary will contain data sent from the server
}

通知オプション

以下の通知オプションがサポートされています。

対話式通知

  1. 対話式プッシュ通知を有効にするには、通知アクション・パラメーターを通知オブジェクトの一部として渡す必要があります。 以下は、対話式通知を有効にするサンプル・コードです。
let actionOne = ENPushNotificationAction(identifierName: "FIRST", buttonTitle: "Accept", isAuthenticationRequired: false, defineActivationMode: .foreground)

let actionTwo = ENPushNotificationAction(identifierName: "SECOND", buttonTitle: "Reject", isAuthenticationRequired: false, defineActivationMode: .destructive)

let category = ENPushNotificationActionCategory(identifierName: "category", buttonActions: [actionOne, actionTwo])

let notificationOptions = ENPushClientOptions()
notificationOptions.setInteractiveNotificationCategories(categoryName: [category])
enPush.initialize(instanceGUID, destinationID, apiKey, notificationOptions)
  1. AppDelegate.swift にコールバック・メソッドを実装します。

    func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
       switch response.actionIdentifier {
          case "Accept":
          print("Clicked Accept")
          case "Reject":
          print("Clicked Reject")
          default:
       }
       completionHandler()
    }
    

このコールバック・メソッドは、ユーザーがアクション・ボタンをクリックすると呼び出されます。 このメソッドの実装は、指定された識別子に関連するタスクを実行し、completionHandlerパラメータのブロックを実行しなければならない。

登録のためのカスタム・デバイス ID の追加

DeviceIdを送信するには、ENPushClientOptionsクラスのsetDeviceIdメソッドを使用します。

let options = ENPushClientOptions();
options.setDeviceId(deviceId: "YOUR_DEVICE_ID");

各デバイスのカスタムDeviceId'unique を保持することを忘れないでください。

リッチ・メディア通知の使用可能化

リッチ・メディア通知は iOS 10 以降でサポートされます。 リッチ・メディア通知を受信するには、UNNotificationServiceExtension を実装します。 この拡張機能は、リッチ・メディア通知をインターセプトして処理します。

サービス拡張の didReceive() メソッドで、以下のコードを追加して、リッチ・プッシュ通知コンテンツを取得します。

override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) {
   self.contentHandler = contentHandler
   bestAttemptContent = (request.content.mutableCopy() as? UNMutableNotificationContent)
   ENPushRichPushNotificationOptions.didReceive(request, withContentHandler: contentHandler)
}

iOS デバイスへの通知の送信

通知送信 API を使用して、iOS デバイスのプッシュ通知を送信します。 API を直接呼び出す代わりに、ノードまたは実行管理 SDK を使用できます。

通知を送る
を送る*通知を送る
を送信する

通知を受け取る
を受け取る*
を受け取る