プッシュ通知
Marketo Mobile SDKを使用するiOSまたはAndroid アプリケーションのプッシュ通知を有効にします。
iOS でのプッシュ通知の設定
プッシュ通知を有効にするには、次の 3 つの手順があります。
- Apple Developer アカウントでプッシュ通知を設定します。
- Xcode でプッシュ通知を有効にします。
- Marketo SDKを使用して、アプリでプッシュ通知を有効にします。
Apple Developer アカウントでのプッシュ通知の設定
- Apple Developer メンバーセンターにログインします。
- 「証明書、識別子、プロファイル」を選択します。
- 「iOS、tvOS、watchOS」の下にある「証明書 – >すべて」フォルダーを選択します。
- 左上隅の証明書の横にある「+」を選択します。
- 「Apple プッシュ通知サービス SSL (サンドボックスおよび実稼動)」を選択し、「続行」を選択します。
- アプリの構築に使用するアプリケーション IDを選択します。
- CSRを作成してアップロードし、プッシュ証明書を生成します。
- 証明書をダウンロードし、ダブルクリックしてインストールします。
- 「キーチェーンアクセス」を開き、証明書を右クリックして、両方の項目を
.p12ファイルに書き出します。
- 通知を設定するには、Marketo Admin Console を通じてこのファイルをアップロードします。
- アプリのプロビジョニングプロファイルを更新します。
xCode でプッシュ通知を有効にする
xCode プロジェクトでプッシュ通知機能を有効にします。
Marketo SDK を使用したアプリでプッシュ通知を有効にします。
次のコードをAppDelegate.m ファイルに追加して、顧客デバイスにプッシュ通知を配信します。
注 - Adobe Launch拡張機能を使用する場合は、クラス名としてALMarketoを使用します。
次のインポートをAppDelegate.hに追加します。
| code language-objectivec |
|---|
|
| code language-swift |
|---|
|
次に示すように、AppDelegate に UNUserNotificationCenterDelegate を追加します。
| code language-objectivec |
|---|
|
| code language-swift |
|---|
|
プッシュ通知サービスを初期化するには、次のコードを追加します。
| code language-objectivec |
|---|
|
| code language-swift |
|---|
|
Apple プッシュサービスへの登録を開始するには、このメソッドを呼び出します。 登録が成功すると、アプリはApp デリゲート オブジェクトのapplication:didRegisterForRemoteNotificationsWithDeviceToken: メソッドを呼び出し、デバイストークンを渡します。
登録に失敗した場合、アプリは代わりにアプリデリゲートの application:didFailToRegisterForRemoteNotificationsWithError: メソッドを呼び出します。
Marketoにプッシュトークンを登録します。 Marketoからプッシュ通知を受信するには、デバイストークンを登録する必要があります。
| code language-objectivec |
|---|
|
| code language-swift |
|---|
|
また、ユーザーがログアウトしたときにトークンを登録解除することもできます。
| code language-objectivec |
|---|
|
| code language-swift |
|---|
|
プッシュトークンを再登録するには、手順3のコードをAppDelegate メソッドに抽出します。 ViewController ログインメソッドからそのメソッドを呼び出します。
デバイストークンをMarketoに登録した後、プッシュ通知を処理します。
| code language-objectivec |
|---|
|
| code language-swift |
|---|
|
AppDelegateに次のメソッドを追加します。
この方法を使用すると、アプリがフォアグラウンドにいる間にアラートを表示したり、サウンドを再生したり、バッジを上げたりできます。 このメソッドで適切なcompletionHandlerを呼び出します。
| code language-objectivec |
|---|
|
| code language-swift |
|---|
|
AppDelegateで新しく受信したプッシュ通知を処理します。
デリゲートは、ユーザーがアプリケーションを開いたり、通知を閉じたり、UNNotificationActionを選択したりして通知に応答する際に、このメソッドを呼び出します。 applicationDidFinishLaunching:からアプリケーションが返される前に、デリゲートを設定します。
| code language-objectivec |
|---|
|
| code language-swift |
|---|
|
プッシュ通知の追跡:
アプリがバックグラウンドまたは非アクティブの場合、デバイスは次に示すようにプッシュ通知を受け取ります。 Marketoは、ユーザーが通知を選択したときにトラッキングします。
デバイスがプッシュ通知を受信すると、アプリのデリゲートのapplication:didReceiveRemoteNotification: コールバックに通知が渡されます。
次のMarketo アクティビティログは、アプリイベントとプッシュ通知イベントを示しています。
Android でのプッシュ通知の設定
-
アプリケーションタグ内に次の権限を追加します。
AndroidManifest.xmlを開き、次の権限を追加します。 アプリでは、「INTERNET」および「ACCESS_NETWORK_STATE」権限をリクエストする必要があります。 アプリが既にリクエストしている場合は、この手順をスキップします。code language-xml <uses‐permission android:name="android.permission.INTERNET"/> <uses‐permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <!‐‐Following permissions are required for push notification.‐‐> <uses-permission android:name="android.permission.GET_ACCOUNTS"/> <!‐‐Keeps the processor from sleeping when a message is received.‐‐> <uses-permission android:name="android.permission.WAKE_LOCK"/> <permission android:name="<PACKAGE_NAME>.permission.C2D_MESSAGE" android:protectionLevel="signature" /> <uses-permission android:name="<PACKAGE_NAME>.permission.C2D_MESSAGE" /> <!-- This app has permission to register and receive data message. --> <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> -
HTTPv1でFCMを設定します。
- Marketo feature managerでMME FCM HTTPv1を有効にします。
- アプリのサービスアカウント Json ファイルをMLMにアップロードします。
- Firebase Consoleからサービスアカウント Json ファイルをダウンロードします。
- プッシュ通知を送信する前に、Marketoでサービスアカウント Json ファイルをアップロードしてから1時間待ちます。
- Marketo feature managerでMME FCM HTTPv1を有効にします。
Android テストデバイス
アプリケーションタグ内のマニフェストファイルにMarketo アクティビティを追加します。
<activity android:name="com.marketo.MarketoActivity" android:configChanges="orientation|screenSize">
<intent-filter android:label="MarketoActivity">
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
<data android:host="add_test_device" android:scheme="mkto"/>
</intent-filter/>
</activity/>
Marketo プッシュサービスの登録
-
終了アプリケーション タグの前にFirebase メッセージング サービスを
AndroidManifest.xmlに追加します。code language-xml <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" /> <service android:name=".MyFirebaseMessagingService"> <intent-filter> <action android:name="com.google.firebase.INSTANCE_ID_EVENT"/> <action android:name="com.google.firebase.MESSAGING_EVENT"/> </intent-filter> </service> -
次のように、
MyFirebaseMessagingServiceにMarketo SDK メソッドを追加します。code language-java import com.marketo.Marketo; public class MyFirebaseMessagingService extends FirebaseMessagingService { @Override public void onNewToken(String s) { super.onNewToken(s); Marketo marketoSdk = Marketo.getInstance(this.getApplicationContext()); marketoSdk.setPushNotificaitonToken(s); // Add your code here... } @Override public void onMessageReceived(RemoteMessage remoteMessage) { Marketo marketoSdk = Marketo.getInstance(this.getApplicationContext()); marketoSdk.showPushNotificaiton(remoteMessage); // Add your code here... } }メモ - Adobe拡張機能を使用する場合は、次のコードを追加します。
code language-java import com.marketo.Marketo; public class MyFirebaseMessagingService extends FirebaseMessagingService { @Override public void onNewToken(String token) { super.onNewToken(token); ALMarketo.setPushNotificationToken(token); // Add your code here... } @Override public void onMessageReceived(RemoteMessage remoteMessage) { ALMarketo.showPushNotification(remoteMessage); // Add your code here... } }
メモ: FCM SDKは、必要な権限と受信者の機能を自動的に追加します。 以前のSDK バージョンを使用していた場合は、メッセージの重複を引き起こす可能性のある、次の古い要素を削除します。
<receiver android:name="com.marketo.MarketoBroadcastReceiver" android:permission="com.google.android.c2dm.permission.SEND">
<intent-filter>
<!‐‐Receives the actual messages.‐‐>
<action android:name="com.google.android.c2dm.intent.RECEIVE"/>
<!‐‐Register to enable push notification‐‐>
<action android:name="com.google.android.c2dm.intent.REGISTRATION"/>
<!‐‐‐Replace YOUR_PACKAGE_NAME with your own package name‐‐>
<category android:name="YOUR_PACKAGE_NAME"/>
</intent-filter>
</receiver>
<!‐‐Marketo service to handle push registration and notification‐‐>
<service android:name="com.marketo.MarketoIntentService"/>
-
Marketo プッシュを初期化します。 設定を保存したら、アプリケーションクラスを作成または開き、次のコードを追加します。 Firebase Consoleから送信者IDを取得します。
code language-java Marketo marketoSdk = Marketo.getInstance(getApplicationContext()); // Enable push notification here. The push notification channel name can by any string marketoSdk.initializeMarketoPush(SENDER_ID,"ChannelName");Adobe Launch拡張機能を使用する場合は、次のコードを使用します。
code language-java // Enable push notification here. The push notification channel name can by any string ALMarketo.initializeMarketoPush(SENDER_ID,"ChannelName");このチュートリアルで詳しく説明されている手順を実行して、Google Cloud Messaging サービスを有効にします。
また、ユーザーがログアウトしたときにトークンを登録解除することもできます。
code language-java marketoSdk.uninitializeMarketoPush();Adobe Launch拡張機能を使用する場合は、次のコードを使用します。
code language-java ALMarketo.uninitializeMarketoPush();注:プッシュトークンを再登録するには、手順3のコードをAppDelegate メソッドに抽出します。 ViewController ログインメソッドからそのメソッドを呼び出します。
-
オプション:通知アイコンを設定します。 次のメソッドを呼び出して、カスタム通知アイコンを設定します。
code language-java MarketoConfig.Notification config = new MarketoConfig.Notification(); // Optional bitmap for honeycomb and above config.setNotificationLargeIcon(bitmap); // Required icon Resource ID config.setNotificationSmallIcon(R.drawable.notification_small_icon); // Set the configuration //Use the static methods on ALMarketo class when using Adobe Extension Marketo.getInstance(context).setNotificationConfig(config); // Get the configuration set Marketo.getInstance(context).getNotificationConfig();
トラブルシューティング
モバイルプッシュメッセージが期待どおりに機能しない場合は、実装の詳細を調査する前に、一般的な設定の問題を確認してください。
プッシュメッセージが表示されない
デバイスでプッシュメッセージが無効になっているかどうかを確認します。 モバイルユーザーは、アプリごとにメッセージを受信するかどうかを制御でき、開発者やマーケターは、開発中にメッセージを無効にする場合があります。
アプリが開いていてアクティブかどうかを確認します。 アプリがアクティブな場合、モバイルプッシュメッセージは画面に表示されません。 代わりに、アプリの「ローカル通知」エリアに表示されます。
Marketo でアクティビティログを表示
Marketo アクティビティログを使用して、メッセージが送信されたことを確認します。
メッセージを受信する必要があるユーザーのアクティビティレコードを確認します。 メッセージが送信された場合、アクティビティログにはレコードが含まれます。 レコードが存在しない場合は、MarketoでiOS証明書またはAndroid API キー設定を確認します。
証明書またはキーが無効です
サンドボックスまたは実稼動用に正しい証明書が読み込まれていることを確認します。 必要に応じて、iOS証明書またはAndroid キーを再度書き出して、Marketoに再読み込みします。
.p12 ファイルに証明書またはキーが欠落している(iOS)
証明書をエクスポートする場合は、キーと証明書の両方をエクスポートします。
プロビジョニングプロファイルが最新ではない(iOS)
デバイスを追加したら、プロビジョニングプロファイルを更新し、新しい証明書を生成します。 Xcode プロジェクトを正しいプロファイルと証明書に指定し、証明書をMarketoにインポートします。
iOS 証明書をアップロードできない(iOS)
証明書の書き出しに使用するパスワードにスペースが含まれていないことを確認します。 例えば、次のようにする代わりに:
Hello World 123
次を使用します。
HelloWorld123
iOS 証明書のトラブルシューティング
サンドボックスアプリケーションの場合は、「開発者」または「ユニバーサル」証明書を使用します。 実稼動アプリケーションの場合は、有効な「配布」または「ユニバーサル」証明書をアップロードします。
プッシュバウンス/無効なトークン
登録トークンは、次のシナリオで無効になる可能性があります。
- クライアントアプリが GCM を登録解除した場合。
- クライアントアプリが自動的に登録解除される場合。これは、ユーザーがアプリケーションをアンインストールした場合に発生することがあります。 例えば、iOS では、APNS フィードバックサービスが APNS トークンを無効として報告した場合です。
- 登録トークンが期限切れになった場合。 例えば、Google が登録トークンを更新することを決定した場合や、iOS デバイスの APNS トークンが期限切れになった場合です。
- クライアントアプリが更新されたが、新しいバージョンがメッセージを受信するように設定されていない場合。