プッシュ通知の構成と使用法
ここでは、プッシュ通知のサービス、プロセス、およびオペレーションの使用法を説明します。
プッシュ通知のメッセージ・タイプ
プッシュ通知では、以下のメッセージ・タイプが使用されます。
-
EnsLib.PushNotifications.NotificationInfo— モバイル・デバイスに送信される情報が含まれています。
-
EnsLib.PushNotifications.NotificationRequest— NotificationInfo が含まれていると共に、オペレーションが NotificationInfo を正しいデバイスに送信することを可能にするルーティング情報が含まれています。
-
EnsLib.PushNotifications.NotificationResponse— 通知サーバからの応答が含まれています。
-
EnsLib.PushNotifications.IdentityManager.NotificationByIdentityRequest— NotificationInfo と識別情報が含まれています。これにより、Identity Manager がデバイス情報を検出できるようになります。
-
EnsLib.PushNotifications.IdentityManager.NotificationByIdentityResponse— Identity Manager からの応答が含まれています。
NotificationInfo
EnsLib.PushNotifications.NotificationInfoOpens in a new tab クラスには、デバイスにプッシュ送信される通知内の情報が含まれています。
プロパティ | 説明 |
---|---|
AlertNotification | ユーザに通知として表示される文字列。 |
BadgeNotification | ユーザに表示されるアイコン内の整数。例えば、これを使用して未読メッセージ数を示すことができます。 |
SoundNotification | デバイス上で再生されるサウンドを指定する文字列。 |
ExpiresUTC | 当該通知が期限切れになる日時を示すタイムスタンプ。当該通知がこの日時までにデバイスに配信されない場合は、サーバは当該通知をデバイスに送信しません。 |
Data | JSON 形式の名前と値のペアが含まれた文字列。Data には、モバイル・アプリ内の通知処理コードで使用される名前と値が含まれています。 |
UrlNotification | 将来の使用のために予約されています。 |
CollapseKey | 将来の使用のために予約されています。 |
NotificationRequest
EnsLib.PushNotifications.NotificationRequestOpens in a new tab クラスには EnsLib.PushNotifications.NotificationInfoOpens in a new tab クラスが含まれていると共に、当該通知を受信するデバイスが指定されています。
プロパティ | 説明 |
---|---|
AppIdentifier | GCM 通知専用の文字列であり、当該通知が関連付けられているアプリを識別します。 |
Identifiers | 当該通知を受け取るデバイスを指定する文字列。APNS の場合は、このデバイスはデバイス・トークンによって指定されます。GCM の場合は、このデバイスは登録 ID として指定されます。 |
Service | 当該デバイスが GCM デバイスなのか APNS デバイスなのかを識別します。Service の値は “GCM” または “APNS” です。 |
NotificationResponse
EnsLib.PushNotifications.NotificationResponseOpens in a new tab クラスには、APNS サーバまたは GCM サーバから返された情報が含まれています。
プロパティ | 説明 |
---|---|
DeliveredAtUTC | 当該通知が APNS サーバまたは GCM サーバに送信された時刻を示すタイムスタンプ。 |
MessageIds | サーバによって返されたメッセージ ID のリストが含まれた文字列。 |
MulticastId | GCM サーバによって返されたマルチキャスト ID が含まれた文字列。 |
NotificationByIdentityRequest
EnsLib.PushNotifications.IdentityManager.NotificationByIdentityRequestOpens in a new tab クラスには EnsLib.PushNotifications.NotificationInfoOpens in a new tab クラスが含まれていると共に、当該通知の送信先となる Identity Manager に登録済みの ID が指定されています。
プロパティ | 説明 |
---|---|
AssociatedAppToken | 当該通知を受信する ID を指定する文字列。 |
AssociatedIdentity の値には、テーブル内で一意である任意の文字列を指定できます。一般に、この値はアプリケーション内でユーザを識別するログイン名などの文字列です。
NotificationByIdentityResponse
EnsLib.PushNotifications.IdentityManager.NotificationByIdentityResponseOpens in a new tab クラスは、ターゲットに送信された NotificationRequest メッセージの数を返します。これは、AssociatedIdentity に登録されたデバイスの数と同じです。
プロパティ | 説明 |
---|---|
NotificationCount | Identity Manager のターゲットに送信される NotificationRequest メッセージの数を指定する整数。 |
APNS オペレーションを使用した通知のプッシュ送信
EnsLib.PushNotifications.APNS.OperationOpens in a new tab は、通知要求を APNS サーバに送信して、指定されたデバイスに転送します。APNS サーバは、呼び出しごとに 1 台のデバイスに通知をプッシュ送信します。APNS サーバは通常は何の情報も返しませんが、エラーが発生した場合はその旨を示す情報を返します。
以下の設定を APNS オペレーションについて構成します。
設定 | 説明 |
---|---|
PushServerAddress |
Apple プッシュ通知サーバのホスト名。値は gateway.sandbox.push.apple.com です。 |
PushServerPort |
Apple プッシュ通知サーバ・インタフェース用のポート。値は 2195 です。 |
SSLConfig |
TLS 構成のテーブル内の構成名。TLS 構成はアプリと関連付けられており、APNS サービス用に Apple によって提供されているものである必要があります。例えば、構成名の値として MyAppAppleTLS を指定します。 |
ConnectTimeout |
TLS 接続の秒単位のタイムアウト時間。非アクティブ状態がこの時間だけ続くと、SSL 接続が終了されます。デフォルト値は 30 です。 |
ResponseTimeout |
接続要求への応答を待つ秒単位の時間。デフォルト値は 5 です。 |
NotificationProtocol |
APNS 通知プロトコルを指定します。次のいずれかの値を指定します。
|
TLS 構成はリモート・アプリと関連付けられていますが、同じ TLS 構成がアプリのすべてのユーザに対して使用されます。お使いのアプリケーションが単一のアプリに通知をプッシュ送信する場合は、プロダクション内で 1 つの TLS 構成と 1 つの APNS オペレーションのみが必要です。お使いのアプリケーションが Apple デバイス上で実行されている複数のアプリに通知をプッシュ送信する場合は、アプリごとに 1 つの TLS 構成が必要であると共に、アプリごとにその TLS 構成に関連付けられた 1 つの対応する APNS オペレーションが必要です。ルータを使用している場合は、各通知を正しい APNS オペレーション宛てに送信する必要があります。例えば、デバイス・トークンを対応するオペレーションに関連付けるルックアップ・テーブルを作成してから、そのルックアップ・テーブルをルーティング・ルール内で使用できます。
APNS プロトコルは、Enhanced プロトコルのエラー・ステータス以外の値を返しません。したがって、Enhanced プロトコル・メッセージでエラーが発生してないことを検知するための唯一の方法は、戻りエラー応答が検知されるまで待つことです。エラー応答が相当の時間内に受信されない場合は、オペレーションはプロトコル・メッセージが正常に処理されたと見なします。エラー応答を待つ時間の長さは、ResponseTimeout 設定で指定します。このタイムアウト値は、APNS サーバからのエラー応答を捕捉するのに十分な長さである必要がありますが、このタイムアウト値が経過するまで APNS サーバは別の要求を処理できなくなるため、このタイムアウト値を必要以上に長くすることは避けてください。デフォルト値の 5 秒を使用した場合は、オペレーション・インスタンスは 5 秒あたり 1 つの要求のみを処理できます。したがって、プール・サイズは、このタイムアウト時間内に通常発生する要求数を処理できる十分な大きさに設定する必要があります。
Simple プロトコルを使用している場合は、エラーが発生した場合でも何の値も返されません。Simple プロトコルの場合は、ResponseTimeout を最小値である 0 秒以外の値に設定することにメリットはありません。
TLS 証明書は Apple サーバによって提供されます。各アプリは固有の証明書を必要とします。
GCM オペレーションを使用した通知のプッシュ送信
以下の設定を GCM オペレーションについて構成します。
設定 | 説明 |
---|---|
PushServer |
Google Cloud メッセージング REST インタフェースの URL。値は https://android.googleapis.com/gcm/send です。 |
SSLConfig |
TLS 構成のテーブル内の構成名。例えば、構成名の値として MyAppTLS を指定します。 |
Timeout |
REST 応答の秒単位のタイムアウト時間。デフォルト値は 30 です。 |
NotificationProtocol |
GCM 通知プロトコルを指定します。次のいずれかの値を指定します。
|
Identity Manager へのデバイスの登録
デバイス・トークンとアプリケーションの 1 つ以上のペアを AssociatedIdentity 文字列識別子に登録できます。アプリケーションはこの文字列識別子を使用して、この識別子に関連付けられたすべてのデバイスに通知をプッシュ送信できます。EnsLib.PushNotifications.IdentityManager.DeviceTrackingOpens in a new tab クラスには、以下のメソッドが用意されています。
-
AssociateDeviceWithAppToken— デバイス・トークン、AppID、およびサービスを AssociatedIdentity 文字列識別子に関連付けます。
-
DisassociateDeviceWithAppToken— デバイス・トークン、AppID、およびサービスと AssociatedIdentity 文字列識別子の関連付けを解除します。
-
FindDeviceByAppToken— 指定された AssociatedIdentity 文字列識別子に関連付けられたすべてのデバイスを検出します。DeviceTracking オブジェクトを返します。
-
FindDeviceByDeviceAndAppIds— 指定されたデバイス・トークンと AppId を持つすべてのデバイスを検出します。DeviceTracking オブジェクトを返します。
Identity Manager を使用した通知のプッシュ送信
Identity Manager は NotificationByIdentityRequest メッセージを受信すると、以下の処理を実行します。
-
Identity Manager は SQL テーブルに対してクエリを発行して、メッセージ内の AssociatedIdentity に関連付けられたデバイスを検出します。
-
このクエリによって 1 台以上のデバイスが返された場合は、このクエリによって返されたレコードごとに 1 つの NotificationMessage が作成されます。この NotificationMessage 内では、次の処理が実行されます。
-
NotificationInfo が受信 NotationByIdentityRequest 内の NotificationInfo に設定されます。
-
Identities がレコード内のデバイス・トークンに設定されます。
-
AppId がレコード内の AppID (これが設定されている場合) に設定されます。
-
Service がレコード内の Service に設定されます。
-
-
各メッセージがターゲット・コンポーネントに送信されます。
IdentityManager は 1 つの NotificationByIdentityRequest を受信して、関連付けられたデバイスごとに 1 つの NotificationMessage を作成します。IdentityManager によって送信される各 NotificationMessage は、Identities リスト内に 1 つのデバイス・トークンを保有しています。GCM サーバを使用すると、1 回の呼び出しで単一ユーザの複数のデバイスに単一の通知をプッシュ送信できますが、IdentityManager はこの機能を使用しません。IdentityManager を使用せずに下位レベルの呼び出しを使用して、単一の通知を複数の GCM デバイスに送信できます。
AppService を使用した通知のプッシュ送信
プロダクション環境外の ObjectScript でプッシュ通知を生成する場合は、プッシュ通知 AppService を使用して通知を InterSystems IRIS® 環境に送り込むことができます。この AppService は InterSystems IRIS へのゲートウェイの役割を果たします。この AppService を呼び出すには、以下の手順を実行します。
-
AppService をプロダクションに追加します。
-
ターゲットがメッセージを IdentityManager、ルータ、または直接プッシュ通知オペレーションに送信するように構成します。
-
コード内で、EnsLib.PushNotifications.NotificationRequestOpens in a new tab メッセージを作成してその内容を入力します。
-
NotificationRequest をパラメータとして渡して、AppService の SendSync メソッドを呼び出します。