16 通知
通知によって何ができるか
通知により、モバイル・ユーザーが検索する情報とイベントをタイムリに確認できます。 通知は、モバイル・アプリケーションに送信される短くて具体的かつ的を絞ったメッセージです。 通常、通知の目的は新しい情報があることをユーザーに知らせることです。 たとえば、買い物アプリを実行しているユーザーは、今後のセールに関する情報を得る場合があります。
これらの対象となるメッセージは、必要に応じて、または事前定義されたスケジュールで、次のいずれかに送信できます:
-
特定のデバイスIDまたはデバイスIDのコレクション(主にテストに便利)
-
特定のユーザーまたはユーザーのコレクション
-
特定のモバイル・バックエンドに関連付けられているすべてのユーザーおよびデバイス
-
指定したオペレーティング・システム(iOS、AndroidまたはWindows)のデバイスまたはユーザー
注意:
プッシュ通知は、重大または緊急な情報には使用しないでください。ネットワーク遅延およびその他の問題により配信をタイミングを逸したものにする可能性があるからです。 ただし、スポーツのスコアや今後のセールなど日常の利用には、通知はすばらしいものです。通知がどのように送信および受信されるか
モバイル・アプリケーションの開発者は、ネットワークを介して通知を受信するようにモバイル・アプリを構成します。 モバイル・アプリが構成され、デバイスにインストールされると、バックエンドに接続して通知を受け取ります。 通知が通るパスを要約したものを次に示します。
-
通知を作成し (例: "Hi! Our storewide sale is tomorrow")、受信者を定義します。 通知は、特定のユーザー、デバイス、ユーザーまたはデバイスのセット、バックエンドの全員、または特定のデバイス・タイプ(Android、iOS、Windows)に送信できます。 通知をすぐに送信することも、後で通知を送信するように日時をスケジュールすることもできます。 通知をPOSTすると、メッセージのIDが作成されます。 メッセージがまだ送信されていない場合は、このIDを使用してメッセージをキャンセルすることができます。
-
この通知は、関連付けられたデバイスIDに宛てられ、配信のために適切なプッシュ・ネットワークに配信されます。
-
モバイル・アプリケーションによって通知が受信され、デバイスの所有者が取得します。
通知サービス・プロバイダとそのペイロードの制限は次のとおりです。-
WNS: 5K
-
FCM: 4K
-
GCM: 4K
-
APNS: 4K
-
SMS: 1000バイト
-
デバイスID (通知トークン)とは
デバイスID (通知トークンとしても知られる)は、特定のデバイスと関連付けられているモバイル・アプリケーションの特定のインスタンスを一意に識別します。 このIDは、通知を正しい受信者に送信するために使用されます。
デバイス・ハンドシェイク中にモバイル・アプリがデバイスを登録すると、一意のデバイスIDが割り当てられます。 その時点から、そのIDはその特定の受信者を識別するために使用できます。 同じデバイスにある同じモバイル・アプリの複数のインスタンスには別のデバイスIDがあります。 デバイスIDは定期的に変更されますが、これは内部で処理され、モバイル・アプリには透過的です。
UIの関連するバックエンドの通知ページから、モバイル・アプリに登録されているデバイスIDをDevice Registryで検索できます。 特定のデバイスIDを通知の受信者用アドレスとして使用するように登録するには、REST APIを使用できます。 デバイスIDに通知を直接送信するのは、テストの場合にのみ便利である点に注意してください。 ユーザーの特定のグループに通知を送信するには、より効率的な方法があります。 詳細および例は、「アプリとの通知の送受信」を参照してください。
通知のためのモバイル・アプリの設定
始める前に、クライアントSDKのNotificationsライブラリをインストールして、開発を簡単にすることができます。 通知SDKライブラリはアプリに独立してインストールすることもでき、他のモバイル・クライアントSDKライブラリとともにインストールすることもできます。 SDKの詳細はSDKを参照してください。
設定プロセスはプラットフォームごとに異なります:
プラットフォームの設定ステップを完了したら、MCSからモバイル・アプリに通知を送信するためのオプションがいくつかあります。 アプリとの通知の送受信を参照してください。
OMCeにアプリケーション・クライアントを登録したので、「あなたのアプリケーションとの間で通知を送信」に示すように、アプリに通知を送信するためのオプションがいくつかあります。
Android通知を設定
-
まず、通知プロバイダから資格証明を取得して、ネットワークで既知のアイテムとしてモバイル・アプリを確立します。 「Android: Google APIキー」を参照してください。
-
MCSにモバイル・アプリケーションのクライアントを作成し、ステップ1で取得したネットワーク資格証明を入力して通知プロファイルを設定します。 クライアント管理を参照してください。
-
モバイル・デバイスから通知プロバイダに接続するようにアプリを設定し、通信のルールを確立します。 「Android用デバイス・ハンドシェイクの設定(FCM)」を参照してください。
これらのステップを完了したら、MCSからモバイル・アプリへ通知を送信する方法を次の中から選択できます。 アプリとの通知の送受信を参照してください。
Android: Google APIキー
注意:
アプリの構成ファイルを生成する際には、クラウド・メッセージング・サービスを使用可能にするよう選択してください。FCM通知
FCM通知の場合、AndroidアプリのAndroidManifest.xmlファイルの<application>
ノード内に、次のエントリを追加します:
<service android:name="oracle.cloud.mobile.fcmnotifications.McsRegistrationIntentService" android:exported="false" />
<service android:name="oracle.cloud.mobile.fcmnotifications.MCSFirebaseInstanceIDService">
<intent-filter>
<action android:name="com.google.firebase.INSTANCE_ID_EVENT"/>
</intent-filter>
</service>
「FirebaseとFCM SDKを設定」で説明されているように、FCMメッセージング・ライブラリをアプリケーション・ビルドファイルの依存ライブラリとして追加する必要があります。 生成が完了すると、プロジェクト番号(別名センダID)とサーバー・キーが表示されます。 通知用のモバイル・アプリをMCSに登録するには、これらの資格証明が必要です。 これらはモバイル・アプリに対して一意であり、他のアプリに通知を送信する際には使用できません。 「Android用デバイス・ハンドシェイクの設定(FCM)」で説明されているように、FCMから登録トークンを取得し、MCSとの接続を設定するには、これらの値も必要です。
GCM通知
<application>
ノード内に次のエントリを追加します: <service android:name="oracle.cloud.mobile.notifications.McsRegistrationIntentService" android:exported="false" />
<service android:name="oracle.cloud.mobile.notifications.GcmTokenRefreshListenerService" android:exported="false">
<intent-filter>
<action android:name="com.google.android.gms.iid.InstanceID" />
</intent-filter>
</service>
アプリケーションのビルド・ファイルにGoogle Play Servicesが依存ライブラリとして追加されている必要があります。そうでない場合には、サービスにエラーのフラグが立てられます。生成が完了すると、「プロジェクト番号」 (別名「発信者ID」)と「レガシー・サーバー・キー」が表示されます。 MCSに通知用モバイル・アプリを登録するには、これらの資格証明が必要です。 これらはモバイル・アプリに対して一意であり、他のアプリに通知を送信する際には使用できません。 FCMから登録トークンを取得し、MCSとの接続を設定するには、これらの値も必要です(「Android用デバイス・ハンドシェイクの設定(FCM)」の説明を参照)。
Android用デバイス・ハンドシェイクの設定(FCM)
このセクションでは、あなたのアプリケーション用の構成ファイルがすでに生成されていることを前提としています。 「Android: Google APIキー」で説明されているように、プロジェクトの構成時に取得した送信者ID (プロジェクト番号)が必要です。
FCM通知の場合、Androidアプリは通知を受信するサービスを定義するためにFirebaseMessagingService
を拡張する必要があります。 onMessageReceived
メソッドをオーバーライドすると、受信メッセージに基づいてアクションを実行できます。 Androidでの通知の処理の詳細については、Google FCMデベロッパの「メッセージを受け取る」をご覧ください。
アプリケーションのsrc/main/AndroidManifest.xml
ファイルで、終了する</application>
タグの直前に、以下に示すようにNotificationsサービスに登録します。
<application> ...
<service
android:name="oracle.cloud.mobile.fcmnotifications.MCSFirebaseMessagingService">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT"/>
</intent-filter>
</service>
</application>
これらのエントリをAndroidマニフェスト(<application>
エントリの上のどこか)に挿入して、通知を受信して表示する権限を設定します。
<uses-permission
android:name="android.permission.INTERNET"/>
<uses-permission
android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission
android:name="android.permission.WRITE_INTERNAL_STORAGE"/>
<uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission
android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission
android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<application>
コミュニケーションを確立して通知を登録するには、クライアントSDKを使用してAndroidアプリでデバイスのハンドシェイクがどのように表示されるかを次に示します。
...
import oracle.cloud.mobile.exception.ServiceProxyException;
import oracle.cloud.mobile.fcmnotifications.Notifications;
import oracle.cloud.mobile.mobilebackend.MobileBackendManager;
public class MainActivity extends Activity {
private Notifications mNotification;
@Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
this.registerNotificationClient();
}
//method that initializes and returns the Notifications client
private void registerNotificationClient(){
try {
mNotification =
MobileBackendManager.getManager().getDefaultMobileBackend(this).getServiceProxy(Notifications.class);
mNotification.initialize(this);
} catch (ServiceProxyException e) {
e.printStackTrace();
}
}
}
FCM登録トークンの取得
登録トークンを取得するには、アプリをFCMに登録するには、センダーIDが必要です。 登録トークンはOMCeに渡されます。OMCeは通知と共にパッケージを作成し、アプリとそれが実行されているデバイスがネットワーク上の正当な受信者であることをGoogleに通知します。 Googleでは、登録トークンを処理するためのインスタンスID APIを提供しています。 Googleデベロッパについては、Set Up a Firebase Cloud Messaging Client App on Androidを参照してください。
public void onClick(View view) {
try {
//Registration process callback
mRegistrationBroadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
SharedPreferences sharedPreferences =
PreferenceManager.getDefaultSharedPreferences(context);
boolean sentToken = sharedPreferences
.getBoolean(NotificationsConfig.SENT_TOKEN_TO_SERVER, false);
if (sentToken) {
Logger.debug(TAG, "Token retrieved and sent to server.");
} else {
Logger.debug(TAG, "An error occurred while registering the device");
}
}
};
//call on successful registration
LocalBroadcastManager.getInstance(mCtx).registerReceiver(
mRegistrationBroadcastReceiver,
new IntentFilter(NotificationsConfig.REGISTRATION_COMPLETE));
//Initialization of MCS notifications service
not = MobileBackendManager.getManager().getDefaultMobileBackend
(mCtx).getServiceProxy(Notifications.class);
boolean result = not.initialize(mCtx);
} catch (ServiceProxyException e) {
e.printStackTrace();
}
}
通知のために端末の登録を解除するには、クライアントSDKを使用してAndroidアプリでコードがどのように表示されるかを次に示します:
//Initialization of MCS notifications service
Notifications notifications = MobileManager.getManager().getDefaultMobileBackend(getApplicationContext()).getServiceProxy(Notifications.class);
boolean result = notifications.deregisterDevice(view.getContext());
Logger.debug(TAG, "unregister " + result);
Android用デバイス・ハンドシェイクの設定(GCM)
このセクションでは、あなたのアプリケーション用の構成ファイルがすでに生成されていることを前提としています。 「Android: Google APIキー」で説明されているように、プロジェクトの構成時に取得した送信者ID (プロジェクト番号)が必要です。
デバイスのハンドシェイクに加えて、GCM通知の場合、Androidアプリケーションは通知サービスのレシーバを定義するためにGcmListenerService
を拡張する必要があります。 Android SDKのonMessageReceived
メソッドをオーバーライドすると、着信メッセージに基づいてアクションを実行できます。 Google Developersの「シンプル・ダウンストリーム・メッセージング」をご覧ください。
main/AndroidManifest.xml
ファイルで、終了する</application>
タグの直前に、以下に示すように、Notificationsサービスのサービスとブロードキャスト・レシーバを登録します。 <application>
...
<receiver android:name="oracle.cloud.mobile.notifications.Mcs2GcmListenerService"
android:permission="com.google.android.c2dm.permission.SEND">
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE"/>
<action android:name="com.google.android.c2dm.intent.REGISTRATION"/>
<category android:name="YOUR.PACKAGE.NAME"/>
</intent-filter>
<receiver>
</application>
<application>
エントリの上のどこか)に挿入して、通知を受信して表示する権限を設定します。<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.WRITE_INTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<permission android:protectionLevel="signature"
android:name=YOUR.PACKAGE.NAME.permission.C2D_MESSAGE"/>
<uses-permission android:name="YOUR.PACKAGE.NAME.permission.C2D_MESSAGE"/>
<application>
...
import oracle.cloud.mobile.exception.ServiceProxyException;
import oracle.cloud.mobile.mobilebackend.MobileBackendManager;
import oracle.cloud.mobile.notifications.Notifications;
public class MainActivity extends Activity {
private Notifications mNotification;
private final String PROJECT_ID = "PROJECT_ID_COPIED_FROM_GOOGLE_API_CONSOLE";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
this.registerNotificationClient();
...
}
//method that initializes and returns the Notifications client
private void registerNotificationClient(){
try {
mNotification = MobileBackendManager.getManager().getDefaultMobileBackend(this).getServiceProxy(Notifications.class);
mNotification.initialize(this, PROJECT_ID);
} catch (ServiceProxyException e) {
e.printStackTrace();
}
}
...
}
GCM登録トークンの取得
登録トークンを取得するには、アプリをGCMに登録するには、送信者IDが必要です。 登録トークンはMCSに渡されて、通知でパッケージ化され、アプリとそのアプリが実行されるデバイスがネットワーク上で正規の受信者であることがGoogleに通知されます。
public void onClick(View view) {
try {
//Registration process callback
mRegistrationBroadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
SharedPreferences sharedPreferences =
PreferenceManager.getDefaultSharedPreferences(context);
boolean sentToken = sharedPreferences
.getBoolean(NotificationsConfig.SENT_TOKEN_TO_SERVER, false);
if (sentToken) {
Logger.debug(TAG, "Token retrieved and sent to server!");
} else {
Logger.debug(TAG, "An error occurred while either fetching the InstanceID");
}
}
};
//call on successful registration
LocalBroadcastManager.getInstance(getApplicationContext()).registerReceiver(mRegistrationBroadcastReceiver,
new IntentFilter(NotificationsConfig.REGISTRATION_COMPLETE));
//Initialization of notifications service
not = MobileBackendManager.getManager().getDefaultMobileBackend(view.getContext()).getServiceProxy(Notifications.class);
boolean result = not.initialize(view.getContext(), "714568881816");
}
catch (ServiceProxyException e) {
e.printStackTrace();
}
}
アプリを設定および登録すると、通知を送受信できるようになります。 詳細およびサンプル・コードは、「アプリとの通知の送受信」を参照してください。
iOS通知を設定
-
まず、通知プロバイダから資格証明を取得して、ネットワークで既知のアイテムとしてモバイル・アプリを確立します。 iOS: Apple Secure Certificatesを参照してください。
-
MCSにモバイル・アプリケーションのクライアントを作成し、ステップ1で取得したネットワーク資格証明を入力して通知プロファイルを設定します。 クライアント管理を参照してください。
-
モバイル・デバイスから通知プロバイダに接続するようにアプリを設定し、通信のルールを確立します。 「iOSのデバイス・ハンドシェイクの設定」を参照してください。
これらのステップを完了したら、MCSからモバイル・アプリへ通知を送信する方法を次の中から選択できます。 アプリとの通知の送受信を参照してください。
iOS: Appleセキュア証明書
通知はAppleのネットワークを特別な用途で使用するため、Appleはセキュリティ保護を強化します。 次のいずれかのセキュア証明書が必要です。
-
開発期間に、通知を使用したアプリケーションを開発およびテストするためのAppleプッシュ通知サービスSSL (サンドボックス)証明書。 サンドボックス証明書は自動化されたQA環境用で、デバイスはあまり頻繁には変更されません。 ほとんどの場合、スパム・フィルタは使用不可にする必要があります。
-
アプリケーションをAppleのApp StoreにリリースするためのAppleプッシュ通知サービスSSL (本番)証明書。 Appleでは、アプリを一般に出荷する前にこの証明書が必要ですが、アプリが取得するまで待つことができます。
サンドボックスの証明書または本番の証明書を取得するステップは、アプリを設定するときに最初にセキュアな証明書を取得するために使用したステップととても類似しています。 この項では、すでにApple Developerアカウントを設定し、必要なセキュア証明を取得し、アプリケーションIDとプロビジョニング・プロファイルを設定していることを前提としています。
iOSのデバイス・ハンドシェイクの設定
次に、モバイル・アプリを関連するモバイル・バックエンドに登録し、通知を有効にします。 「MCSでのクライアントとしてのアプリケーションの登録」を参照してください。
アプリを登録した後は、様々なソースから通知を受信できます。 詳細およびサンプル・コードは、「アプリとの通知の送受信」を参照してください。Windows通知の設定
-
まず、通知プロバイダから資格証明を取得して、ネットワークで既知のアイテムとしてモバイル・アプリを確立します。 「Windows: WNS資格証明」または「Syniverse: SMS資格証明」を参照してください。
-
MCSにモバイル・アプリケーションのクライアントを作成し、ステップ1で取得したネットワーク資格証明を入力して通知プロファイルを設定します。 クライアント管理を参照してください。
-
モバイル・デバイスから通知プロバイダに接続するようにアプリを設定し、通信のルールを確立します。 「Windows用デバイス・ハンドシェイクの設定」を参照してください。
これらのステップを完了したら、MCSからモバイル・アプリへ通知を送信する方法を次の中から選択できます。 アプリとの通知の送受信を参照してください。
Windows: WNS資格証明
-
クライアントID (パッケージSIDとも呼ばれます)
-
クライアント・シークレット(秘密キーとも呼ばれます)
これらの資格証明を取得するには、Windowsストア・ダッシュボード(Windowsデベロッパー センターで入手可能)でモバイル・アプリを登録します。 WNSの詳細については、MSDNの「WNSの概要」を参照してください。
通知用のモバイル・アプリをMCSに登録するには、これらの資格証明が必要です。 これらはモバイル・アプリに対して一意であり、他のアプリに通知を送信する際には使用できません。
Syniverse: SMS資格証明
Syniverse Messaging Serviceを使用してSMS(Short Message Service)を送信するには、まずSyniverse Developer Communityにプロファイルを作成し、サービスに登録してアプリケーションを登録し、資格証明を取得します。
Syniverse Developerコミュニティでのプロファイルの作成
-
Syniverse開発者コミュニティ(developer.syniverse.com)にアクセスします。
-
右上隅にあるSign Upをクリックし、必要な情報を入力します。
-
Syniverse開発者コミュニティに会社からのインビテーション・コードがある場合は、「Company invite code」フィールドに入力します。 ない場合は、このステップを無視してください。
-
サービス規約を一読して同意します。
-
「Captcha」ボックスをチェックし、ロボットではないことを証明する設問に答えます。
-
「Create profile」をクリックします。
-
確認のメールが届いたら、メールのリンクをクリックしてユーザー資格証明を確認します。
Syniverse Messagingサービスのサブスクライブ
Syniverseから取得したSMSショート・コードを使用してアプリケーションでSMSを使用するには、Syniverse Messaging Serviceへの登録が必要です。
-
Syniverse開発者コミュニティ(developer.syniverse.com)にログインします。
-
右上隅にあるユーザー名をクリックし、「Company」を選択します。 アカウントにそれに関連付けられたビリング・アドレスがあることを確認します。
-
Service Offerings→Messaging Offeringにアクセスし、「Subscriptions」をクリックします。
-
「Subscribe」をクリックし、「Initial account for [Your username]」を選択します。
-
サービス規約を一読して同意します。
-
「Confirm」を選択します。
-
アカウントが「Subscriptions」にリストされていることを確認します。
-
-
メッセージのテストにSyniverseの提供するパブリック・チャンネルを使用している場合は、関連するホワイトリストにテスト電話番号を追加する必要があります。 (ホワイトリスト登録は、SMSを米国またはカナダの電話番号にテストする場合にのみ必要で、プロダクション・アプリでは必要ありません)。
-
右上隅にあるユーザー名をクリックし、「Company」を選択します。
-
「Company」のページで、「Whitelist」タブをクリックします。
-
Click 「Add phone number」をクリックし、電話番号をITU-TのE.164形式で入力します(例: +11234567890)。
-
「Send confirmation code」をクリックして、ランダム生成された数字をテキスト・メッセージで当該の電話番号に送ります。
-
テキスト・メッセージから確認コードを取得し、「Confirmation code」フィールドに入力します。 「Add」をクリックして、電話番号のホワイトリストを確認します。
-
電話番号がホワイトリストに「Validated」の状態で含まれていることを確認します。
-
アプリケーションの登録および資格証明の取得
Syniverse Messaging Serviceでメッセージの送信がある前に、SDCプラットフォームにアプリケーションが構成されている必要があります。 アプリケーションが登録されると、必要な資格証明が生成されます。
-
Syniverse開発者コミュニティ(developer.syniverse.com)にログインします。
-
「Applications」をクリックします。
-
「New application」をクリックします。
ダイアログで:
-
アプリケーションに名前と説明を付け、「Save」をクリックします。
-
アプリケーション名の横にあるギア・アイコンをクリックし、「Edit」を選択します。
-
「SDCセルフサービス」をクリックし、すべてのオプションが選択されていることを確認します。
-
「Account & APIs」をクリックし、「Account」のドロップダウンから「Initial account for [Your username]」を選択します。
次のサービスをオンにします: メッセージング、SDCゲートウェイ・サービス、イベント・サブスクリプション・サービス、音声&メッセージおよびホワイトリスト・サービスです。
-
「Save」をクリックします。
-
-
必要な資格証明を生成します:
Windows向けデバイス・ハンドシェイクの設定
...
using Oracle.Cloud.Mobile.Notifications;
using Windows.Networking.PushNotifications;
namespace MyWindowsApp
{
public sealed partial class MainPage : Page
{
public MainPage()
{
this.InitializeComponent();
//
// First login to MCS
//
var loginDialog = new LoginDialog();
loginDialog.ShowAsync().ContinueWith((task) => RegisterForNotificationsAsync());
}
private async Task RegisterForNotificationsAsync()
{
var backend = ((App)App.Current).Backend;
// Register for Push Notifications
PushNotificationChannel channel =
await PushNotificationChannelManager.CreatePushNotificationChannelForApplicationAsync();
await backend.GetService<Notifications>().RegisterForNotificationsAsync(channel.Uri);
}
...
}
}
チャネルURIのリクエストと通知ペイロードの構築の詳細については、「Windowsプッシュ通知サービス(WNS)の概要」を参照してください。
次に、モバイル・アプリを関連するMCSモバイル・バックエンドに登録し、通知を有効にします。 手順の詳細は、「モバイル・バックエンド」の章の「MCSにアプリをクライアントとして登録する方法」を参照してください。
アプリを登録した後は、様々なソースから通知を受信できます。 詳細は、「アプリとの通知の送受信」を参照してください。
アプリとの通知の送受信
モバイル・アプリを設定および登録した後は、通知およびSMSメッセージの送信を開始できます。
-
通知を送信し、UIからスケジュール通知を取消します。これは開発に役立ちます。
-
通知APIを使用して、どこにいてもアプリやデバイスからの通知を送信できます。
UIまたは通知APIを使用して通知のステータスを確認することもできます。 詳細は、「通知のトラブルシューティング」を参照してください。
MCS UIからの通知のテスト
通知APIを使用した通知の送信
通知REST APIエンドポイントを直接呼び出すことも、モバイル・アプリでカスタム・コードを使用することもできます。 このセクションでは、RESTエンドポイントについて説明します。 例とサンプル・コードを含むカスタム・コードの使用については、「カスタム・コードからAPIを呼び出す」の章の「カスタム・コードから通知APIにアクセス」を参照してください。
通知用のデバイスIDを登録するには、「デバイスIDの登録」で説明されているように、UIまたは通知デバイス登録APIを使用できます。
/mobile/system/notifications/notifications
エンドポイントでは、通知の送信、スケジュールされた通知の取消、および送信された通知のステータスの確認を行うことができます。
注意:
このエンドポイントへの呼出しには次のヘッダーを含める必要があります。-
Authorization
: 基本認証を使用している場合、このヘッダーには、Base64でエンコードされた、MobileEnvironment_Notification
ロールを持つチーム・メンバーの名前とパスワードを含める必要があります。 OAuthでは、このヘッダーにアクセス・トークンを含める必要があります。 OAuthを使用している場合は、MobileEnvironment_Notification
ロールのチーム・メンバーでもなければなりません。 -
Oracle-Mobile-Backend-ID
: 基本認証を使用している場合は、このヘッダーを含める必要があります。 モバイル・バックエンドIDは、モバイル・バックエンドの「Settings」タブに表示されます。 OAuthでは、この情報はアクセス・トークンに含まれます。
-
{"payload":""}
サポートされている各通知プロバイダ(Google、Apple、Windows、およびSyniverse)の整形式JSONを含む統一ペイロードです。 詳細は、「ユニファイ・ドペイロードを使用した通知の送信」を参照してください。 -
{"template":""}
サポートされている各通知プロバイダのペイロードを作成するために使用される、定義済みのパラメータを持つ再利用可能なペイロード・テンプレート。 ペイロード・テンプレートには、次のオプションのパラメータが含まれています:title
、body
、badge
、sound
およびcustom
を含む。 詳細は、「ペイロード・テンプレートを使用した通知の送信」を参照してください。 -
{"message":""}
プレーンテキストのメッセージ文字列。 詳細は、「テキスト・メッセージ通知を送信」を参照してください。
特定の受信者に通知を送信するには、ペイロードのコンテンツの後に引数を追加します。
-
ユーザーまたはユーザーのリストに送信するには、
users
引数を追加します。 ユーザーはfirstname:lastname
または電子メール・アドレスで定義できます。 複数のユーザーはトークンとして配列でリストされ、数の制限はありません。 次に例を示します。-d '{"message": "Hi! Our storewide sale is tomorrow.", "users": ["bob@acme.com", "sjones@xyz.net", "banana@peelme.com"]}'
-
同じモバイル・プラットフォーム上の全員に送信するには、
platform
(IOS、ANDROID、WINDOWSまたはWEB)を追加します。 次に例を示します。-d '{"message": "Hi! Our storewide sale is tomorrow.", "platform": "IOS"}'
-
特定の通知プロバイダに送信するには、
provider
(APNS、GCMまたはFCM、WNSまたはSYNIVERSE)を追加します。 次に例を示します。-d '{"message": "Hi! Our storewide sale is tomorrow.", "provider": "APNS"}'
-
特定のデバイスIDまたはデバイスIDのリストに送信するには、
notificationTokens
引数を追加します。 複数のIDがトークンとして配列でリストされ、数の制限はありません。 次に例を示します。-d '{"message": "Test of notifications feature.", "notificationTokens": ["2DD2D2-D2DDG44GD-GDGSDFZS3-3-3DFZSDFDS"]}'
sendOn
引数を追加します。 次に例を示します。 -d '{"message": "Come to our discount sale today!", "sendOn": "2015-06-15T6:00Z"}'
HTTPレスポンス・ステータス・コード、リクエストおよびレスポンス本文のスキーマなどの詳細は、「Oracle Mobile Cloud ServiceのREST API」を参照してください。
デバイスIDの登録
通知デバイス登録APIによってモバイル・アプリのデバイスIDを登録でき、通知を送信する受信者アドレスとして使用できるようになります。 このAPIではユーザーとデバイスIDを関連付けることもできるため、ユーザー名を通知のターゲットとして使用することもできます。
デバイスID (notificationToken
)を直接登録し、そのIDに直接通知を送信することができます。 このAPIを使用して任意のユーザーをデバイスIDと関連付けることもできます。
-
POST /mobile/platform/devices/register
-
POST /mobile/platform/devices/deregister
-
mobileClient
パラメータは、3つのプロパティを持つバックエンドのクライアントを識別します:-
id
: GoogleまたはAppleのApp Storeによって割り当てられたアプリケーションID。 (これはApp-Keyとは異なります)。 -
version
: 通知を受け取るモバイル・クライアントのバージョンです。現在は1.0です。 -
platform
: "IOS"または"ANDROID"または"WINDOWS"または"WEB"(すべて大文字)
-
-
notificationProvider
パラメータは、notificationToken
が使用されるサービスを定義: APNSまたはGCSまたはFCMまたはWNSまたはSYNIVERSE。 -
notificationToken
パラメータは、通知サービスがコールを送信するために必要なトークンを定義します。 このトークンは、特定のデバイスに関連付けられているモバイル・アプリケーションの特定のインスタンスを一意に識別し、通知を正しい受信者に送信するために使用されます。 必要に応じて16進形式でエンコードします。 -
オプションの
user
パラメータは、提供されたユーザー名に装置IDを関連付けます。user
パラメータが含まれていない場合、デバイスIDは登録コール中にログインしているユーザーに関連付けられます。注意:
異なるユーザー名を指定する場合、ログイン・ユーザーはMobileEnvironment_Notifications
ロールのチーム・メンバーである必要があります。 この方法でユーザー名を登録しても、デバイス・レジストリのエントリは検証されません。 これによりユーザー名が重複する場合、通知は複数のユーザーに送信される可能性があります。 ユーザー名が一意であることが要件になる場合、アプリでそれを保証する必要があります。
MyAppToken
のデバイスを登録します:curl -v
-H "Authorization: Basic VGVzdE1vYmlsZVVzZXIyYzE4YWRiZjMyMDg0ZWZkOWQyODM0NjA1OGNmExampleAuthString="
-H "Oracle-Mobile-Backend-ID: 7cf06198-053e-4311-8186-cae145900d59"
-H "Content-Type:application/json"
-d '{"mobileClient": {"id": "MyClientac3d8baf1aa348b48d80e9b7fd026067","version": "1.0","platform": "IOS"},"notificationProvider":"APNS","notificationToken":"03767dea-29ac-4440-b4f6-75a755845ade","user":"JoeSmith"}'
http://www.fixitfast.com:8080/mobile/platform/devices/register
Connected to fixitfast.com port (10.176.45.198) port 8080 (#0)
Server auth using Basic with user 'lucy'
POST /mobile/platform/devices/register/
Authorization: Basic VGVzdE1vYmlsZVVzZXIyYzE4YWRiZjMyMDg0ZWZkOWQyODM0NjA1OGNmExampleAuthString=
User-Agent: curl/7.33.0
Host: fixitfast.com:8080
Accept: application/json
Content-Type: application/json
Oracle-Mobile-Backend-ID: 7cf06198-053e-4311-8186-cae145900d59
Content-Length: 32
upload completely sent off: 32 out of 32 bytes
HTTP/1.1 201 Created
{
"id": "7cf06198-053e-4311-8186-cae145900d59",
"user": "JoeSmith",
"notificationProvider":"APNS",
"notificationToken":"03767dea-29ac-4440-b4f6-75a755845ade",
"mobileClient": {"id": "MyClientac3d8baf1aa348b48d80e9b7fd026067","version": "1.0","platform": "IOS"},
"modifiedOn": "2016-05-25T14:58:16.373Z"
}
テキスト・メッセージ通知を送信
次の例では、通知REST APIを使用して簡単な通知をモバイル・バックエンドの全員に送信します。 上記のように、Authorization
ヘッダーで送信される名前とパスワードは、必要な権限を持つチーム・メンバーである必要があります。
curl -X POST
-H "Authorization: basic bWNzOldlbGNvbWUxKg=="
-H "Accept: application/json"
-H "Content-Type: application/json; charset=UTF-8"
-H "Oracle-Mobile-Backend-ID:1d97542d-51d6-4f18-897f-35053cfdfd2d"
-d '{"message": "Hi! Our storewide sale is tomorrow."}'
http://www.FixItFast.com:8080/mobile/system/notifications/notifications/
通知が正常に送信されると、レスポンスは次の例のようになります。 作成された通知の本文はJSONになります。
Connected to FixItFast.com port (10.176.45.198) port 8080 (#0)
Server auth using Basic with user 'lucy'
POST /mobile/system/notifications/notifications/ HTTP/1.1
Authorization: Basic bWNzOldlbGNvbWUxKg==
User-Agent: curl/7.33.0
Host: newclothes.com:8080
Accept: application/json
Content-Type: application/json; charset=UTF-8
Oracle-Mobile-Backend-ID:1d97542d-51d6-4f18-897f-35053cfdfd2d
HTTP/1.1 201 Created
また、ステータス・コード400
(不正リクエスト)または401
(不正)を取得することもできます。
ユニファイ・ドペイロードを使用した通知の送信
services
プロパティの下で、次のうち1つ以上を定義できます:
-
apns
ペイロードは、APNS要件に準拠している必要があります。 -
gcm
またはfcm
ペイロードには、任意のJSONプロパティを含めることができます。 -
wns
ペイロード・プロパティには、整形式のWNS payload
が含まれていなければなりません。 -
syniverse
ペイロード・プロパティには、SMSメッセージとして送信する文字列を含める必要があります。
以下は、FCMのペイロードを定義する簡単な例です。 FCMオブジェクトには、通知オブジェクトまたはデータ・オブジェクトのいずれかを含めることができます。 通知オブジェクトには、FCMのマニュアルに記載されているユーザー定義の一連のキーが定義されています。 データ・オブジェクトにはカスタム・キーと値のペアがあります。
{"notificationTokens": [ "xxxxx"],"payload": {"services": {"fcm": {"notification": {"title": "Sale On Now!","body": "50% off until Saturday"
}
}
}
}
}
データ・オブジェクト:
"notificationTokens": [ "xxxxxx"],"payload": {"services": {"fcm": {"data": {"acme1": "value1","acme2": "value2"
}
}
}
}
}
ペイロード・テンプレートを使用した通知の送信
パラメータ | 説明 | データ型 | 例 |
---|---|---|---|
title |
アラートのタイトル。 タイトルが指定されている場合は、body パラメータも必要です。
|
文字列 | "Sale On Now!" |
body |
アラートの本文。
|
文字列 | "50% off until Saturday" |
badge |
通知にバッジ付ける数。
Androidアプリケーションはバッジをサポートしていないため、ペイロードに番号が渡されません。 バッジ値を渡す必要がある場合、カスタム・データ・ペイロードの一部として渡すことができます。 |
数値 | 43 |
sound |
通知とともに再生される音声ファイル。 APNS、WNS、およびFCMでは.wav形式のみがサポートされています。
|
文字列 | "alert.wav" |
custom |
任意の必要なカスタム・データ。 | オブジェクト |
|
以下の例は、FCMを使用して送信された、5つのパラメータすべてと結果のペイロードを含む通知を示しています。 FCMオブジェクトには、通知オブジェクトまたはデータ・オブジェクトのいずれかを含めることができます。 通知オブジェクトには、FCMのマニュアルに記載されているユーザー定義の一連のキーが定義されています。 データ・オブジェクトにはカスタム・キーと値のペアがあります。
{
"template": {
"name" : "#default",
"parameters": {
"title":"this is the title",
"body":"this is the body",
"sound":"alert.wav",
"badge": 5,
"custom":
{ "key1": "value1", "key2": "value2", "key3": [ "value3.1", "value3.2"] }
}
},
このペイロードは、以下の統一ペイロードと同じ方法で配信されます。 上記のように、Androidアプリはバッジをサポートしていないため、アプリは別の方法でbadge
値を使用できます。 この例では、valueは文字列なので、key3の値は文字列に変換されることに注意してください。
"fcm": {
"notification":
{ "title": "this is the title", "body": "this is the body", "sound": "alert.wav" }
"data":
{ "key1": "value1", "key2": "value2", "key3": "[ \"value3.1\", \"value3.2\"]" }
}
予定されている通知の取消
/mobile/system/notifications/notifications/{id}
にDELETEを送信します。 この例では、通知IDは113455
です。
curl -X DELETE
-H "Authorization: Basic bWNzOldlbGNvbWUxKg=="
-H "Oracle-Mobile-Backend-ID:1d97542d-51d6-4f18-897f-35053cfdfd2d"
-H "Accept: application/json"
-H "Content-Type: application/json; charset=UTF-8"
http://www.fixitfast.com:8080/mobile/system/notifications/notifications/113455
通知のトラブルシューティング
通知の送信は非同期処理です。 通知の送信後、モバイル・デバイスに配信されるまで、通知はApple、GoogleまたはMicrosoftサーバーに数分間から数時間、最大で数日間保存される場合があります。 通知を配信できない場合でもエラー・メッセージが返されないことがあります。 通知が送信されると、通知を制御することはできませんが、これは一般的な通知の問題です:
-
セキュアな証明書が存在しない、失効済または正しい場所に置かれていない。
-
デバイスのネットワーク資格証明が登録された資格証明と一致しません。
-
コードに使用されるセキュリティ識別子は、Google、AppleまたはWindowsに登録した識別子と一致せず、AndroidマニフェストまたはiOS Xcodeプロジェクトに定義したものとも一致しません。
-
不正な識別子がフォームに入力された。 たとえば、バックエンドに通知を登録し、APIキーを要求すると、代わりにアプリケーション・キーが入力されました。
-
APNSで、本番資格証明をアップロードしたが、クライアントの構成ではそれは開発の資格証明であると指定しているなど、本番と開発のフラグおよび資格証明が一致していない。
-
FCMおよびGCMで、APIキーまたはプロジェクト番号あるいは送信者IDが間違っている場合、ユーザーがデバイスで通知を無効化している可能性がある。
-
トークンの期限が切れている可能性が最も高いです。 デバイスのトークンは、プロバイダに応じて30日から90日間です。 モバイル・アプリは、MCSと通知プロバイダの両方を起動してアプリケーションを起動するたびに、通知トークンを再登録する必要があります。
-
ユーザーが端末からアプリを削除した
-
APIキーまたはMCSの証明書が期限切れになったか、またはGoogle/Appleから新しいAPIキーまたは証明書がリクエストされ、アップロードされなかった。
-
ユーザーはOSを再インストール/更新してからOSをリロードしてからアプリケーションを実行していません。
-
トークンは登録中に何らかの形でリングされました。
UIでの通知ステータスの確認
通知が正常に送られていることを確かめるには、モバイル・バックエンドの「Notifications」ページからアクセスできる「History」ペインを確認します。
スケジュールされた通知は「Scheduled」タブに表示されます。 送信された通知のリストを表示するには、「Sent」タブをクリックします。 表示されるはずの通知が表示されない場合には、「Check for Updates」をクリックします。
「History」ペインに表示されるステータスには、送信された通知の成功率が反映されます。 「History」ペインの各通知のステータスは左側の列の色によって、次のようにすぐにわかります。
-
緑色は、AppleまたはGoogle(あるいはその両方)のネットワークに受け入れられたバッチ内の個々の通知が70%より多いことを意味します。
-
黄色は、受け入れられたバッチ内の個々の通知が70%より少ないことを意味します。
-
赤色は、バッチがMCSから正常に送信することに失敗したことを意味します。 ほとんどの場合、修正が必要な構成エラーがあります。 通知のトラブルシューティングを参照してください。
-
青色は通知のバッチが現在送信されていることを意味します。 ほとんどの場合、青色インジケータは短い時間しか表示されません。
人気のあるモバイル・アプリケーションでは大量の受信者に送信されることからすると、100%の成功はありません。 たとえば、最近電話をなくしたユーザーに通知が宛てられると、AppleまたはGoogleネットワークはデバイスへの配送の通知を受け付けません。 デフォルトの警告しきい値は70%ですが、Notifications_DeviceCountWarningThreshold
環境ポリシーで変更できます。
モバイル・バックエンドの「Notifications」ページからアクセス可能な「Device Manager」にも、モバイル・バックエンドのすべての登録済デバイスがデバイスID (通知トークン)とともにリストされます。 デバイスが表示されていない場合、ネットワーク・プロバイダによってデバイスID (通知トークン)が無効であり、登録解除するように指定されている可能性があります。 また、デバイスが60日以内に再登録されなかった場合は、レジストリから削除されます。 トラブルシューティングしやすいように、「Clear Registry」をクリックして、モバイル・バックエンドからすべての登録済デバイスを削除できます。
MCSログで、通知または通知バッチに関する追加情報があるかどうかいつでも確認できます。 をクリックしてサイド・メニューを開き、「Administration」 > 「Logs」の順に選択します。 MCSで使用可能な診断ツールの詳細は、「診断」を参照してください
通知REST APIを使用した通知ステータスの確認
GET
をmobile/system/notifications/notifications
に通知のIDで送信するか、status=
問合せパラメータを使用します。 通知ステータスを確認することができます: New
、Scheduled
、Sending
、Error
、Warning
、またはSent
です。 (通知が正常に送信されている必要があります。)
curl -i
-X GET
-u team.user@example.com:Welcome1!
-H "Oracle-Mobile-Backend-ID: ABCD9278-091f-41aa-9cb2-184bd0586fce"
http://fif.cloud.oracle.com/mobile/system/notifications/notifications/?status=Scheduled
limit=100&offset=400
は通知400-499を返します。 {
"items": [
{
"id": 1234,
"tag": "Marketing",
"message": "This is the alert message.",
"status": "Sent",
"notificationTokens": ["APNSdeviceToken"],
"createdOn": "2014-04-02T12:34:56.789Z",
"platformCounts": [
{
"platform": "IOS",
"deviceCount": 1,
"successCount": 1
}
],
"links": [
{
"rel": "canonical",
"href": "/notifications/1234"
},
{
"rel": "self",
"href": "/notifications/1234"
}
]
},
{
"id": 1235,
"tag": "System",
"message": "Update required.",
"status": "Sent",
"processedOn": "2014-04-01T12:34:56.789Z",
"notificationTokens": ["APNSdeviceToken"],
"platformCounts": [
{
"platform": "IOS",
"deviceCount": 1,
"successCount": 1
}
],
"createdOn": "2014-04-03T58:24:12.345Z",
"links": [
{
"rel": "canonical",
"href": "/notifications/1235"
},
{
"rel": "self",
"href": "/notifications/1235"
}
]
}
],
"hasMore": false
"links": [
{
"rel": "canonical",
"href": "/notifications?offset=0&limit=2"
},
{
"rel": "self",
"href": "/notifications?offset=0&limit=1000"
}
]
}