105
Amazon Pinpoint 開発者ガイド

Amazon Pinpoint - 開発者ガイド - AWS Documentation€¢ AWS SDK for Ruby バージョン 1.0.0.rc2 以降。 • AWS SDK for Go バージョン 1.5.13 以降。• AWS SDK for

  • Upload
    vanliem

  • View
    278

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Amazon Pinpoint - 開発者ガイド - AWS Documentation€¢ AWS SDK for Ruby バージョン 1.0.0.rc2 以降。 • AWS SDK for Go バージョン 1.5.13 以降。• AWS SDK for

Amazon Pinpoint開発者ガイド

Page 2: Amazon Pinpoint - 開発者ガイド - AWS Documentation€¢ AWS SDK for Ruby バージョン 1.0.0.rc2 以降。 • AWS SDK for Go バージョン 1.5.13 以降。• AWS SDK for

Amazon Pinpoint 開発者ガイド

Amazon Pinpoint: 開発者ガイドCopyright © 2018 Amazon Web Services, Inc. and/or its affiliates. All rights reserved.

Amazon's trademarks and trade dress may not be used in connection with any product or service that is not Amazon's, in any mannerthat is likely to cause confusion among customers, or in any manner that disparages or discredits Amazon. All other trademarks notowned by Amazon are the property of their respective owners, who may or may not be affiliated with, connected to, or sponsored byAmazon.

Page 3: Amazon Pinpoint - 開発者ガイド - AWS Documentation€¢ AWS SDK for Ruby バージョン 1.0.0.rc2 以降。 • AWS SDK for Go バージョン 1.5.13 以降。• AWS SDK for

Amazon Pinpoint 開発者ガイド

Table of ContentsAmazon Pinpoint とは ......................................................................................................................... 1

Amazon Pinpoint の機能 .............................................................................................................. 1対象者セグメントの定義 ...................................................................................................... 1メッセージングキャンペーンで対象者を取り込む .................................................................... 1ダイレクトメッセージの送信 ................................................................................................ 1ユーザー行動の分析 ............................................................................................................ 1

アプリケーションに統合する ................................................................................................................ 3SDK サポート ............................................................................................................................ 3Mobile SDK または JS ライブラリの移行 ....................................................................................... 4

モバイル SDK の統合 .......................................................................................................... 4AWS Amplify の統合 ........................................................................................................... 4Mobile Analytics から移行する .............................................................................................. 5次のステップ ..................................................................................................................... 5

エンドポイントを登録する ........................................................................................................... 5開始する前に ..................................................................................................................... 5AWS Mobile SDK ............................................................................................................... 6AWS Amplify .................................................................................................................... 11次のステップ .................................................................................................................... 12

セッションの管理 (Android) ........................................................................................................ 12開始する前に .................................................................................................................... 12ライフサイクルマネージャーの例 ........................................................................................ 12セッションイベントの報告 ................................................................................................. 15次のステップ .................................................................................................................... 16

イベントのレポート .................................................................................................................. 16開始する前に .................................................................................................................... 17AWS Mobile SDK ............................................................................................................. 17ウェブおよび React Native ................................................................................................. 11次のステップ .................................................................................................................... 18

プッシュ通知の処理 .................................................................................................................. 19プッシュ通知のセットアップ .............................................................................................. 19プッシュ通知の処理 .......................................................................................................... 31

エンドポイントの追加 ....................................................................................................................... 41プログラムでエンドポイントを追加する ....................................................................................... 41

セグメントの作成 .............................................................................................................................. 44セグメントの構築 ...................................................................................................................... 44

AWS SDK for Java を使用したセグメントの構築 ................................................................... 44セグメントのインポート ............................................................................................................ 45

セグメントのインポート .................................................................................................... 45AWS Lambda を使用したセグメントのカスタマイズ ...................................................................... 48

イベントデータ ................................................................................................................. 49Lambda 関数の作成 .......................................................................................................... 50Lambda 関数ポリシーの割り当て ........................................................................................ 51キャンペーンへの Lambda 関数の割り当て ........................................................................... 52

キャンペーンの作成 .......................................................................................................................... 54標準キャンペーンの作成 ............................................................................................................ 54

AWS SDK for Java を使用してキャンペーンを作成する .......................................................... 54A/B テストキャンペーンの作成 ................................................................................................... 55

AWS SDK for Java を使用して A/B テストキャンペーンを作成する .......................................... 55イベントのストリーミング ................................................................................................................. 57

イベントストリーミングのセットアップ ....................................................................................... 57AWS CLI ......................................................................................................................... 57AWS SDK for Java ........................................................................................................... 57

イベントストリーミングを無効にする .......................................................................................... 58AWS CLI ......................................................................................................................... 58

iii

Page 4: Amazon Pinpoint - 開発者ガイド - AWS Documentation€¢ AWS SDK for Ruby バージョン 1.0.0.rc2 以降。 • AWS SDK for Go バージョン 1.5.13 以降。• AWS SDK for

Amazon Pinpoint 開発者ガイド

AWS SDK for Java ........................................................................................................... 58イベントデータ ......................................................................................................................... 58

アプリイベント ................................................................................................................. 59E メールイベント ............................................................................................................. 60SMS イベント .................................................................................................................. 61イベントの属性 ................................................................................................................. 62

API 呼び出しのログ作成 .................................................................................................................... 64CloudTrail 内の Amazon Pinpoint 情報 ......................................................................................... 64例: Amazon Pinpoint ログファイルのエントリ ............................................................................... 66

データの削除 .................................................................................................................................... 68エンドポイントの削除 ............................................................................................................... 68Amazon S3 に保存されているセグメントとエンドポイントデータの削除 .......................................... 68AWS アカウントを解約することですべての AWS データを削除する ................................................ 69

アクセス許可 .................................................................................................................................... 70ユーザー向けの IAM ポリシー ..................................................................................................... 70

ポリシーの例 .................................................................................................................... 71IAM ポリシーの API アクション .......................................................................................... 72

アプリのユーザー認証 ............................................................................................................... 76認証されていないロール .................................................................................................... 77

AWS Mobile Hub サービスロール ................................................................................................ 79セグメントをインポートするための IAM ロール ............................................................................ 80

信頼ポリシー .................................................................................................................... 80IAM ロールの作成 (AWS CLI) ............................................................................................. 80

セグメントをエクスポートするための IAM ロール ......................................................................... 81ステップ 1: IAM ポリシーの作成 ......................................................................................... 82ステップ 2: IAM ロールを作成する ...................................................................................... 83

Kinesis にイベントをストリーミングするための IAM ロール ........................................................... 84アクセス権限ポリシー ....................................................................................................... 85信頼ポリシー .................................................................................................................... 86IAM ロールの作成 (AWS CLI) ............................................................................................. 86

制限 ................................................................................................................................................ 88一般的な制限事項 ...................................................................................................................... 88エンドポイントの制限 ............................................................................................................... 88エンドポイントインポートの制限 ................................................................................................ 89セグメントの制限 ...................................................................................................................... 89キャンペーンの制限 .................................................................................................................. 89モバイルプッシュの制限 ............................................................................................................ 90E メールの制限 ........................................................................................................................ 90

E メールの送信制限 .......................................................................................................... 91E メールメッセージ制限 .................................................................................................... 91E メール送信者と受取人の制限 ........................................................................................... 91

SMS の制限 ............................................................................................................................. 92制限の引き上げのリクエスト ...................................................................................................... 93

AWS Lambda を使用したカスタムチャネルの作成 ................................................................................. 94イベントデータ ......................................................................................................................... 95Lambda 関数の作成 .................................................................................................................. 95

Lambda 関数の例 .............................................................................................................. 95Lambda 関数ポリシーの割り当て ................................................................................................ 51

関数ポリシーの例 .............................................................................................................. 51Amazon Pinpoint への呼び出しアクセス許可の付与 ................................................................ 98

キャンペーンへの Lambda 関数の割り当て ................................................................................... 99ドキュメント履歴 ............................................................................................................................ 100

iv

Page 5: Amazon Pinpoint - 開発者ガイド - AWS Documentation€¢ AWS SDK for Ruby バージョン 1.0.0.rc2 以降。 • AWS SDK for Go バージョン 1.5.13 以降。• AWS SDK for

Amazon Pinpoint 開発者ガイドAmazon Pinpoint の機能

Amazon Pinpoint とはAmazon Pinpoint は、複数のメッセージングチャネル間で顧客とやり取りするために使用できる AWSサービスです。キャンペーンの目的に応じて、プッシュ通知、E メール、またはテキストメッセージ(SMS) を送信できます。

この開発者ガイドの情報は、アプリケーション開発者を対象にしています。このガイドには、AmazonPinpoint の機能をプログラムとして使用することに関する情報が含まれています。また、「アプリケーションに分析と測定機能を統合する (p. 3)」ための手順など、モバイルアプリ開発者に特に有益な情報も含まれています。

「Amazon Pinpoint API リファレンス」はこのドキュメントを補足しています。API リファレンスは、Amazon Pinpoint API で利用できるリソースやメソッドに関する情報を提供しています。

Amazon Pinpoint を初めて使用する場合は、このドキュメントを進める前に、「Amazon Pinpoint ユーザーガイド」を参照することが有用です。

Amazon Pinpoint の機能このセクションでは、Amazon Pinpoint の主要機能について説明します。

対象者セグメントの定義対象者セグメントを定義 (p. 44)することで、正しい対象者にメッセージを届けます。セグメントは、キャンペーンから送信されるメッセージを受信するユーザーを指定します。オペレーティングシステムやモバイルデバイスタイプなど、アプリケーションによって報告されたデータに基づいて動的なセグメントを定義できます。Amazon Pinpoint の外部で定義した静的セグメントをインポートすることもできます。

メッセージングキャンペーンで対象者を取り込むメッセージングキャンペーンを作成 (p. 54)して、対象者を取り込みます。キャンペーンは、カスタマイズされたメッセージを定義したスケジュールで送信します。モバイルプッシュ、E メール、または SMSメッセージを送信するキャンペーンを作成できます。

別のキャンペーン戦略を試すには、キャンペーンを A/B テストとして設定し、結果を Amazon Pinpoint 分析で分析します。

ダイレクトメッセージの送信新しいアカウントのアクティベーションメッセージ、注文確認、パスワードリセット通知といったダイレクトモバイルプッシュや SMS メッセージを特定のユーザーに送信することで、顧客に情報を提供しましょう。ダイレクトメッセージの送信は、Amazon Pinpoint コンソールから行うことも、Amazon PinpointREST API を使用して行うこともできます。

ユーザー行動の分析Amazon Pinpoint で提供された分析を使用して、対象者およびキャンペーンの効果に関する洞察を得られます。ユーザーの取り組みレベル、購入アクティビティ、デモグラフィックに関する傾向を表示できます。送信され、開かれたメッセージのメトリクスでメッセージトラフィックをモニタリングできま

1

Page 6: Amazon Pinpoint - 開発者ガイド - AWS Documentation€¢ AWS SDK for Ruby バージョン 1.0.0.rc2 以降。 • AWS SDK for Go バージョン 1.5.13 以降。• AWS SDK for

Amazon Pinpoint 開発者ガイドユーザー行動の分析

す。アプリケーションは、Amazon Pinpoint API を通じてカスタムデータを報告できます。このデータはAmazon Pinpoint により分析に利用できるようになります。

Amazon Pinpoint 外部で分析データを分析または保存するには、Amazon Kinesis にデータをストリーミング (p. 57)するように Amazon Pinpoint を設定できます。

2

Page 7: Amazon Pinpoint - 開発者ガイド - AWS Documentation€¢ AWS SDK for Ruby バージョン 1.0.0.rc2 以降。 • AWS SDK for Go バージョン 1.5.13 以降。• AWS SDK for

Amazon Pinpoint 開発者ガイドSDK サポート

Amazon Pinpoint とアプリケーションの統合

クライアントコードに Amazon Pinpoint を統合して、ユーザーを理解して交流します。

統合後、ユーザーがアプリケーションを起動すると、エンドポイントの追加や更新のためにAmazonPinpoint サービスに接続します。エンドポイントは、ユーザーのデバイス、E メールアドレスや電話番号など、メッセージを送信できる宛先を表します。

また、統合後にアプリケーションは、使用状況データあるいはイベントを提供します。Amazon Pinpointコンソールのイベントデータを表示して、ユーザー数、アプリケーションの使用頻度、いつ使用しているかなどについてを知ることができます。

アプリケーションによってエンドポイントとイベントが提供されたら、この情報を使用して特定の閲覧者やセグメントを対象としたカスタムメッセージングキャンペーンができます。(キャンペーンを作成しないで、受信者のシンプルなリストに直接メッセージを送信することもできます)。

このセッションのトピックを使用して、モバイルやウェブクライアントに Amazon Pinpoint を統合します。このトピックには、Android、iOS あるいは JavaScript と統合するためのコード例および手順が含まれています。

クライアントのほかに、サポートされる AWS SDK (p. 3) あるいは Amazon Pinpoint API を使用して、エンドポイントのインポート、イベントデータのエクスポート、カスタマーセグメントの定義、キャンペーンの作成と実行などができます。

統合を開始するには、「the section called “Mobile SDK または JS ライブラリの移行” (p. 4)」を参照してください。

トピック• AWS SDK の Amazon Pinpoint サポート (p. 3)• AWS Mobile SDK または JavaScript ライブラリをアプリケーションに統合する (p. 4)• アプリケーションでエンドポイントを登録する (p. 5)• アプリケーションでセッションを管理する (Android のみ) (p. 12)• アプリケーションでのイベントの報告 (p. 16)• プッシュ通知の処理 (p. 19)

AWS SDK の Amazon Pinpoint サポートAmazon Pinpoint API を操作する最も簡単な方法の 1 つは、AWS SDK を使用することです。次の AWSSDK は Amazon Pinpoint API オペレーションのサポートを含みます。

• AWS Mobile SDK for Android バージョン 2.3.5 以降。• AWS Mobile SDK for iOS バージョン 2.4.14 以降。• ウェブの AWS Amplify JavaScript ライブラリ• React Native 用 AWS Amplify JavaScript ライブラリ• AWS SDK for JavaScript バージョン 2.7.10 以降。• AWS SDK for Java バージョン 1.11.63 以降。• AWS SDK for .NET バージョン 3.3.27.0 以降。• AWS SDK for PHP バージョン 3.20.1

3

Page 8: Amazon Pinpoint - 開発者ガイド - AWS Documentation€¢ AWS SDK for Ruby バージョン 1.0.0.rc2 以降。 • AWS SDK for Go バージョン 1.5.13 以降。• AWS SDK for

Amazon Pinpoint 開発者ガイドMobile SDK または JS ライブラリの移行

• AWS SDK for Python (Boto) バージョン 1.4.2 以降。• AWS SDK for Ruby バージョン 1.0.0.rc2 以降。• AWS SDK for Go バージョン 1.5.13 以降。• AWS SDK for C++ バージョン 1.0.20151208.143 以降。

AWS Command Line Interface (AWS CLI) バージョン 1.11.24 以降を使用することでも、Amazon PinpointAPI を操作できます。AWS CLI には Python 2.6.5 以降または Python 3.3 以降が必要です。AWS CLI のインストールおよび設定方法の詳細については、『AWS Command Line Interface ユーザーガイド』の「AWS Command Line Interface のインストール」を参照してください。

Note

このセクションで示されているバージョン番号は、各 SDK または CLI が初めて Amazon PinpointAPI のサポートを含んだバージョンです。新しいリソースまたはオペレーションが時折 AmazonPinpoint API に追加されます。API を通じて Amazon Pinpoint のすべての機能を使用するには、SDK または CLI の最新バージョンを使用していることを確認してください。

AWS Mobile SDK または JavaScript ライブラリをアプリケーションに統合する

ウェブまたはモバイルアプリケーションから Amazon Pinpoint サービスに接続するには、AWS MobileSDK または JavaScript ライブラリをコードと統合します。これらのリソースでは、プラットフォームでネイティブなプログラミング言語を使用して Amazon Pinpoint API にリクエストを発行できます。たとえば、エンドポイントの追加、カスタムエンドポイント属性の適用、使用状況データの報告などができます。

Android あるいは iOS アプリケーションには、AWS Mobile SDK を使用します。ウェブまたはモバイルアプリケーションには、ウェブおよび React Native 用 AWS Amplify JavaScript ライブラリを使用します。

Android あるいは iOS 用 AWS Mobile SDK を統合するAndroid あるいは iOS 用 AWS Mobile SDK をアプリケーションに統合するには、『AWS モバイル開発者ガイド』の「今すぐ始める (Android および iOS)」を参照してください。このトピックは、以下に有用です。

• AWS Mobile Hub. でプロジェクトを作成する。[Messaging & Analytics (メッセージングと分析)] 昨日は、デフォルトで有効化されています。

• アプリケーションを Mobile Hub がプロビジョニングするバックエンド AWS リソースに接続します。• iOS または Android 用 AWS Mobile SDK をアプリケーションに統合する

SDK を統合したら、次のステップのために『Amazon Pinpoint 開発者ガイド』のこのトピックに戻ってください。

AWS Amplify JavaScript ライブラリを統合するAWS Amplify を JavaScript アプリケーションに統合するには、『AWS モバイル開発者ガイド』の「今すぐ始める (ウェブ)」あるいは「今すぐ始める (React Native)」を参照してください。このトピックは次に有用です。

• AWS Mobile CLI を使用してプロジェクトを作成します。分析およびウェブホスティングはデフォルトで有効になっています。

4

Page 9: Amazon Pinpoint - 開発者ガイド - AWS Documentation€¢ AWS SDK for Ruby バージョン 1.0.0.rc2 以降。 • AWS SDK for Go バージョン 1.5.13 以降。• AWS SDK for

Amazon Pinpoint 開発者ガイドMobile Analytics から移行する

• アプリケーションのバックエンド AWS リソースを作成します。• アプリケーションをバックエンドのリソースに接続します。• AWS Amplify ライブラリをアプリケーションに統合します。

AWS Amplify を統合したら、次のステップのために『Amazon Pinpoint 開発者ガイド』のこのトピックに戻ってください。

AWS Mobile SDK で Amazon Mobile Analytics から移行するAmazon Mobile Analytics では、モバイルアプリの分析のレポートと監視に使用できる AWS のサービスとして Amazon Pinpoint を採用していました。Mobile Analytics 機能は Amazon Pinpoint でのみ使用できるようになりました。現在 AWS Mobile SDK で Mobile Analytics を使用している場合は、アプリで引き続きイベントを報告し、このイベントデータは Amazon Pinpoint コンソールに表示されます。ただし、最新のAWS Mobile SDK または JavaScript ライブラリの Amazon Pinpoint 分析機能に切り替えることをお勧めします。これにより、マッチング機能を使用できます。移行することにより、確実に最新の機能を使用し、あらゆる問題のサポートを受けることができます。

移行するには、『Amazon Mobile Analytics ユーザーガイド』の「AWS Mobile SDK または JavaScript ライブラリでの Amazon Pinpoint への移行」を参照してください。

次のステップAWS Mobile SDK または AWS Amplify をアプリケーションと統合しました。これで、Amazon PinpointAPI リクエストを簡単にコードに追加できます。次に、コードを更新してユーザーのデバイスをエンドポイントとして登録します。「アプリケーションでエンドポイントを登録する (p. 5)」を参照してください。

アプリケーションでエンドポイントを登録するユーザーがセッションを開始すると (モバイルアプリを起動するなど)、モバイルまたはウェブアプリケーションは自動的に Amazon Pinpoint にエンドポイントを登録 (あるいは更新) できます。このエンドポイントは、ユーザーがセッションを開始したデバイスを表します。これにはデバイスを説明する属性が含まれており、また定義するカスタム属性を含めることもできます。エンドポイントはまた、E メールアドレスや携帯電話番号といった、顧客とやり取りするための他の方法を表します。

アプリケーションにエンドポイントを登録したら、エンドポイントの属性に基づいた対象者のセグメントができます。続いて、このセグメントをカスタマイズしたメッセージキャンペーンと関連付けることができます。Amazon Pinpoint コンソールで [Analytics] ページを使用して、[New endpoints] や [Daily activeendpoints] など、エンドポイント登録およびアクティビティに関するグラフを表示することもできます。

単一のユーザー ID を複数のエンドポイントに割り当てることができます。ユーザー ID は単一のユーザーを表しますが、このユーザー ID に割り当てられる各エンドポイントはユーザーのデバイスのいずれかを表します。エンドポイントにユーザー ID を割り当てると、[Daily active users] や [Monthly active users] など、ユーザーアクティビティに関するグラフをコンソールに表示することができます。

開始する前に統合していない場合には、Android または iOS 用 AWS Mobile SDK の統合、あるいは アプリケーションにAWS Amplify JavaScript を統合します。「AWS Mobile SDK または JavaScript ライブラリをアプリケーションに統合する (p. 4)」を参照してください。

5

Page 10: Amazon Pinpoint - 開発者ガイド - AWS Documentation€¢ AWS SDK for Ruby バージョン 1.0.0.rc2 以降。 • AWS SDK for Go バージョン 1.5.13 以降。• AWS SDK for

Amazon Pinpoint 開発者ガイドAWS Mobile SDK

Android または iOS 用 AWS Mobile SDK でエンドポイントを登録するAndroid または iOS 用 AWS Mobile SDK を使用して、エンドポイントの登録とカスタマイズを行います。

Amazon Pinpoint クライアントの初期化アプリケーションを登録エンドポイントに更新するには、AWS Mobile SDK が提供する Amazon Pinpointクライアントを初期化します。

次のコードを使用して NoSQL データベーステーブルの項目を削除します。

1. app/build.gradle ファイルに Amazon Pinpoint ライブラリを追加します。

dependencies{ compile 'com.amazonaws:aws-android-sdk-pinpoint:2.6.+'}

2. Amazon Pinpoint クライアントを使用するクラスに以下のインポートステートメントを追加します。

import com.amazonaws.mobileconnectors.pinpoint.PinpointConfiguration;import com.amazonaws.mobileconnectors.pinpoint.PinpointManager;

3. PinpointManager クラスのインスタンスを作成します。次の例では、PinpointManager タイプのグローバル変数が定義されています。この変数は、Application クラスの onCreate() メソッドで初期化します。

public class Application extends MultiDexApplication { public static PinpointManager pinpointManager;

@Override public void onCreate() { super.onCreate(); awsConfiguration = new AWSConfiguration(this);

if (IdentityManager.getDefaultIdentityManager() == null) { final IdentityManager identityManager = new IdentityManager(getApplicationContext(), awsConfiguration); IdentityManager.setDefaultIdentityManager(identityManager); }

try { final PinpointConfiguration config = new PinpointConfiguration(this, IdentityManager.getDefaultIdentityManager().getCredentialsProvider(), awsConfiguration); Application.pinpointManager = new PinpointManager(config); } catch (final AmazonClientException ex) { Log.e(LOG_TAG, "Unable to initialize PinpointManager. " + ex.getMessage(), ex); }

}

6

Page 11: Amazon Pinpoint - 開発者ガイド - AWS Documentation€¢ AWS SDK for Ruby バージョン 1.0.0.rc2 以降。 • AWS SDK for Go バージョン 1.5.13 以降。• AWS SDK for

Amazon Pinpoint 開発者ガイドAWS Mobile SDK

iOS - Swift

1. AWS Mobile SDK をインストールするときに設定した Podfile の AWSPinpoint pod を含めます。

platform :ios, '9.0'target :'YourAppName' do use_frameworks!

pod 'AWSPinpoint', '~> 2.6.6'

# other pods

end

2. Amazon Pinpoint クライアントを使用するクラスに以下のインポートステートメントを追加します。

import AWSCoreimport AWSPinpoint

3. AWSPinpoint クラスのインスタンスを作成します。次の例では、AWSPinpoint?タイプのグローバル変数が定義されています。この変数は、AppDelegate クラスのapplication(_:didFinishLaunchingWithOptions:) メソッドで初期化します。

class AppDelegate: UIResponder, UIApplicationDelegate {

var pinpoint: AWSPinpoint?

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

// . . .

// Initialize the Amazon Pinpoint client pinpoint = AWSPinpoint(configuration: AWSPinpointConfiguration.defaultPinpointConfiguration(launchOptions: launchOptions))

// . . . }}

iOS - Objective-C

1. AWS Mobile SDK をインストールするときに設定した Podfile の AWSPinpoint pod を含めます。

platform :ios, '9.0'target :'YourAppName' do use_frameworks!

pod 'AWSPinpoint', '~> 2.6.6'

# other pods

end

7

Page 12: Amazon Pinpoint - 開発者ガイド - AWS Documentation€¢ AWS SDK for Ruby バージョン 1.0.0.rc2 以降。 • AWS SDK for Go バージョン 1.5.13 以降。• AWS SDK for

Amazon Pinpoint 開発者ガイドAWS Mobile SDK

2. Amazon Pinpoint クライアントを使用するクラスに以下のインポートステートメントを追加します。

#import <AWSCore/AWSCore.h>#import <AWSPinpoint/AWSPinpoint.h>

3. AWSPinpoint クラスのインスタンスを作成します。次の例では、AWSPinpoint タイプのグローバル変数が定義されています。この変数は、AppDelegate クラスのapplication:didFinishLaunchingWithOptions: メソッドで初期化します。

@interface AppDelegate : UIResponder <UIApplicationDelegate>

@property(atomic) AWSPinpoint *pinpoint;

@end

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

// . . .

// Initialize the Amazon Pinpoint client AWSPinpointConfiguration *config = [AWSPinpointConfiguration defaultPinpointConfigurationWithLaunchOptions:launchOptions]; _pinpoint = [AWSPinpoint pinpointWithConfiguration:config]; // . . . return YES;}

@end

カスタムエンドポイント属性を追加するアプリケーションで Amazon Pinpoint クライアントを初期化したら、エンドポイントにカスタム属性を追加できます。

次のコードを使用して NoSQL データベーステーブルの項目を削除します。

Android アプリケーションでカスタムエンドポイント属性を追加するには、カスタム属性を格納する TargetingClient クラスを使用します。次に、updateEndpointProfile() メソッドを呼び出します。このメソッドではクライアントに格納されている属性があるエンドポイントを生成し、Amazon Pinpoint でこのエンドポイントを更新します。

final PinpointManager pinpoint = Application.pinpointManager;final List<String> interestsList = Arrays.asList("science", "politics", "travel");pinpoint.getTargetingClient().addAttribute("Interests", interestsList);pinpoint.getTargetingClient().updateEndpointProfile();

あるいは、EndpointProfile クラスのインスタンスを作成して変更し、エンドポイントオブジェクトを updateEndpointProfile() 呼び出しに渡すこともできます。

final PinpointManager pinpoint = Application.pinpointManager;final List<String> interestsLists = Arrays.asList("science", "politics", "travel");

8

Page 13: Amazon Pinpoint - 開発者ガイド - AWS Documentation€¢ AWS SDK for Ruby バージョン 1.0.0.rc2 以降。 • AWS SDK for Go バージョン 1.5.13 以降。• AWS SDK for

Amazon Pinpoint 開発者ガイドAWS Mobile SDK

EndpointProfile endpointProfile = pinpoint.getTargetingClient().currentEndpoint();endpointProfile.addAttribute("Interests", interestsLists);pinpoint.getTargetingClient().updateEndpointProfile(endpointProfile);

iOS - Swift

Swift にカスタムエンドポイント属性を追加するには、AWSPinpointTargetingClient クラスを使用します。次の例では、applicationDidEnterBackground(_:) メソッドのエンドポイントを更新します。この例では 、interests と呼ばれるカスタム属性を追加し、これはscience、politics、travel 値を割り当てます。

func applicationDidEnterBackground(_ application: UIApplication) { // . . . // Add a custom attribute to the endpoint if let targetingClient = pinpoint?.targetingClient { targetingClient.addAttribute(["science", "politics", "travel"], forKey: "interests") targetingClient.updateEndpointProfile() let endpointId = targetingClient.currentEndpointProfile().endpointId print("Updated custom attributes for endpoint: \(endpointId)") } // . . . }

iOS - Objective-C

Objective-C にカスタムエンドポイント属性を追加するには、AWSPinpointTargetingClientクラスを使用します。次の例では、application:didFinishLaunchingWithOptions: メソッドのターゲットクライアントを更新します。この例では 、interests と呼ばれるカスタム属性を追加し、これは science、politics、travel 値を割り当てます。また、この例ではscienceInterestLevel と呼ばれるカスタムメトリックスを 100 値で追加します。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // . . . // Add a custom attribute to the endpoint AWSPinpointEndpointProfile *profile = [_pinpoint.targetingClient currentEndpointProfile]; [profile addAttribute:@[@"science", @"politics", @"travel"] forKey:@"interests"]; [profile addMetric:@100 forKey:@"scienceInterestLevel"]; [[_pinpoint targetingClient] updateEndpointProfile: profile];

// . . . return YES;}

ユーザー ID をエンドポイントに割り当てるエンドポイントにユーザー ID を割り当てるには、次のいずれかの手順を実行します。

• Amazon Cognito ユーザープールによりユーザーのサインアップとサインインを管理します。

9

Page 14: Amazon Pinpoint - 開発者ガイド - AWS Documentation€¢ AWS SDK for Ruby バージョン 1.0.0.rc2 以降。 • AWS SDK for Go バージョン 1.5.13 以降。• AWS SDK for

Amazon Pinpoint 開発者ガイドAWS Mobile SDK

• Amazon Pinpoint クライアントを使用して Amazon Cognito ユーザープールを使用せずにユーザー ID を割り当てます。

Amazon Cognito ユーザープールは、アプリへのサインアップの追加とサインインを簡単にするユーザーディレクトリです。iOS および Android 用 AWS Mobile SDK がエンドポイントを Amazon Pinpoint に登録すると、Amazon Cognito はユーザープールからユーザー ID を自動的に割り当てます。詳細については、Amazon Cognito 開発者ガイドの「Amazon Cognito ユーザープールで Amazon Pinpoint 分析を使用する」を参照してください。

Amazon Cognito ユーザープールを使用しない場合は、アプリケーションの Amazon Pinpoint クライアントを使用してエンドポイントにユーザー ID を割り当てることができます。

次のコードを使用して NoSQL データベーステーブルの項目を削除します。

Android アプリケーションでエンドポイントにユーザー ID を割り当てるには、EndpointProfileUser クラスのインスタンスを作成し、setUserId メソッドを呼び出します。次に、このユーザーオブジェクトをエンドポイントに割り当てます。最後に、更新されたエンドポイントを PinpointManager クラスの TargetingClient に渡します。

final PinpointManager pinpoint = Application.pinpointManager;EndpointProfile endpointProfile = pinpoint.getTargetingClient().currentEndpoint();EndpointProfileUser user = new EndpointProfileUser();user.setUserId("UserIdValue");endpointProfile.setUser(user);pinpoint.getTargetingClient().updateEndpointProfile(endpointProfile);

iOS - Swift

Swift でエンドポイントにユーザー ID を割り当てるには、AWSPinpointTargetingClient クラスを使用します。まず、AWSPinpointEndpointProfileUser オブジェクトを作成し、その userIdプロパティを設定します。次に、このユーザーオブジェクトをエンドポイントに割り当てます。最後に、更新されたエンドポイントを update(_endpointProfile:) メソッドでターゲットクライアントに渡します。次の例では、application(_:didFinishLaunchingWithOptions:) メソッドでユーザー ID を割り当てます。

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { // . . .

if let targetingClient = pinpoint?.targetingClient { let endpoint = targetingClient.currentEndpointProfile() // Create a user and set its userId property let user = AWSPinpointEndpointProfileUser() user.userId = "UserIdValue" // Assign the user to the endpoint endpoint.user = user // Update the endpoint with the targeting client targetingClient.update(endpoint) print("Assigned user ID \(user.userId ?? "nil") to endpoint \(endpoint.endpointId)") }

// . . . return didFinishLaunching}

10

Page 15: Amazon Pinpoint - 開発者ガイド - AWS Documentation€¢ AWS SDK for Ruby バージョン 1.0.0.rc2 以降。 • AWS SDK for Go バージョン 1.5.13 以降。• AWS SDK for

Amazon Pinpoint 開発者ガイドAWS Amplify

iOS - Objective-C

Objective-C でエンドポイントにユーザー ID を割り当てるには、AWSPinpointTargetingClientクラスを使用します。まず、AWSPinpointEndpointProfileUser オブジェクトを作成し、そのuserId プロパティを設定します。次に、このユーザーオブジェクトをエンドポイントに割り当てます。最後に、更新されたエンドポイントを updateEndpointProfile: メソッドでターゲットクライアントに渡します。次の例では、application:didFinishLaunchingWithOptions: メソッドでユーザー ID を割り当てます。

- (BOOL)application:(UIApplication *)applicationdidFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // . . .

AWSPinpointEndpointProfile *profile = [_pinpoint.targetingClient currentEndpointProfile]; // Create a user and set its userId property AWSPinpointEndpointProfileUser *user = [AWSPinpointEndpointProfileUser new]; [user setUserId:@"UserIdValue"]; // Assign the user to the endpoint [profile setUser:user]; // Update the endpoint with the targeting client [[_pinpoint targetingClient] updateEndpointProfile: profile];

// . . .

return YES;}

AWS Amplify JavaScript ライブラリでエンドポイントを登録するウェブ および React Native 用 AWS Amplify JavaScript を使用して、エンドポイントの登録にウェブあるいはモバイル JavaScript アプリケーションを有効化できます。

カスタムエンドポイント属性を追加するAWS Amplify とアプリケーションを統合したら、Analytics モジュールを使用してカスタム属性をエンドポイントに追加できます。

import { Analytics } from 'aws-amplify';

Analytics.updateEndpoint({ Attributes: { interests: ['science', 'politics', 'travel'] // ... },})

ユーザー ID をエンドポイントに割り当てるAnalytics モジュールを使用して、ユーザー ID を割り当てることができます。

import { Analytics } from 'aws-amplify';

Analytics.updateEndpoint({ // Customized userId

11

Page 16: Amazon Pinpoint - 開発者ガイド - AWS Documentation€¢ AWS SDK for Ruby バージョン 1.0.0.rc2 以降。 • AWS SDK for Go バージョン 1.5.13 以降。• AWS SDK for

Amazon Pinpoint 開発者ガイド次のステップ

UserId: 'UserIdValue,})

次のステップアプリケーションを更新して、エンドポイントを登録します。これで、アプリケーションのユーザー起動、デバイスインフォメーションおよびカスタム属性が Amazon Pinpoint で提供されます。この情報を使用して、閲覧者のセグメントを定義できます。コンソールで、エンドポイントに関するメトリックス、そして、該当する場合には、ユーザー ID を割り当てられたユーザーを表示できます。

続いて、次のいずれかを実行します。

• Android アプリケーションで作業する場合には、アプリケーションのライフサイクルを追跡し、セッションイベントを Amazon Pinpoint にレポートするためにコードを更新します。「アプリケーションでセッションを管理する (Android のみ) (p. 12)」を参照してください。

• その他のタイプのアプリケーションでは、アプリケーションを更新して使用状況データをレポートします。「アプリケーションでのイベントの報告 (p. 16)」を参照してください。

アプリケーションでセッションを管理する (Androidのみ)

ユーザーがアプリを利用するときに、セッションの開始時刻と終了時刻、セッション中に発生するイベントなどアプリセッションに関する情報を Amazon Pinpoint にレポートします。Android アプリケーションからこの情報をレポートするには、アプリにユーザーの Android デバイスでアプリがフォアグラウンドおよびバックグラウンドでイベントを処理するメソッドが含まれている必要があります。(iOS アプリケーションでは、AWS Mobile SDK for iOS が自動的にセッション情報をレポートします)。

開始する前にをまだ実行していない場合は、次を実行します。

• AWS Mobile SDK for Android とアプリケーションを統合します。「Android あるいは iOS 用 AWSMobile SDK を統合する (p. 4)」を参照してください。

• アプリケーションを更新して、エンドポイントを登録します。「アプリケーションでエンドポイントを登録する (p. 5)」を参照してください。

ライフサイクルマネージャーの例次の AbstractApplicationLifeCycleHelper クラスの例では、Application.ActivityLifecycleCallbacks インターフェースを実装して、アプリケーションがフォアグラウンドあるいはバックグラウンドに入ったときやその他の状態で追跡を行います。このクラスをアプリケーションに追加する、あるいはコードを更新する例としてこれを使用します。

package com.amazonaws.mobile.util;

import android.app.Activity;import android.app.Application;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.content.IntentFilter;import android.os.Bundle;import android.util.Log;

12

Page 17: Amazon Pinpoint - 開発者ガイド - AWS Documentation€¢ AWS SDK for Ruby バージョン 1.0.0.rc2 以降。 • AWS SDK for Go バージョン 1.5.13 以降。• AWS SDK for

Amazon Pinpoint 開発者ガイドライフサイクルマネージャーの例

import java.util.WeakHashMap;

/** * Aids in determining when your application has entered or left the foreground. * The constructor registers to receive Activity lifecycle events and also registers a * broadcast receiver to handle the screen being turned off. Abstract methods are * provided to handle when the application enters the background or foreground. * Any activity lifecycle callbacks can easily be overriden if additional handling * is needed. Just be sure to call through to the super method so that this class * will still behave as intended. **/public abstract class AbstractApplicationLifeCycleHelper implements Application.ActivityLifecycleCallbacks { private static final String LOG_TAG = AbstractApplicationLifeCycleHelper.class.getSimpleName(); private static final String ACTION_SCREEN_OFF = "android.intent.action.SCREEN_OFF"; private boolean inForeground = false; /** Tracks the lifecycle of activities that have not stopped (including those restarted). */ private WeakHashMap<Activity, String> activityLifecycleStateMap = new WeakHashMap<>();

/** * Constructor. Registers to receive activity lifecycle events. * @param application The Android Application class. */ public AbstractApplicationLifeCycleHelper(final Application application) { application.registerActivityLifecycleCallbacks(this); final ScreenOffReceiver screenOffReceiver = new ScreenOffReceiver(); application.registerReceiver(screenOffReceiver, new IntentFilter(ACTION_SCREEN_OFF)); }

@Override public void onActivityCreated(final Activity activity, final Bundle bundle) { Log.d(LOG_TAG, "onActivityCreated " + activity.getLocalClassName()); handleOnCreateOrOnStartToHandleApplicationEnteredForeground(); activityLifecycleStateMap.put(activity, "created"); }

@Override public void onActivityStarted(final Activity activity) { Log.d(LOG_TAG, "onActivityStarted " + activity.getLocalClassName()); handleOnCreateOrOnStartToHandleApplicationEnteredForeground(); activityLifecycleStateMap.put(activity, "started"); }

@Override public void onActivityResumed(final Activity activity) { Log.d(LOG_TAG, "onActivityResumed " + activity.getLocalClassName()); activityLifecycleStateMap.put(activity, "resumed"); }

@Override public void onActivityPaused(final Activity activity) { Log.d(LOG_TAG, "onActivityPaused " + activity.getLocalClassName()); activityLifecycleStateMap.put(activity, "paused"); }

@Override public void onActivityStopped(final Activity activity) { Log.d(LOG_TAG, "onActivityStopped " + activity.getLocalClassName()); // When the activity is stopped, we remove it from the lifecycle state map since we // no longer consider it keeping a session alive. activityLifecycleStateMap.remove(activity); }

13

Page 18: Amazon Pinpoint - 開発者ガイド - AWS Documentation€¢ AWS SDK for Ruby バージョン 1.0.0.rc2 以降。 • AWS SDK for Go バージョン 1.5.13 以降。• AWS SDK for

Amazon Pinpoint 開発者ガイドライフサイクルマネージャーの例

@Override public void onActivitySaveInstanceState(final Activity activity, final Bundle outState) { Log.d(LOG_TAG, "onActivitySaveInstanceState " + activity.getLocalClassName()); }

@Override public void onActivityDestroyed(final Activity activity) { Log.d(LOG_TAG, "onActivityDestroyed " + activity.getLocalClassName()); // Activity should not be in the activityLifecycleStateMap any longer. if (activityLifecycleStateMap.containsKey(activity)) { Log.wtf(LOG_TAG, "Destroyed activity present in activityLifecycleMap!?"); activityLifecycleStateMap.remove(activity); } }

/** * Call this method when your Application trims memory. * @param level the level passed through from Application.onTrimMemory(). */ public void handleOnTrimMemory(final int level) { Log.d(LOG_TAG, "onTrimMemory " + level); // If no activities are running and the app has gone into the background. if (level >= Application.TRIM_MEMORY_UI_HIDDEN) { checkForApplicationEnteredBackground(); } }

class ScreenOffReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { checkForApplicationEnteredBackground(); } }

/** * Called back when your application enters the Foreground. */ protected abstract void applicationEnteredForeground();

/** * Called back when your application enters the Background. */ protected abstract void applicationEnteredBackground();

/** * Called from onActivityCreated and onActivityStarted to handle when the application enters * the foreground. */ private void handleOnCreateOrOnStartToHandleApplicationEnteredForeground() { // if nothing is in the activity lifecycle map indicating that we are likely in the background, and the flag // indicates we are indeed in the background. if (activityLifecycleStateMap.size() == 0 && !inForeground) { inForeground = true; // Since this is called when an activity has started, we now know the app has entered the foreground. applicationEnteredForeground(); } }

private void checkForApplicationEnteredBackground() { ThreadUtils.runOnUiThread(new Runnable() { @Override

14

Page 19: Amazon Pinpoint - 開発者ガイド - AWS Documentation€¢ AWS SDK for Ruby バージョン 1.0.0.rc2 以降。 • AWS SDK for Go バージョン 1.5.13 以降。• AWS SDK for

Amazon Pinpoint 開発者ガイドセッションイベントの報告

public void run() { // If the App is in the foreground and there are no longer any activities that have not been stopped. if ((activityLifecycleStateMap.size() == 0) && inForeground) { inForeground = false; applicationEnteredBackground(); } } }); }}

セッションイベントの報告AbstractApplicationLifeCycleHelper クラスを含めた後、Application クラスでapplicationEnteredForeground および applicationEnteredBackground の 2 つの抽象メソッドを実装します。これらのメソッドにより、アプリは以下の情報を Amazon Pinpoint にレポートできます。

• セッション開始時刻 (アプリがフォアグラウンドで実行される場合)。• セッション終了時刻 (アプリがバックグラウンドの場合)。• 収益化イベントなどのアプリセッション中に発生したイベント。アプリがバックグラウンドのときに、

この情報がレポートされます。

次の例は、applicationEnteredForeground および applicationEnteredBackground を実装する方法を示します。また、Application クラスの onTrimMemory 機能内部から handleOnTrimMemoryを呼び出す方法も示しています。

import com.amazonaws.mobileconnectors.pinpoint.PinpointConfiguration;import com.amazonaws.mobileconnectors.pinpoint.PinpointManager;

public class Application extends MultiDexApplication { public static PinpointManager pinpointManager; private AbstractApplicationLifeCycleHelper applicationLifeCycleHelper;

@Override public void onCreate() { super.onCreate();

// . . . // The Helper registers itself to receive application lifecycle events when it is constructed. // A reference is kept here in order to pass through the onTrimMemory() call from // the Application class to properly track when the application enters the background. applicationLifeCycleHelper = new AbstractApplicationLifeCycleHelper(this) { @Override protected void applicationEnteredForeground() { Application.pinpointManager.getSessionClient().startSession(); // handle any events that should occur when your app has come to the foreground... }

@Override protected void applicationEnteredBackground() { Log.d(LOG_TAG, "Detected application has entered the background."); Application.pinpointManager.getSessionClient().stopSession(); Application.pinpointManager.getAnalyticsClient().submitEvents(); // handle any events that should occur when your app has gone into the background... }

15

Page 20: Amazon Pinpoint - 開発者ガイド - AWS Documentation€¢ AWS SDK for Ruby バージョン 1.0.0.rc2 以降。 • AWS SDK for Go バージョン 1.5.13 以降。• AWS SDK for

Amazon Pinpoint 開発者ガイド次のステップ

}; }

private void updateGCMToken() { try { final String gcmToken = InstanceID.getInstance(this).getToken( "YOUR_SENDER_ID", GoogleCloudMessaging.INSTANCE_ID_SCOPE ); Application.pinpointManager.getNotificationClient().registerGCMDeviceToken(gcmToken); } catch (IOException e) { e.printStackTrace(); } }

@Override public void onTrimMemory(final int level) { Log.d(LOG_TAG, "onTrimMemory " + level); applicationLifeCycleHelper.handleOnTrimMemory(level); super.onTrimMemory(level); }

}

次のステップセッション情報をレポートするために、Android アプリケーションが更新されました。これで、ユーザーがアプリを開閉するたびに、[セッション] や [Session heat map (セッションヒートマップ)] チャートで示されるものなどのセッションメトリックスを Amazon Pinpoint コンソール表示できます。

次に、アプリを更新して使用状況データをレポートします。「アプリケーションでのイベントの報告 (p. 16)」を参照してください。

アプリケーションでのイベントの報告モバイルあるいはウェブアプリケーションでは、AWS Mobile SDK およびライブラリを使用して、使用状況データあるいはイベントを Amazon Pinpoint に報告できます。イベントを報告して、セッション時間、ユーザーの購入行動、サインインの試行、必要なカスタムイベントタイプなどの情報を取得できます。

アプリケーションがイベントを報告したら、Amazon Pinpoint コンソールで分析を表示できます。[Analytics] ページのグラフは、ユーザーの行動の多くの側面に関するメトリクスを提供します。詳細については、Amazon Pinpoint ユーザーガイドの「Amazon Pinpoint 分析のグラフリファレンス」を参照してください。

Amazon Pinpoint 外部でイベントデータを分析または保存するには、Amazon Kinesis にデータをストリーミングするように Amazon Pinpoint を設定できます。詳細については、「Amazon Pinpoint イベントをKinesis にストリーミングする (p. 57)」を参照してください。

AWSMobile SDK および AWS Amplify JavaScript ライブラリを使用すると、Amazon Pinpoint API を呼び出して以下の種類のイベントの報告ができます。

セッションイベント

ユーザーがアプリを開き、終了する日時と回数を示します。

アプリケーションがセッションイベントを報告したら、Amazon Pinpoint コンソールの [Analytics (分析)] ページを使用して、[セッション]、[Daily active endpoints (日別アクティブエンドポイント)]、[7-day retention rate (7 日間保持率)] などのグラフを表示します。

16

Page 21: Amazon Pinpoint - 開発者ガイド - AWS Documentation€¢ AWS SDK for Ruby バージョン 1.0.0.rc2 以降。 • AWS SDK for Go バージョン 1.5.13 以降。• AWS SDK for

Amazon Pinpoint 開発者ガイド開始する前に

カスタムイベント

カスタムイベントタイプを割り当てることで、標準外のイベントを定義します。カスタムイベントにカスタム属性およびメトリクスを追加できます。

コンソールの [Analytics (分析)] ページの [イベント] タブに、アプリケーションで報告されるすべてのカスタムイベントのメトリクスが表示されます。

収益化イベント

アプリケーションによって生成される収益およびユーザーが購入した商品数を報告します。

[Analytics (分析)] ページの [Revenue (収益)] タブには、[Revenue (収益)]、[Paying users (支払いユーザー)]、[Units sold (販売数)] などのグラフが表示されます。

認証イベント

ユーザーがアプリケーションで認証する頻度を示しています。

[Analytics (分析)] ページの [ユーザー] タブでは、[サインイン]、[サインアップ] および [Authenticationfailures (認証失敗)] のグラフが表示されます。

開始する前にをまだ実行していない場合は、次を実行します。

• AWSMobile SDK またはライブラリをアプリケーションに統合します。「AWS Mobile SDK またはJavaScript ライブラリをアプリケーションに統合する (p. 4)」を参照してください。

• アプリケーションを更新して、エンドポイントを登録します。「アプリケーションでエンドポイントを登録する (p. 5)」を参照してください。

• Android アプリケーションにAmazon Pinpoint を統合する場合には、アプリケーションのライフサイクルを追跡し、セッションイベントを Amazon Pinpoint に報告するためにコードを更新します。「アプリケーションでセッションを管理する (Android のみ) (p. 12)」を参照してください。

Android または iOS 用 AWS Mobile SDK でイベントを報告するiOS および Android 用 AWS Mobile SDK を使用して Amazon Pinpoint にイベントを報告できるようにモバイルアプリケーションを有効化できます。

アプリケーションコードを更新してイベントを記録して送信するには、「Amazon Pinpoint でモバイルアプリに分析を追加する」を『AWS モバイル開発者ガイド』で参照してください。

モバイルアプリケーションから認証イベントを報告するユーザーがアプリで認証される回数を確認するには、アプリケーションコードを更新し、Amazon Pinpointが認証の次の標準イベントタイプを受け取るようにします。

• _userauth.sign_in

• _userauth.sign_up

• _userauth.auth_fail

次のいずれかを行うことによって、認証イベントを報告できます。

17

Page 22: Amazon Pinpoint - 開発者ガイド - AWS Documentation€¢ AWS SDK for Ruby バージョン 1.0.0.rc2 以降。 • AWS SDK for Go バージョン 1.5.13 以降。• AWS SDK for

Amazon Pinpoint 開発者ガイドウェブおよび React Native

• Amazon Cognito ユーザープールによりユーザーのサインアップとサインインを管理する。• iOS あるいは Android 用 AWS Mobile SDK が提供する Amazon Pinpoint クライアントを使用して、認証

イベントを報告します。

Amazon Cognito ユーザープールは、アプリへのサインアップの追加とサインインを簡単にするユーザーディレクトリです。ユーザーがアプリに対して認証する際に、Amazon Cognito は認証イベントをAmazon Pinpoint に報告します。詳細については、Amazon Cognito 開発者ガイドの「Amazon Cognitoユーザープールで Amazon Pinpoint 分析を使用する」を参照してください。

Amazon Cognito ユーザープールを使用しない場合は、次の例に示すように、Amazon Pinpoint クライアントを使用して、認証イベントを記録および送信できます。この例では、イベントタイプは_userauth.sign_in に設定されますが、任意の認証イベントタイプを指定できます。

Android - Java

final AnalyticsEvent event = AWSMobileClient.defaultMobileClient() .getPinpointManager().getAnalyticsClient().createEvent("_userauth.sign_in")AWSMobileClient.defaultMobileClient() .getPinpointManager().getAnalyticsClient().recordEvent(event);AWSMobileClient.defaultMobileClient() .getPinpointManager().getAnalyticsClient().submitEvents();

iOS - Swift

let pinpointAnalyticsClient = pinpoint!.analyticsClientlet event = pinpointAnalyticsClient.createEventWithEventType("_userauth.sign_in")

pinpointAnalyticsClient.recordEvent(event)pinpointAnalyticsClient.submitEvents()

iOS - Objective-C

AWSPinpointEvent *event = _pinpoint.analyticsClient createEventWithEventType :@"_userauth.sign_in"];

_pinpoint.analyticsClient recordEvent:event];_pinpoint.analyticsClient submitEvents];

AWS Amplify JavaScript ライブラリでイベントを報告するJavaScript アプリケーションで分析を報告するには、『AWS モバイル開発者ガイド』で次のいずれかのトピックを参照してください。

• 分析の追加 (ウェブ)• 分析を追加する (React Native)

次のステップアプリケーションを更新して、イベントを報告します。これで、ユーザーがアプリケーションを操作すると、使用状況データが Amazon Pinpoint に送信されます。このデータをコンソールで表示でき、また、Amazon Kinesis にストリーミングすることができます。

18

Page 23: Amazon Pinpoint - 開発者ガイド - AWS Documentation€¢ AWS SDK for Ruby バージョン 1.0.0.rc2 以降。 • AWS SDK for Go バージョン 1.5.13 以降。• AWS SDK for

Amazon Pinpoint 開発者ガイドプッシュ通知の処理

次に、アプリケーションをアップデートして Amazon Pinpoint で送信するプッシュ通知を処理します。「プッシュ通知の処理 (p. 19)」を参照してください。

プッシュ通知の処理以下のトピックでは、Amazon Pinpoint を使用して送信したプッシュ通知を受信するように iOS あるいはAndroid アプリケーションを変更します。

トピック• Amazon Pinpoint のプッシュ通知のセットアップ (p. 19)• プッシュ通知の処理 (p. 31)

Amazon Pinpoint のプッシュ通知のセットアップAmazon Pinpoint を使用する前に、AWS Mobile Hub でアプリをプロジェクトとして追加する必要があります。プロジェクトを追加するとき、Amazon Pinpoint が iOS および Android のプッシュ通知サービスを通してアプリにメッセージを送信するための認証情報を提供します。

• iOS アプリでは、Apple の Developer ポータルから取得した SSL 証明書を提供します。証明書により、Amazon Pinpoint は Apple Push Notification Service (APNS) を通してアプリにメッセージを送信できます。

• Android アプリでは、Firebase コンソールや Google API コンソールから取得した API キーおよび送信者 ID を提供します。これらの認証情報により、Amazon Pinpoint は Firebase クラウドメッセージングまたはその前のバージョンの Google クラウドメッセージングを通してアプリにメッセージを送信できます。

認証情報をすでに持っている場合は、このセクションをスキップできます。

トピック• iOS プッシュ通知のセットアップ (p. 19)• Android プッシュ通知のセットアップ (p. 28)

iOS プッシュ通知のセットアップiOS アプリのプッシュ通知は Apple Push Notification Service (APNS) を使用して送信されます。iOS デバイスにプッシュ通知を送信するには、Apple 開発者ポータルでアプリ ID を作成する必要があり、必要な証明書を作成する必要があります。

このセクションでは、Apple 開発者ポータルを使用して iOS および APNS の認証情報を取得する方法を説明します。これらの認証情報により、AWS Mobile Hub で iOS プロジェクトを作成し、プッシュ通知を受け取るサンプルアプリを起動できます。

このセクションの手順を完了するのに既存の iOS アプリは必要ありません。Mobile Hub で iOS プロジェクトを作成した後、実働するサンプルアプリをダウンロードして起動できます。Mobile Hub はアプリが必要とする AWS リソースを自動的にプロビジョニングします。

このセクションの手順を完了したら、Apple 開発者アカウントに以下の項目が作成されます。

• アプリ ID。• SSL 証明書。これにより APNS を通してアプリにプッシュ通知を送信する権限が付与されます。

19

Page 24: Amazon Pinpoint - 開発者ガイド - AWS Documentation€¢ AWS SDK for Ruby バージョン 1.0.0.rc2 以降。 • AWS SDK for Go バージョン 1.5.13 以降。• AWS SDK for

Amazon Pinpoint 開発者ガイドプッシュ通知のセットアップ

• Apple 開発者アカウントへのテストデバイスの登録 (iPhone など)。• iOS ディストリビューション証明書。これによりテストデバイスにアプリケーションをインストールで

きます。• プロビジョニングプロファイル。これによりテストデバイス上でアプリを実行できます。

開始する前に、個人または組織の一部として Apple 開発者プログラムのアカウントを持っている必要があり、そのアカウントのエージェントまたは管理者権限を持っている必要があります。

このチュートリアルの手順は、以下のバージョンの Mac OS ソフトウェアに基づいています。

• OS X El Capitan バージョン 10.11.6• Xcode バージョン 8.1

トピック• ステップ 1: アプリ ID を作成する (p. 20)• ステップ 2: APN SSL 証明書の作成 (p. 22)• ステップ 3: テストデバイスの登録 (p. 25)• ステップ 4: iOS ディストリビューション証明書を作成する (p. 25)• ステップ 5: プロビジョニングプロファイルを作成する (p. 26)

ステップ 1: アプリ ID を作成する

Apple 開発者ポータルでアプリを識別するアプリ ID を作成します。プッシュ通知を送信するための SSL証明書を作成するとき、iOS ディストリビューション証明書を作成するとき、また、プロビジョニングプロファイルを作成するときに、この ID が必要になります。

アプリに割り当てられた ID が既にある場合、このステップは省略できます。ワイルドカード文字 (「*」)が含まれていなければ、既存のアプリ ID を使用できます。

アプリにアプリ ID を割り当てるには

1. https://developer.apple.com/membercenter/index.action から Apple 開発者アカウントにサインインします。

2. [Certificates, Identifiers & Profiles] を選択します。

3. [Identifiers] セクションで、[App IDs] を選択します。

20

Page 25: Amazon Pinpoint - 開発者ガイド - AWS Documentation€¢ AWS SDK for Ruby バージョン 1.0.0.rc2 以降。 • AWS SDK for Go バージョン 1.5.13 以降。• AWS SDK for

Amazon Pinpoint 開発者ガイドプッシュ通知のセットアップ

4. [iOS App IDs] ペインで、[Add] ボタン (+) を選択します。

5. [Registering an App ID] ペインで、[Name] に後で認識しやすいようなアプリ ID のカスタム名を入力します。

6. App ID プレフィックスでデフォルトの選択肢を選択します。7. [App ID Suffix] で、[Explicit App ID] を選択し、アプリのバンドル ID を入力します。アプリがすでに

存在する場合は、割り当てられているバンドル ID を使用します。この ID は Mac の Xcode にあるアプリプロジェクトにあります。それ以外の場合は、後で Xcode でアプリに割り当てるので、バンドルID をメモします。

8. [App Services] で、[Push Notifications] を選択します。

21

Page 26: Amazon Pinpoint - 開発者ガイド - AWS Documentation€¢ AWS SDK for Ruby バージョン 1.0.0.rc2 以降。 • AWS SDK for Go バージョン 1.5.13 以降。• AWS SDK for

Amazon Pinpoint 開発者ガイドプッシュ通知のセットアップ

9. [Continue] を選択します。[Confirm your App ID] ペインで、すべての値が正しく入力されていることを確認します。識別子がアプリ ID およびバンドル ID と一致している必要があります。

10. 新しいアプリ ID を登録するには、[Register] を選択します。

ステップ 2: APN SSL 証明書の作成

APN SSL 証明書を作成すると、APN を使用してアプリにプッシュ通知を配信できます。証明書を作成して、Apple 開発者アカウントからダウンロードします。次に、Keychain Access に証明書をインストールして、.p12 ファイルとしてエクスポートします。

アプリの SSL 証明書がすでにある場合は、この手順をスキップできます。

プッシュ通知の SSL 証明書を作成するには

1. https://developer.apple.com/membercenter/index.action から Apple 開発者アカウントにサインインします。

2. [Certificates, Identifiers & Profiles] を選択します。

3. [Identifiers] セクションで、[App IDs] を選択します。

22

Page 27: Amazon Pinpoint - 開発者ガイド - AWS Documentation€¢ AWS SDK for Ruby バージョン 1.0.0.rc2 以降。 • AWS SDK for Go バージョン 1.5.13 以降。• AWS SDK for

Amazon Pinpoint 開発者ガイドプッシュ通知のセットアップ

4. iOS アプリ ID のリストで、「ステップ 1: アプリ ID を作成する (p. 20)」で作成したアプリ ID を選択します。

5. [Edit] を選択します。

6. [Push Notifications] の [Production SSL Certificate] セクションで、[Create Certificate...] を選択します。

7. [About Creating a Certificate Signing Request (CSR)] ペインで、証明書署名リクエスト (CSR) ファイルを作成する手順に従います。Mac の Keychain Access アプリケーションを使用して、リクエストを作成し、ローカルディスクに保存します。終了したら、[Continue] を選択します。

8. [Generate your certificate] ペインで、[Choose File...] を選択し、作成した CSR ファイルを選択します。

9. [次へ] を選択します。10. 証明書の準備ができたら、[Download] を選択してコンピュータに証明書を保存します。

23

Page 28: Amazon Pinpoint - 開発者ガイド - AWS Documentation€¢ AWS SDK for Ruby バージョン 1.0.0.rc2 以降。 • AWS SDK for Go バージョン 1.5.13 以降。• AWS SDK for

Amazon Pinpoint 開発者ガイドプッシュ通知のセットアップ

11. ダウンロードした証明書をダブルクリックし、Mac の Keychain にインストールします。12. Mac で、Keychain Access アプリケーションを開始します。13. [My Certificates] で、追加した証明書を見つけます。「Apple Push Services:com.my.app.id」とい

う名前の証明書の com.my.app.id が、証明書が作成されたアプリ ID です。

14. プッシュ証明書をコンテキスト選択し、コンテキストメニューから [Export...] を選択して、証明書を含むファイルをエクスポートします。

15. 簡単に識別できる証明書の名前を入力して、証明書をコンピュータに保存します。プロンプトが表示されたら、エクスポートパスワードを指定しないでください。 AWS Mobile Hub でアプリを作成するときに、この証明書をアップロードする必要があります。

24

Page 29: Amazon Pinpoint - 開発者ガイド - AWS Documentation€¢ AWS SDK for Ruby バージョン 1.0.0.rc2 以降。 • AWS SDK for Go バージョン 1.5.13 以降。• AWS SDK for

Amazon Pinpoint 開発者ガイドプッシュ通知のセットアップ

ステップ 3: テストデバイスの登録

テストデバイスを Apple 開発者アカウントで登録すると、そのデバイスでアプリをテストできます。後で、このテストデバイスをプロビジョニングプロファイルと関連付けることができま、これにより、アプリをデバイスで起動できます。

登録済みデバイスが既にある場合、このステップは省略できます。

デバイスを追加するには

1. https://developer.apple.com/membercenter/index.action から Apple 開発者アカウントにサインインします。

2. [Certificates, Identifiers & Profiles] を選択します。

3. [Devices] セクションで、追加するデバイスタイプを選択します ([iPhone] など)。4. [Add] ボタン (+) を選択します。5. [Register Device] セクションで、[Name] に、後で簡単に認識できる名前を入力します。6. [UDID] には、一意のデバイス ID を入力します。iPhone の場合、次の手順を実行することで UDID が

分かります。

a. iPhone を Mac に USB ケーブルで接続します。b. iTunes アプリを開きます。c. iTunes ウィンドウの左上隅に、iPhone のアイコンのボタンが表示されます。このボタンを選択

します。iTunes に iPhone の概要ページが表示されます。d. 上部のボックスで、概要ページには、iPhone の [Capacity]、[Phone Number]、および [Serial

Number] が表示されます。[Serial Number] をクリックすると、値が [UDID] に変わります。e. UDID を範囲選択し、[Copy] を選択します。f. Apple の Developer ウェブサイトで UDID を [UDID] フィールドに貼り付けます。

7. [次へ] を選択します。8. [Review and register] ペインで、デバイスの詳細を確認し、[Register] を選択します。ご使用のデバイ

ス名と識別子がデバイスのリストに追加されます。

ステップ 4: iOS ディストリビューション証明書を作成する

iOS ディストリビューション証明書により、テストデバイスにアプリケーションをインストールし、そのデバイスにプッシュ通知を配信できます。後で iOS ディストリビューション証明書を指定するときは、アプリケーションのプロビジョニングプロファイルを作成するときに指定します。

25

Page 30: Amazon Pinpoint - 開発者ガイド - AWS Documentation€¢ AWS SDK for Ruby バージョン 1.0.0.rc2 以降。 • AWS SDK for Go バージョン 1.5.13 以降。• AWS SDK for

Amazon Pinpoint 開発者ガイドプッシュ通知のセットアップ

iOS ディストリビューション証明書がすでにある場合は、この手順をスキップできます。

iOS ディストリビューション証明書を作成するには

1. Apple 開発者アカウントの [Certificates, Identifiers & Profiles] ページの [Certificates section] で、[Production] を選択します。

2. [iOS Certificates (Production)] ペインで、[追加] ボタン (+) を選択します。[Add iOS Certificate] ペインが表示されます。

3. [Production] セクションで、[App Store and Ad Hoc]、[Continue] の順に選択します。4. [About Creating a Certificate Signing Request (CSR)] ページで、[Continue] を選択します。5. [About Creating a Certificate Signing Request (CSR)] ペインで、証明書署名リクエスト (CSR) ファイ

ルを作成する手順に従います。Mac の Keychain Access アプリケーションを使用して、リクエストを作成し、ローカルディスクに保存します。終了したら、[Continue] を選択します。

6. [Generate your certificate] ペインで、[Choose File...] を選択し、作成した CSR ファイルを選択します。

7. [次へ] を選択します。8. 証明書の準備ができたら、[Download] を選択してコンピュータに証明書を保存します。9. ダウンロードした証明書をダブルクリックし、それを Mac の Keychain にインストールします。

ステップ 5: プロビジョニングプロファイルを作成する

プロビジョニングプロファイルにより、テストデバイス上でアプリを実行できます。Apple 開発者アカウントでプロビジョニングプロファイルを作成してダウンロードし、プロビジョニングプロファイルをXcode にインストールします。

プロビジョニングプロファイルを作成するには

1. https://developer.apple.com/membercenter/index.action から Apple 開発者アカウントにサインインします。

2. [Certificates, Identifiers & Profiles] を選択します。

26

Page 31: Amazon Pinpoint - 開発者ガイド - AWS Documentation€¢ AWS SDK for Ruby バージョン 1.0.0.rc2 以降。 • AWS SDK for Go バージョン 1.5.13 以降。• AWS SDK for

Amazon Pinpoint 開発者ガイドプッシュ通知のセットアップ

3. [Provisioning Profiles] セクションで、[Distribution] を選択します。4. [iOS Provisioning Profiles (Distribution)] ペインで、追加ボタン (+) を選択します。[Add iOS

Provisioning Profiles (Distribution)] ペインが表示されます。

5. [Distribution] セクションで、[Ad Hoc]、[Continue] の順に選択します。

6. [App ID] で、アプリ用に作成したアプリ ID を選択し、[Continue] を選択します。

7. iOS 開発証明書を選択し、[Continue] を選択します。

27

Page 32: Amazon Pinpoint - 開発者ガイド - AWS Documentation€¢ AWS SDK for Ruby バージョン 1.0.0.rc2 以降。 • AWS SDK for Go バージョン 1.5.13 以降。• AWS SDK for

Amazon Pinpoint 開発者ガイドプッシュ通知のセットアップ

8. [Select devices] では、テスト用に登録したデバイスを選択し [Continue] を選択します。9. このプロビジョニングプロファイルの名前 (ApnsDistributionProfile など) を入力し、

[Continue] を選択します。10. [Download] を選択して生成されたプロビジョニングプロファイルをダウンロードします。11. ダウンロードしたファイルをダブルクリックしてプロビジョニングプロファイルをインストールしま

す。そうすると、Xcode アプリが開きます。12. プロビジョニングプロファイルがインストールされていることを確認するには、以下の方法で Xcode

でインストールされているプロビジョニングプロファイルのリストを確認します。

a. Xcode メニューバーで、[Xcode]、[Preferences] の順に選択します。b. プリファレンスウインドウで、[Accounts] を選択します。c. [Accounts] タブを選択後、Apple ID を選択し、[View Details] を選択します。d. [Provisioning Profiles] のセクションにプロビジョニングプロファイルが表示されていることを確

認します。

Android プッシュ通知のセットアップこのセクションでは、Android アプリにプッシュ通知を送信するのに必要な認証情報を取得する方法を説明します。Android でプッシュ通知に使用できるプラットフォーム通知サービスは、Firebase クラウドメッセージング (FCM) とその前のバージョンである Google クラウドメッセージング (GCM) です。FCMまたは GCM の認証情報により、AWS Mobile Hub に Android プロジェクトを作成し、プッシュ通知を受け取るサンプルアプリを起動できます。

このセクションの手順を完了するのに既存の Android アプリは必要ありません。Mobile Hub で Android プロジェクトを作成した後、実働するサンプルアプリをダウンロードして起動できます。Mobile Hub はアプリが必要とする AWS リソースを自動的にプロビジョニングします。

トピック• ステップ 1: Firebase プロジェクトを作成します。 (p. 28)• ステップ 2: Android のプッシュメッセージの認証情報を取得する (p. 29)

ステップ 1: Firebase プロジェクトを作成します。

Android アプリにプッシュ通知を送信するには、Android プッシュ通知サービスが有効になっているプロジェクトを持っている必要があります。Android のプッシュ通知サービスは Firebase クラウドメッセージング (FCM) およびその前のバージョンの Google クラウドメッセージング (GCM) です。

Android でのプッシュメッセージを初めて利用する場合は、このトピックで説明している通り Firebaseプロジェクトを作成する必要があります。ただし、プッシュメッセージが有効な既存の Google クラウドメッセージング プロジェクトがある場合は、この手順をスキップして、そのプロジェクトを代わりに使用します。

Firebase プロジェクトを作成するには

1. https://console.firebase.google.com/ で、Firebase コンソールに移動します。Google にサインインしていない場合は、リンクはサインインページにつながります。サインインした後、Firebase コンソールが表示されます。

2. [Create New Project] を選択します。

28

Page 33: Amazon Pinpoint - 開発者ガイド - AWS Documentation€¢ AWS SDK for Ruby バージョン 1.0.0.rc2 以降。 • AWS SDK for Go バージョン 1.5.13 以降。• AWS SDK for

Amazon Pinpoint 開発者ガイドプッシュ通知のセットアップ

3. プロジェクトの名前を入力し、[Create Project] を選択します。

Firebase プロジェクトは、デフォルトでプッシュメッセージをサポートします。

ステップ 2: Android のプッシュメッセージの認証情報を取得する

Android アプリにプッシュ通知を送信するには、Firebase クラウドメッセージング (FCM)、またはその前のバージョンの Google クラウドメッセージング (GCM) のいずれかからの認証情報が必要です。認証情報は、API キーと送信者 ID (プロジェクト番号とも呼ばれる) です。有効なプッシュメッセージがあるプロジェクトから、これらの認証情報を取得します。作成する場所に応じて、プロジェクトは Firebase コンソールまたは Google Cloud Platform コンソールのいずれかにあります。

このトピックでは、FCM または GCM から認証情報を取得する方法について説明しています。新しいAndroid アプリに FCM を使用します。FCM をサポートするように更新されていない、既存の GCM プロジェクトがある場合にのみ GCM を使用します。

FCM から認証情報を取得するには

1. https://console.firebase.google.com/ で、Firebase コンソールに移動して、プロジェクトを開きます。2. 左側のペインで、プロジェクト名の右側にある歯車アイコンを選択して、[Project Settings] を選択し

ます。

29

Page 34: Amazon Pinpoint - 開発者ガイド - AWS Documentation€¢ AWS SDK for Ruby バージョン 1.0.0.rc2 以降。 • AWS SDK for Go バージョン 1.5.13 以降。• AWS SDK for

Amazon Pinpoint 開発者ガイドプッシュ通知のセットアップ

3. トップメニューで、[Cloud Messaging] を選択します。

4. [Project credentials] で、API キーと送信者 ID を見つけます。これらの値を、後でアクセスできる場所に保存できます。

GCM から認証情報を取得するには

1. https://console.developers.google.com で、Google API コンソールに移動します。2. 左のペインで、[Credentials] を選択します。3. アプリの認証情報がすでに存在する場合、サーバーのキーは、[API keys] に表示されています。後で

アクセスできる場所に、このキーを保存します。4. アプリの認証情報がない場合は、コンソールに [Credentials] ダイアログボックスが表示されます。以

下の手順を実行して、サーバーのキーを作成します。

a. [Create credentials] を選択します。b. 後でアクセスできる場所に、API キーを保存します。

5. 送信者 ID (プロジェクト番号とも呼ばれる) を取得するには、https://console.cloud.google.com/ でGoogle Cloud Platform コンソールに移動します。[Project] メニューからプロジェクトを選択します。次に、プロジェクト名の横にある矢印を選択します。

6. 表示されたプロジェクト番号を、後でアクセスできる場所に保存します。

Note

プロジェクト番号は送信者 ID の別の名前です。

30

Page 35: Amazon Pinpoint - 開発者ガイド - AWS Documentation€¢ AWS SDK for Ruby バージョン 1.0.0.rc2 以降。 • AWS SDK for Go バージョン 1.5.13 以降。• AWS SDK for

Amazon Pinpoint 開発者ガイドプッシュ通知の処理

プッシュ通知の処理以下のトピックでは、Amazon Pinpoint によって送信されたプッシュ通知を受信するように iOS アプリを変更する方法について説明します。

トピック• Apple プッシュ通知サービスからのプッシュ通知を処理する (p. 31)• Google クラウドメッセージング または Firebase クラウドメッセージング からのプッシュ通知の処

理 (p. 32)• Amazon Device Messaging からのプッシュ通知の処理 (p. 34)• Baidu Cloud Push からのプッシュ通知を処理する (p. 35)

Apple プッシュ通知サービスからのプッシュ通知を処理するiOS アプリケーションで Amazon Pinpoint を使用して送信するプッシュ通知の受信を有効にすることができます。Amazon Pinpoint では、Apple Push Notification Service (APNs) を介して iOS アプリケーションにプッシュ通知を送信できます。

前提条件

プッシュ通知を受信するようにアプリケーションを更新する前に、AWS Mobile SDK for iOSを統合します。詳細については、「Android あるいは iOS 用 AWS Mobile SDK を統合する (p. 4)」を参照してください。

プッシュ通知の有効化

アプリケーションでプッシュ通知を有効にするには、プッシュリッスンコードを含むようにアプリケーションを更新します。詳細については、「Amazon Pinpoint でモバイルアプリにプッシュ通知を追加する (Add Push Notifications to Your Mobile App with Amazon Pinpoint)」を「AWS モバイル開発者ガイド(AWS Mobile Developer Guide)」でご覧ください。

ディープリンクのセットアップ

ユーザーが通知をタップしたときに、Amazon Pinpoint キャンペーンは 3 つのアクションのいずれかを実行できます。可能なアクションの 1 つは、指定されたアクティビティにアプリを開くディープリンクです。

カスタム URL スキームの登録

ディープリンクの送信先のアクティビティを指定するには、アプリにディープリンクをセットアップする必要があります。このセットアップで、ディープリンクが使用するカスタム URL スキームを登録する必要があります。カスタム URL の識別子を登録するには、Xcode プロジェクトのターゲットの [Info] タブに移動して、[URL Types] セクションを展開します。

pinpoint://URL スキームを介してアプリを開くには、スキームに一意の識別子を割り当てる必要があります。プラットフォーム上で名前の競合を避けるため、Apple は、逆引き DNS 表記を推奨しています。次の例では com.exampleCorp.exampleApp を使用しています。

Xcode でカスタム URL スキームを登録するには。

1. Xcode で、[Info] タブを選択します。

31

Page 36: Amazon Pinpoint - 開発者ガイド - AWS Documentation€¢ AWS SDK for Ruby バージョン 1.0.0.rc2 以降。 • AWS SDK for Go バージョン 1.5.13 以降。• AWS SDK for

Amazon Pinpoint 開発者ガイドプッシュ通知の処理

2. [URL Types] セクションで、+ を選択して URL タイプを追加します。

3. この URL タイプの逆引き DNS 表記の識別子を [Identifier] に入力します。4. アプリに使用する URL を [URL Schemes] に入力します。5. プロジェクトを保存します。

このカスタム URL スキームが登録された後で、iOS シミュレーターでテストします。Safari を開き、カスタム URL に移動します。この例では、pinpoint:// です。アプリケーションが起動し、ホーム画面が開きます。

カスタム URL のリッスン

アプリケーションを特定の表示に誘導するには、ディープリンクからアプリケーションを起動するときに呼び出される AppDelegate で、コールバックを実装します。スキームは、ホストとパスを使用してアプリを起動し、アプリ内の別の画面に移動します。

Google クラウドメッセージング または Firebase クラウドメッセージング からのプッシュ通知の処理Android または iOS アプリケーションで Amazon Pinpoint を使用して送信するプッシュ通知の受信を有効にすることができます。Amazon Pinpoint では、Firebase クラウドメッセージング (FCM)、またはその前身である Google クラウドメッセージング (GCM) を通じてプッシュ通知を送信できます。

前提条件

プッシュ通知を受信するようにアプリケーションを更新する前に、AWS Mobile SDK for Androidを統合します。詳細については、「Android あるいは iOS 用 AWS Mobile SDK を統合する (p. 4)」を参照してください。

32

Page 37: Amazon Pinpoint - 開発者ガイド - AWS Documentation€¢ AWS SDK for Ruby バージョン 1.0.0.rc2 以降。 • AWS SDK for Go バージョン 1.5.13 以降。• AWS SDK for

Amazon Pinpoint 開発者ガイドプッシュ通知の処理

プッシュ通知の有効化アプリケーションでプッシュ通知を有効にするには、プッシュリッスンコードを含むようにアプリケーションを更新します。詳細については、「Amazon Pinpoint でモバイルアプリにプッシュ通知を追加する (Add Push Notifications to Your Mobile App with Amazon Pinpoint)」を「AWS モバイル開発者ガイド(AWS Mobile Developer Guide)」でご覧ください。

ディープリンクのセットアップユーザーが通知をタップしたときに、Amazon Pinpoint キャンペーンは 3 つのアクションのいずれかを実行できます。可能なアクションの 1 つは、指定されたアクティビティにアプリを開くディープリンクです。

ディープリンクの送信先のアクティビティを指定するには、アプリにディープリンクをセットアップする必要があります。このセットアップでは、ディープリンクが使用する URL スキームを登録するインテントフィルタが必要です。アプリがインテントフィルタを作成した後、インテントが提供するデータによってレンダリングに使用するアクティビティが決まります。

インテントフィルタの作成

AndroidManifest.xml ファイルにインテントフィルタを作成して、ディープリンクのセットアップを開始します。以下に例を示します。

<!-- This activity allows your application to receive a deep link that navigates directly to the "Deeplink Page"--><activity android:name=".DeepLinkActivity" android:label="A deeplink!" > <intent-filter android:label="inAppReceiver"> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <!-- Accepts URIs of type "pinpoint://deeplink" --> <data android:scheme="pinpoint" android:host="deeplink" /> </intent-filter></activity>

前の例のデータ要素は、URL スキーム、pinpoint://、ホスト、deeplink を登録します。その結果、pinpoint://deeplink の形式で URL が与えられると、アクションを実行するマニフェストが準備されます。

インテントの処理

次に、登録された URL スキームとホストに関連付けられた画面を示すインテントハンドラをセットアップします。インテントデータは onCreate() メソッドで取得され、Uri data をアクティビティの作成に使用できます。次の例では、アラートとイベントの追跡を示します。

public class DeeplinkActivity extends Activity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (getIntent().getAction() == Intent.ACTION_VIEW) { Uri data = getIntent().getData(); if (data != null) { // show an alert with the "custom" param new AlertDialog.Builder(this)

33

Page 38: Amazon Pinpoint - 開発者ガイド - AWS Documentation€¢ AWS SDK for Ruby バージョン 1.0.0.rc2 以降。 • AWS SDK for Go バージョン 1.5.13 以降。• AWS SDK for

Amazon Pinpoint 開発者ガイドプッシュ通知の処理

.setTitle("An example of a Deeplink") .setMessage("Found custom param: " +data.getQueryParameter("custom")) .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }) .setIcon(android.R.drawable.ic_dialog_alert) .show(); } } }}

Amazon Device Messaging からのプッシュ通知の処理Amazon Device Messaging (ADM) は、Kindle Fire タブレットなどの Amazon デバイスで実行中のアプリにプッシュ通知を送信するために使用されるサービスです。ADM をアプリに統合することで、AmazonPinpoint を使用して、ADM モバイルプッシュチャネルを通じてアプリに通知を送信できます。

前提条件

Amazon Pinpoint および ADM を使用してアプリにプッシュ通知を送信するには、以下が必要です。

• Amazon 開発者アカウント。• Amazon Device Messaging からのクライアント ID およびクライアントシークレット。• ADM 登録 ID (ADM プラットフォームを含むエンドデバイスによって提供)。

また、開始する前に、AWS Mobile SDK for Android も統合する必要があります。詳細については、「AWS Mobile SDK または JavaScript ライブラリをアプリケーションに統合する (p. 4)」を参照してください。

アプリと ADM との統合ADM および ADM 認証情報に既に精通している場合は、Amazon 開発者ドキュメントの「Amazon DeviceMessaging とアプリの統合」のステップに従うことができます。それ以外の場合、ADM の概要については、「Amazon Device Messaging について」を参照してください。

Amazon Pinpoint と統合するには、com.amazon.device.messaging.ADMMessageHandlerBase のサブクラスの実装には次のメソッドが含まれていて、対応する呼び出しを実行する必要があります。

onRegistered

デバイスが ADM サービスに登録されているときに呼び出されます。Amazon Pinpoint にデバイスを登録するために必要な ADM 登録 ID を提供します。このメソッドの一部として次の呼び出しを含めます。

pinpointManager.getNotificationClient().registerDeviceToken(registrationId)

onUnregistered

デバイスが ADM サービスに登録されなくなったときに呼び出されます。onMessage

デバイスが ADM からメッセージ通知を受信すると呼び出されます。このメソッドの一部として以下を含めます。

34

Page 39: Amazon Pinpoint - 開発者ガイド - AWS Documentation€¢ AWS SDK for Ruby バージョン 1.0.0.rc2 以降。 • AWS SDK for Go バージョン 1.5.13 以降。• AWS SDK for

Amazon Pinpoint 開発者ガイドプッシュ通知の処理

NotificaitonDetails details = NotificationDetailsBuilder.builder() .intent(intent); .intentAction(NotificationClient.ADM_INTENT_ACTION) .build();

pinpointManager.getNotificationClient().handleCampaignPush(details)

ADM プッシュ通知のテスト

テストするには、Amazon Pinpoint プロジェクト、ADM クライアント ID、および ADM クライアントシークレットが必要です。

開始する前に、登録後にデバイストークンを表示するようにアプリを補強します。デバイストークンは、以下を呼び出して取得できます。

pinpointManager.getNotificationClient().getDeviceToken()

AWS CLI を使用して以下のステップを完了します。

ADM プッシュ通知をテストするには

1. Amazon Pinpoint プロジェクトでチャネルとして ADM を登録します。ADM クライアント ID およびADM クライアントシークレットを指定します。

aws pinpoint update-adm-channel --application-id [YourPinpointAppId] --adm-channel-request "{ \"ClientId\": \"ADM_CLIENT_ID", \"Enabled\": true, \"ClientSecret\": \"ADM_CLIENT_SECRET"}"

2. ADM が有効になっているデバイスにアプリをインストールし、生成されたデバイストークンをキャプチャします。

3. デバイストークンをアドレスとして指定して、デバイスに直接的なメッセージを送信します。

aws pinpoint send-messages --application-id YourPinpointAppId --message-request "{ \"Addresses\": { \"DeviceToken\": { \"ChannelType\": \"ADM\" } }, \"MessageConfiguration\": { \"ADMMessage\": { \"RawContent\":\"{'pinpoint.campaign.campaign_id':'_DIRECT','pinpoint.notification.silentPush':0,'pinpoint.openApp':true,'pinpoint.notification.title':'Hello','pinpoint.notification.body':'Hello World.'}\" } }}"

Baidu Cloud Push からのプッシュ通知を処理するBaidu Cloud Push は、中国のクラウドサービスである Baidu により提供されているプッシュ通知サービスです。Baidu Cloud Push をモバイルアプリと統合することで、Amazon Pinpoint を使用して Baidu モバイルプッシュチャネルを通じて通知をアプリに送信できます。

35

Page 40: Amazon Pinpoint - 開発者ガイド - AWS Documentation€¢ AWS SDK for Ruby バージョン 1.0.0.rc2 以降。 • AWS SDK for Go バージョン 1.5.13 以降。• AWS SDK for

Amazon Pinpoint 開発者ガイドプッシュ通知の処理

前提条件

Amazon Pinpoint と Baidu を使用してモバイルデバイスにプッシュ通知を送信するには、以下のものが必要です。

• Baidu アカウント• Baidu 開発者としての登録• Baidu Cloud Push プロジェクト• Baidu Cloud Push プロジェクトからの API キーおよびシークレットキー• Baidu ユーザー ID およびチャネル ID

また、開始する前に、AWS Mobile SDK for Android も統合する必要があります。詳細については、「AWS Mobile SDK または JavaScript ライブラリをアプリケーションに統合する (p. 4)」を参照してください。

Baidu Cloud Push とアプリを統合する

次の手順は、Baidu プッシュサービス jar のバージョン 5.7.1.65 に基づいています。

Baidu をアプリに統合するには

1. 最新の Baidu Cloud Push SDK Android クライアントを http://push.baidu.com/ からダウンロードします。

2. zip ファイルを抽出して pushservice-x.x.xx.jar ファイルを Baidu-Push-SDK-Android libsフォルダから Android アプリの lib フォルダにインポートします。

3. Baidu-Push-SDK-Android libs フォルダには次のフォルダも含まれてます。

• arm64-v8a/

• armeabi/

• armeabi-v7a/

• mips/

• mips64/

• x86/

• x86_64/

完全な各フォルダを Android アプリの src/main/jniLibs フォルダに追加します。4. Android アプリの AndroidManifest.xml ファイルで、以下のアクセス権限を宣言します。

<uses-permission android:name="android.permission.INTERNET" /><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /><uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

<!-- Baidu permissions --><uses-permission android:name="android.permission.WAKE_LOCK"/><uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />

<uses-permission android:name="android.permission.READ_PHONE_STATE" /><uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /><uses-permission android:name="android.permission.WRITE_SETTINGS" /><uses-permission android:name="android.permission.VIBRATE" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.ACCESS_DOWNLOAD_MANAGER" /><uses-permission android:name="android.permission.DOWNLOAD_WITHOUT_NOTIFICATION" />

36

Page 41: Amazon Pinpoint - 開発者ガイド - AWS Documentation€¢ AWS SDK for Ruby バージョン 1.0.0.rc2 以降。 • AWS SDK for Go バージョン 1.5.13 以降。• AWS SDK for

Amazon Pinpoint 開発者ガイドプッシュ通知の処理

<uses-permission android:name="android.permission.DISABLE_KEYGUARD" />

5. <application> で、次のレシーバーとインテントフィルタを指定します。

<!-- Baidu settings --><receiver android:name="com.baidu.android.pushservice.PushServiceReceiver" android:process=":bdservice_v1"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> <action android:name="com.baidu.android.pushservice.action.notification.SHOW" /> <action android:name="com.baidu.android.pushservice.action.media.CLICK" /> <!-- ########action########service########## --> <action android:name="android.intent.action.MEDIA_MOUNTED" /> <action android:name="android.intent.action.USER_PRESENT" /> <action android:name="android.intent.action.ACTION_POWER_CONNECTED" /> <action android:name="android.intent.action.ACTION_POWER_DISCONNECTED" /> </intent-filter></receiver><receiver android:name="com.baidu.android.pushservice.RegistrationReceiver" android:process=":bdservice_v1"> <intent-filter> <action android:name="com.baidu.android.pushservice.action.METHOD" /> <action android:name="com.baidu.android.pushservice.action.BIND_SYNC" /> </intent-filter> <intent-filter> <action android:name="android.intent.action.PACKAGE_REMOVED" />

<data android:scheme="package" /> </intent-filter></receiver>

<service android:name="com.baidu.android.pushservice.PushService" android:exported="true" android:process=":bdservice_v1"> <intent-filter> <action android:name="com.baidu.android.pushservice.action.PUSH_SERVICE" /> </intent-filter></service><service android:name="com.baidu.android.pushservice.CommandService" android:exported="true" /><!-- Amazon Pinpoint Notification Receiver --><receiver android:name="com.amazonaws.mobileconnectors.pinpoint.targeting.notification.PinpointNotificationReceiver"> <intent-filter> <action android:name="com.amazonaws.intent.baidu.NOTIFICATION_OPEN" /> </intent-filter></receiver>

6. AndroidManifest.xml ファイルを、アプリケーションに固有の次のアクセス権限で更新します。YourPackageName は自分のパッケージの名前に置き換えてください。

<!-- ##Android N#####ContentProvider###############--><uses-permission android:name="baidu.push.permission.WRITE_PUSHINFOPROVIDER.YourPackageName" /><permission android:name="baidu.push.permission.WRITE_PUSHINFOPROVIDER.YourPackageName" android:protectionLevel="normal"></permission> <!-- ##Android N#####ContentProvider############--><provider android:name="com.baidu.android.pushservice.PushInfoProvider"

37

Page 42: Amazon Pinpoint - 開発者ガイド - AWS Documentation€¢ AWS SDK for Ruby バージョン 1.0.0.rc2 以降。 • AWS SDK for Go バージョン 1.5.13 以降。• AWS SDK for

Amazon Pinpoint 開発者ガイドプッシュ通知の処理

android:authorities="YourPackageName.bdpush" android:exported="true" android:protectionLevel="signature" android:writePermission="baidu.push.permission.WRITE_PUSHINFOPROVIDER.YourPackageName" />

7. Android アプリケーション内で、com.baidu.android.pushservice.PushMessageReceiver をサブクラスに持つ MessageReceiver クラスを作成します。サブクラスでは、次のメソッドを実装し、対応する呼び出しを実行する必要があります。

onBind

デバイスが Baidu Cloud Push に登録されているときに呼び出されます。デバイスを AmazonPinpoint に登録するのに必要な Baidu ユーザー ID とチャネル ID を提供します。このメソッドの一部として次の呼び出しを含めます。

pinpointManager.getNotificationClient().registerDeviceToken(registrationId)

onUnbind

デバイスが Baidu Cloud Push に登録されなくなったときに呼び出されます。onMessage

デバイスが Baidu Cloud Push から raw メッセージを受信すると呼び出されます。AmazonPinpoint は、Baidu Cloud Push raw メッセージ形式のキャンペーンプッシュ通知を送信します。このメソッドの一部として次の呼び出しを含めます。

NotificaitonDetails details = NotificationDetailsBuilder.builder() .message(message); .intentAction(NotificationClient.BAIDU_INTENT_ACTION) .build();

pinpointManager.getNotificationClient().handleCampaignPush(details)

メッセージパラメータにのみデータが含まれます。customContentString は、raw メッセージには使用されません。

8. サブクラスを作成した後、AndoriodManifest.xml ファイルを変更してレシーバーとして登録します。次の例では、PushMessageReceiver サブクラスの名前はcom.baidu.push.example.MyPushMessageReceiver です。

<!-- push######receiver## --><receiver android:name="com.baidu.push.example.MyPushMessageReceiver"> <intent-filter> <!-- ##push## --> <action android:name="com.baidu.android.pushservice.action.MESSAGE" /> <!-- ##bind,unbind,fetch,delete##### --> <action android:name="com.baidu.android.pushservice.action.RECEIVE" /> <action android:name="com.baidu.android.pushservice.action.notification.CLICK" /> </intent-filter></receiver>

9. Baidu リスナーサービスを開始するには、Android アプリのメインアクティビティで、次のコードをonCreate メソッドに追加します。

// Push: #apikey###########Activity#onCreate##// ## ATTENTION#You need to modify the value of api_key to your own !!// ####push

38

Page 43: Amazon Pinpoint - 開発者ガイド - AWS Documentation€¢ AWS SDK for Ruby バージョン 1.0.0.rc2 以降。 • AWS SDK for Go バージョン 1.5.13 以降。• AWS SDK for

Amazon Pinpoint 開発者ガイドプッシュ通知の処理

PushManager.startWork(getApplicationContext(), PushConstants.LOGIN_TYPE_API_KEY, api_key);

// Push: #############API##########################// ##############->#####->##############1#// ###### PushManager.setNotificationBuilder(this, 1, cBuilder)#########CustomPushNotificationBuilder cBuilder = new CustomPushNotificationBuilder( getResources().getIdentifier("notification_custom_builder", "layout", getPackageName()), getResources().getIdentifier("notification_icon", "id", getPackageName()), getResources().getIdentifier("notification_title", "id", getPackageName()), getResources().getIdentifier("notification_text", "id", getPackageName()));cBuilder.setNotificationFlags(Notification.FLAG_AUTO_CANCEL);cBuilder.setNotificationDefaults(Notification.DEFAULT_VIBRATE);

cBuilder.setStatusbarIcon(this.getApplicationInfo().icon);cBuilder.setLayoutDrawable(getResources().getIdentifier( "simple_notification_icon", "drawable", getPackageName()));cBuilder.setNotificationSound(Uri.withAppendedPath( Audio.Media.INTERNAL_CONTENT_URI, "6").toString());// ##################IDPushManager.setNotificationBuilder(this, 1, cBuilder);

10. 必ず、PinpointManager 参照を適切に初期化してください。ChannelType 値がChannelType.BAIDU の PinpointConfiguration を使用します。これは、次の例に示すようにプログラムにより行うことができます。

final PinpointConfiguration config = new PinpointConfiguration(this, IdentityManager.getDefaultIdentityManager() .getCredentialsProvider(), awsConfiguration) .withChannelType(ChannelType.BAIDU);Application.pinpointManager = new PinpointManager(config);

または、AWSConfiguration が使用する設定ファイルを定義できます。

"PinpointAnalytics": { "Default": { "AppId": "[YourPinpointAppId]", "Region": "us-east-1", "ChannelType": "BAIDU" } }

Baidu プッシュ通知のテストテストするには、Amazon Pinpoint プロジェクト、Baidu API キー、Baidu シークレットキーが必要です。

開始する前に、登録後にデバイストークンを表示するようにアプリを補強します。デバイストークンは、以下を呼び出して取得できます。

PinpointManager::getNotificationClient().getDeviceToken()

AWS CLI を使用して以下のステップを完了します。

Baidu プッシュ通知をテストするには

1. チャンネルとして Baidu を Amazon Pinpoint プロジェクトに登録します。Baidu API キーおよびシークレットキーを入力します。

39

Page 44: Amazon Pinpoint - 開発者ガイド - AWS Documentation€¢ AWS SDK for Ruby バージョン 1.0.0.rc2 以降。 • AWS SDK for Go バージョン 1.5.13 以降。• AWS SDK for

Amazon Pinpoint 開発者ガイドプッシュ通知の処理

aws pinpoint update-baidu-channel --application-id YourPinpointAppId --baidu-channel-request "{ \"ApiKey\": \"BAIDU_API_KEY\", \"Enabled\": true, \"SecretKey\": \"BAIDU_SECRET_KEY\" }"

2. Baidu が有効になっているデバイスにアプリをインストールし、生成されたデバイストークンをキャプチャします。

3. デバイストークンをアドレスとして指定して、デバイスに直接的なメッセージを送信します。

aws pinpoint send-messages --application-id YourPinpointAppId --message-request "{ \"Addresses\": { \"DeviceToken\": { \"ChannelType\": \"BAIDU\" } }, \"MessageConfiguration\": { \"BaiduMessage\": { \"RawContent\":\"{'pinpoint.campaign.campaign_id':'_DIRECT','pinpoint.notification.silentPush':0,'pinpoint.openApp':true,'pinpoint.notification.title':'Hello','pinpoint.notification.body':'Hello World.'}\" } }}"

40

Page 45: Amazon Pinpoint - 開発者ガイド - AWS Documentation€¢ AWS SDK for Ruby バージョン 1.0.0.rc2 以降。 • AWS SDK for Go バージョン 1.5.13 以降。• AWS SDK for

Amazon Pinpoint 開発者ガイドプログラムでエンドポイントを追加する

エンドポイントの追加エンドポイントは一意のメッセージ送信先です。Amazon Pinpoint を使用してメッセージを送信すると、エンドポイントに送信されます。エンドポイントの例には、E メールアドレス、携帯電話番号、モバイルデバイス識別子が含まれます。

エンドポイントに属性を追加してユーザーをより良く説明することができます。エンドポイントをAmazon Pinpoint に追加すると、顧客属性に基づいてセグメントを作成し、次にカスタムメッセージを送信することでセグメントを取り込むことができます。

エンドポイントとユーザー ID を関連付けて個別のユーザーを識別できます。また、複数のエンドポイントと単一のユーザー ID を関連付けることができます。

お客様がモバイル開発者であり、Amazon Pinpoint をアプリに統合した場合、新しいユーザーがアプリを開き、リピートユーザーが開いて既存のエンドポイントを更新したとき、アプリは自動的にエンドポイントを Amazon Pinpoint で登録します。Amazon Pinpoint API または AWS SDK を使用してプログラムでエンドポイントを追加することもできます。

詳細については、Amazon Pinpoint API リファレンスの「エンドポイント」を参照してください。

プログラムでエンドポイントを追加する次の例では、AWS SDK for Java を使用してプログラムで Amazon Pinpoint にエンドポイントを追加する方法について説明します。

import com.amazonaws.services.pinpoint.AmazonPinpointClient;import com.amazonaws.services.pinpoint.model.EndpointDemographic;import com.amazonaws.services.pinpoint.model.EndpointLocation;import com.amazonaws.services.pinpoint.model.EndpointRequest;import com.amazonaws.services.pinpoint.model.EndpointResponse;import com.amazonaws.services.pinpoint.model.EndpointUser;import com.amazonaws.services.pinpoint.model.GetEndpointRequest;import com.amazonaws.services.pinpoint.model.GetEndpointResult;import com.amazonaws.services.pinpoint.model.UpdateEndpointRequest;import com.amazonaws.services.pinpoint.model.UpdateEndpointResult;

import java.util.ArrayList;import java.util.Date;import java.util.HashMap;import java.util.List;import java.util.Map;import java.util.UUID;

public class PinpointEndpointSample {

public EndpointResponse createEndpoint(AmazonPinpointClient client, String appId) { String endpointId = UUID.randomUUID().toString(); System.out.println("Endpoint ID: " + endpointId);

EndpointRequest endpointRequest = createEndpointRequestData();

UpdateEndpointRequest updateEndpointRequest = new UpdateEndpointRequest() .withApplicationId(appId) .withEndpointId(endpointId) .withEndpointRequest(endpointRequest);

UpdateEndpointResult updateEndpointResponse = client.updateEndpoint(updateEndpointRequest);

41

Page 46: Amazon Pinpoint - 開発者ガイド - AWS Documentation€¢ AWS SDK for Ruby バージョン 1.0.0.rc2 以降。 • AWS SDK for Go バージョン 1.5.13 以降。• AWS SDK for

Amazon Pinpoint 開発者ガイドプログラムでエンドポイントを追加する

System.out.println("Update Endpoint Response: " + updateEndpointResponse.getMessageBody());

GetEndpointRequest getEndpointRequest = new GetEndpointRequest() .withApplicationId(appId) .withEndpointId(endpointId); GetEndpointResult getEndpointResult = client.getEndpoint(getEndpointRequest);

System.out.println("Got Endpoint: " + getEndpointResult.getEndpointResponse().getId()); return getEndpointResult.getEndpointResponse(); }

private EndpointRequest createEndpointRequestData() {

HashMap<String, List<String>> customAttributes = new HashMap<>(); List<String> favoriteTeams = new ArrayList<>(); favoriteTeams.add("Lakers"); favoriteTeams.add("Warriors"); customAttributes.put("team", favoriteTeams);

EndpointDemographic demographic = new EndpointDemographic() .withAppVersion("1.0") .withMake("apple") .withModel("iPhone") .withModelVersion("7") .withPlatform("ios") .withPlatformVersion("10.1.1") .withTimezone("Americas/Los_Angeles");

EndpointLocation location = new EndpointLocation() .withCity("Los Angeles") .withCountry("US") .withLatitude(34.0) .withLongitude(-118.2) .withPostalCode("90068") .withRegion("CA");

Map<String,Double> metrics = new HashMap<>(); metrics.put("health", 100.00); metrics.put("luck", 75.00);

EndpointUser user = new EndpointUser() .withUserId(UUID.randomUUID().toString());

EndpointRequest endpointRequest = new EndpointRequest() .withAddress(UUID.randomUUID().toString()) .withAttributes(customAttributes) .withChannelType("APNS") .withDemographic(demographic) .withEffectiveDate(new Date().toString()) .withLocation(location) .withMetrics(metrics) .withOptOut("NONE") .withRequestId(UUID.randomUUID().toString()) .withUser(user);

return endpointRequest; }}

この例を実行すると、IDE のコンソールウィンドウに次のように出力されます。

Endpoint ID: 37d321e8-5419-4fa8-86ba-698905f262a4

42

Page 47: Amazon Pinpoint - 開発者ガイド - AWS Documentation€¢ AWS SDK for Ruby バージョン 1.0.0.rc2 以降。 • AWS SDK for Go バージョン 1.5.13 以降。• AWS SDK for

Amazon Pinpoint 開発者ガイドプログラムでエンドポイントを追加する

Update Endpoint Response: {Message: Accepted,RequestID: 74ef5959-b4d7-11e6-ae27-25eb3a23dee7}Get Endpoint ID: 37d321e8-5419-4fa8-86ba-698905f262a4

43

Page 48: Amazon Pinpoint - 開発者ガイド - AWS Documentation€¢ AWS SDK for Ruby バージョン 1.0.0.rc2 以降。 • AWS SDK for Go バージョン 1.5.13 以降。• AWS SDK for

Amazon Pinpoint 開発者ガイドセグメントの構築

セグメントの作成ユーザーセグメントは、ユーザーが最近いつ頃アプリを使用したか、またはどのデバイスプラットフォームを使用しているか、などの共有特性に基づくユーザーのサブセットを表します。セグメントは、キャンペーンにより配信されたメッセージを受信するユーザーを指定します。セグメントを指定することで、ユーザーがアプリに戻ってくるようにとの招待が適切な対象者に届くようにし、特典を提供し、または、ユーザーエンゲージメントや購入を促進できます。

セグメントを作成した後、1 つ以上のキャンペーンで使用できます。キャンペーンはセグメントのユーザーに合わせたメッセージを送信します。

詳細については、「セグメント」を参照してください。

トピック• セグメントの構築 (p. 44)• セグメントのインポート (p. 45)• AWS Lambda を使用したセグメントのカスタマイズ (p. 48)

セグメントの構築キャンペーンの対象ユーザーに到達するためには、アプリケーションによって報告されたデータに基づいて、セグメントを構築します。たとえば、最近アプリを使用していないユーザーにアプローチするために、過去 7 日間アプリを使用していないユーザーのセグメントを指定できます。

AWS SDK for Java を使用したセグメントの構築次の例では、AWS SDK for Java でセグメントを構築する方法を示します。

import com.amazonaws.services.pinpoint.AmazonPinpointClient;import com.amazonaws.services.pinpoint.model.AttributeDimension;import com.amazonaws.services.pinpoint.model.AttributeType;import com.amazonaws.services.pinpoint.model.CreateSegmentRequest;import com.amazonaws.services.pinpoint.model.CreateSegmentResult;import com.amazonaws.services.pinpoint.model.RecencyDimension;import com.amazonaws.services.pinpoint.model.SegmentBehaviors;import com.amazonaws.services.pinpoint.model.SegmentDemographics;import com.amazonaws.services.pinpoint.model.SegmentDimensions;import com.amazonaws.services.pinpoint.model.SegmentLocation;import com.amazonaws.services.pinpoint.model.SegmentResponse;import com.amazonaws.services.pinpoint.model.WriteSegmentRequest;

import java.util.HashMap;import java.util.Map;

public class PinpointSegmentSample {

public SegmentResponse createSegment(AmazonPinpointClient client, String appId) { Map<String, AttributeDimension> segmentAttributes = new HashMap<>(); segmentAttributes.put("Team", new AttributeDimension().withAttributeType(AttributeType.INCLUSIVE).withValues("Lakers"));

SegmentBehaviors segmentBehaviors = new SegmentBehaviors(); SegmentDemographics segmentDemographics = new SegmentDemographics(); SegmentLocation segmentLocation = new SegmentLocation();

RecencyDimension recencyDimension = new RecencyDimension();

44

Page 49: Amazon Pinpoint - 開発者ガイド - AWS Documentation€¢ AWS SDK for Ruby バージョン 1.0.0.rc2 以降。 • AWS SDK for Go バージョン 1.5.13 以降。• AWS SDK for

Amazon Pinpoint 開発者ガイドセグメントのインポート

recencyDimension.withDuration("DAY_30").withRecencyType("ACTIVE"); segmentBehaviors.setRecency(recencyDimension);

SegmentDimensions dimensions = new SegmentDimensions() .withAttributes(segmentAttributes) .withBehavior(segmentBehaviors) .withDemographic(segmentDemographics) .withLocation(segmentLocation);

WriteSegmentRequest writeSegmentRequest = new WriteSegmentRequest() .withName("MySegment").withDimensions(dimensions);

CreateSegmentRequest createSegmentRequest = new CreateSegmentRequest() .withApplicationId(appId).withWriteSegmentRequest(writeSegmentRequest);

CreateSegmentResult createSegmentResult = client.createSegment(createSegmentRequest);

System.out.println("Segment ID: " + createSegmentResult.getSegmentResponse().getId());

return createSegmentResult.getSegmentResponse(); }

}

この例を実行すると、IDE のコンソールウィンドウに次のように出力されます。

Segment ID: 09cb2967a82b4a2fbab38fead8d1f4c4

セグメントのインポートAmazon Pinpoint では、セグメントに属するエンドポイントに関する情報をインポートしてユーザーセグメントを定義できます。エンドポイントは、モバイルプッシュデバイストークン、携帯電話番号、またはE メールアドレスなどの、単一のメッセージ送信先です。

Amazon Pinpoint の外にすでにユーザーのセグメントを作成しているが、Amazon Pinpoint キャンペーンにユーザーをかかわらせたい場合、セグメントのインポートは役立ちます。

セグメントをインポートすると、Amazon Pinpoint は Amazon Simple Storage Service (Amazon S3) からセグメントのエンドポイントを取得します。インポートする前に、Amazon S3 にエンドポイントを追加し、Amazon Pinpoint に Amazon S3 へのアクセスを付与する IAM ロールを作成します。次に、エンドポイントが保存される Amazon S3 の場所を Amazon Pinpoint に与えると、Amazon Pinpoint はセグメントに各エンドポイントを追加します。

IAM ロールを作成するには、「セグメントをインポートするための IAM ロール (p. 80)」を参照してください。Amazon Pinpoint コンソールを使用したセグメントのインポートに関する詳細については、Amazon Pinpoint ユーザーガイド の「セグメントのインポート」を参照してください。

セグメントのインポート次の例では、AWS SDK for Java を使用してセグメントをインポートする方法を示します。

import com.amazonaws.AmazonServiceException;import com.amazonaws.regions.Regions;import com.amazonaws.services.pinpoint.AmazonPinpoint;import com.amazonaws.services.pinpoint.AmazonPinpointClientBuilder;import com.amazonaws.services.pinpoint.model.*;

45

Page 50: Amazon Pinpoint - 開発者ガイド - AWS Documentation€¢ AWS SDK for Ruby バージョン 1.0.0.rc2 以降。 • AWS SDK for Go バージョン 1.5.13 以降。• AWS SDK for

Amazon Pinpoint 開発者ガイドセグメントのインポート

import com.amazonaws.services.s3.AmazonS3;import com.amazonaws.services.s3.AmazonS3ClientBuilder;import com.amazonaws.services.s3.model.AmazonS3Exception;import java.io.File;import java.nio.file.Path;import java.nio.file.Paths;import java.util.List;import java.util.concurrent.TimeUnit;

public class ImportSegment {

public static void main(String[] args) {

final String USAGE = "\n" + "ImportSegment - Creates a segment by: \n" + "1.) Uploading the endpoint definitions that belong to the segment to an Amazon S3 bucket. \n" + "2.) Importing the endpoint definitions from the bucket to an Amazon Pinpoint application." + " Amazon Pinpoint creates a segment that has the specified name.\n\n" + "Usage: ImportSegment <endpointsFileLocation> <s3BucketName> <iamImportRoleArn> <segmentName> <applicationId>\n\n" + "Where:\n" + " endpointsFileLocation - The relative location of the JSON file that contains the endpoint definitions.\n" + " s3BucketName - The name of the Amazon S3 bucket to upload the JSON file to. If the bucket doesn't " + "exist, a new bucket is created.\n" + " iamImportRoleArn - The ARN of an IAM role that grants Amazon Pinpoint read permissions so the S3 bucket.\n" + " segmentName - The name for the segment that you are creating or updating." + " applicationId - The ID of the Amazon Pinpoint application to add the endpoints to.";

if (args.length < 1) { System.out.println(USAGE); System.exit(1); }

String endpointsFileLocation = args[0]; String s3BucketName = args[1]; String iamImportRoleArn = args[2]; String segmentName = args[3]; String applicationId = args[4];

Path endpointsFilePath = Paths.get(endpointsFileLocation); File endpointsFile = new File(endpointsFilePath.toAbsolutePath().toString()); uploadToS3(endpointsFile, s3BucketName);

importSegment(endpointsFile.getName(), s3BucketName, iamImportRoleArn, segmentName, applicationId);

}

private static void uploadToS3(File endpointsFile, String s3BucketName) {

// Initializes Amazon S3 client. final AmazonS3 s3 = AmazonS3ClientBuilder.defaultClient();

// Checks whether the specified bucket exists. If not, attempts to create one. if (!s3.doesBucketExistV2(s3BucketName)) { try { s3.createBucket(s3BucketName); System.out.format("Created S3 bucket %s.\n", s3BucketName); } catch (AmazonS3Exception e) { System.err.println(e.getErrorMessage());

46

Page 51: Amazon Pinpoint - 開発者ガイド - AWS Documentation€¢ AWS SDK for Ruby バージョン 1.0.0.rc2 以降。 • AWS SDK for Go バージョン 1.5.13 以降。• AWS SDK for

Amazon Pinpoint 開発者ガイドセグメントのインポート

System.exit(1); } }

// Uploads the endpoints file to the bucket. String endpointsFileName = endpointsFile.getName(); System.out.format("Uploading %s to S3 bucket %s . . .\n", endpointsFileName, s3BucketName); try { s3.putObject(s3BucketName, "imports/" + endpointsFileName, endpointsFile); System.out.println("Finished uploading to S3."); } catch (AmazonServiceException e) { System.err.println(e.getErrorMessage()); System.exit(1); } }

private static void importSegment(String endpointsFileName, String s3BucketName, String iamImportRoleArn, String segmentName, String applicationId) {

// The S3 URL that Amazon Pinpoint requires to find the endpoints file. String s3Url = "s3://" + s3BucketName + "/imports/" + endpointsFileName;

// Defines the import job that Amazon Pinpoint runs. ImportJobRequest importJobRequest = new ImportJobRequest() .withS3Url(s3Url) .withFormat(Format.JSON) .withRoleArn(iamImportRoleArn) .withRegisterEndpoints(true) .withDefineSegment(true) .withSegmentName(segmentName); CreateImportJobRequest createImportJobRequest = new CreateImportJobRequest() .withApplicationId(applicationId) .withImportJobRequest(importJobRequest);

// Initializes the Amazon Pinpoint client. AmazonPinpoint pinpointClient = AmazonPinpointClientBuilder.standard() .withRegion(Regions.US_EAST_1).build();

System.out.format("Creating segment %s with the endpoints in %s . . .\n", segmentName, endpointsFileName);

try {

// Runs the import job with Amazon Pinpoint. CreateImportJobResult importResult = pinpointClient.createImportJob(createImportJobRequest); String jobId = importResult.getImportJobResponse().getId();

// Checks the job status until the job completes or fails. GetImportJobResult getImportJobResult = null; String jobStatus = null; do { getImportJobResult = pinpointClient.getImportJob(new GetImportJobRequest() .withJobId(jobId) .withApplicationId(applicationId)); jobStatus = getImportJobResult.getImportJobResponse().getJobStatus(); System.out.format("Import job %s . . .\n", jobStatus.toLowerCase()); if (jobStatus.equals("FAILED")) { System.err.println("Failed to import segment."); System.exit(1); } try { TimeUnit.SECONDS.sleep(3); } catch (InterruptedException e) {

47

Page 52: Amazon Pinpoint - 開発者ガイド - AWS Documentation€¢ AWS SDK for Ruby バージョン 1.0.0.rc2 以降。 • AWS SDK for Go バージョン 1.5.13 以降。• AWS SDK for

Amazon Pinpoint 開発者ガイドAWS Lambda を使用したセグメントのカスタマイズ

System.err.println(e.getMessage()); System.exit(1); } } while (!jobStatus.equals("COMPLETED"));

System.out.println("Finished importing segment.");

// Checks for entries that failed to import. List<String> failedEndpoints = getImportJobResult.getImportJobResponse().getFailures(); if (failedEndpoints != null) { System.out.println("Failed to import the following entries:"); for (String failedEndpoint : failedEndpoints) { System.out.println(failedEndpoint); } }

} catch (AmazonServiceException e) { System.err.println(e.getErrorMessage()); System.exit(1); }

}

}

AWS Lambda を使用したセグメントのカスタマイズ

これはパブリックベータリリースの機能に関するプレリリースドキュメントです。このドキュメントは変更される可能性があります。

AWS Lambda を使用して、Amazon Pinpoint のキャンペーンで対象者を取り込む方法を調整できます。AWS Lambda では、Amazon Pinpoint がキャンペーンのメッセージを配信するときに、キャンペーンのセグメントを変更することができます。

AWS Lambda はサーバーをプロビジョニングしたり管理しなくてもコードを実行するために使用できるコンピューティングサービスです。コードをパッケージ化し、Lambda 関数として Lambda にアップロードします。関数が呼び出されたときに、Lambda によって関数が実行されます。この操作は手動で行うことも、イベントに応じて自動的に行うこともできます。

詳細については、AWS Lambda Developer Guideの「Lambda 関数」を参照してください。

キャンペーンに Lambda 関数を割り当てるには、キャンペーンの CampaignHook 設定を定義します。これらの設定には、Lambda 関数名が含まれます。CampaignHook モードも含まれます。これは、AmazonPinpoint が関数から戻り値を受け取るかどうかを設定します。

キャンペーンに割り当てる Lambda 関数を、Amazon Pinpoint の拡張機能と呼びます。

CampaignHook 設定が定義されると、Amazon Pinpoint はキャンペーンを実行する際に、キャンペーンのメッセージを配信する前に自動的に Lambda 関数を呼び出します。Amazon Pinpoint が関数を呼び出すと、メッセージ配信に関するイベントデータを提供します。このデータには、キャンペーンのセグメントが含まれます。これは Amazon Pinpoint がメッセージを送信するエンドポイントのリストです。

CampaignHook モードが FILTER に設定されている場合、Amazon Pinpoint により、関数はメッセージを送信する前に、セグメントを変更して返すことができます。たとえば、関数は、Amazon Pinpoint の外

48

Page 53: Amazon Pinpoint - 開発者ガイド - AWS Documentation€¢ AWS SDK for Ruby バージョン 1.0.0.rc2 以降。 • AWS SDK for Go バージョン 1.5.13 以降。• AWS SDK for

Amazon Pinpoint 開発者ガイドイベントデータ

部にあるソースからのデータを含む属性でエンドポイント定義を更新する場合があります。または、関数コードの条件に基づいて、特定のエンドポイントを削除してセグメントをフィルタする場合があります。Amazon Pinpoint が変更されたセグメントを関数から受け取ると、キャンペーンの配信チャネルを使用して、各セグメントのエンドポイントにメッセージを送信します。

AWS Lambda でセグメントを処理することにより、メッセージの送信先のユーザーと、メッセージの内容をより詳細に管理できます。キャンペーンメッセージが配信されるときに、キャンペーンをリアルタイムで調整できます。セグメントをフィルタすると、サブセットの定義されたサブセットを絞り込んで適用できます。エンドポイント属性を追加または更新すると、メッセージ変数で新しいデータを使用できるようになります。

メッセージ変数の詳細については、Amazon Pinpoint ユーザーガイドの「メッセージ変数」を参照してください。

Note

また、CampaignHook 設定を使用して、メッセージ配信を処理する Lambda 関数を割り当てることもできます。このタイプの関数は、ソーシャルメディアプラットフォームなど、AmazonPinpoint がサポートしないカスタムチャネルを通じてメッセージを配信するときに役立ちます。詳細については、「AWS Lambda を使用したカスタムチャネルの作成 (p. 94)」を参照してください。

AWS Lambda でキャンペーンセグメントを変更するには、最初に、Amazon Pinpoint によって送信されたイベントデータを処理し、変更されたセグメントを返す関数を作成します。次に、Lambda 関数ポリシーを割り当てて関数を呼び出すことを Amazon Pinpoint に許可します。最後に、CampaignHook 設定を定義して、1 つ以上のキャンペーンに関数を割り当てます。

イベントデータAmazon Pinpoint が Lambda 関数を呼び出すときに、イベントデータとして次のペイロードを提供します。

{ "MessageConfiguration": {Message configuration} "ApplicationId": ApplicationId, "CampaignId": CampaignId, "TreatmentId": TreatmentId, "ActivityId": ActivityId, "ScheduledTime": Scheduled Time, "Endpoints": { EndpointId: {Endpoint definition} . . . }}

このイベントデータは AWS Lambda によって関数コードに渡されます。

イベントデータは次の属性を提供します。

• MessageConfiguration – Amazon Pinpoint API の Messages リソースのDirectMessageConfiguration と同じ構造を持ちます。

• ApplicationId – キャンペーンが属する Amazon Pinpoint プロジェクトの ID。• CampaignId – 関数が呼び出される Amazon Pinpoint プロジェクトの ID。• TreatmentId – A/B テストに使用されるキャンペーンバリエーションの ID。• ActivityId – キャンペーンによって実行中のアクティビティの ID。• ScheduledTime – キャンペーンのメッセージが ISO 8601 形式で配信される日時。• Endpoints – エンドポイント ID をエンドポイント定義と関連付けるマップ。各イベントデータのペイ

ロードには最大 50 のエンドポイントが含まれます。キャンペーンセグメントに 50 以上のエンドポイン

49

Page 54: Amazon Pinpoint - 開発者ガイド - AWS Documentation€¢ AWS SDK for Ruby バージョン 1.0.0.rc2 以降。 • AWS SDK for Go バージョン 1.5.13 以降。• AWS SDK for

Amazon Pinpoint 開発者ガイドLambda 関数の作成

トが含まれる場合、Amazon Pinpoint はすべてのエンドポイントが処理されるまで、繰り返し関数を呼び出します (最大で一度に 50 のエンドポイント)。

Lambda 関数の作成Lambda 関数を作成するには、AWS Lambda Developer Guideの「Lambda 関数のビルド」を参照してください。

関数を作成するときは、以下の条件ではメッセージ配信が失敗することに注意してください。

• Lambda 関数では、変更されたセグメントを返すために 15 秒以上かかります。• Amazon Pinpoint は関数の戻り値をデコードすることはできません。• この関数では、正常な呼び出しのためには、Amazon Pinpoint から 3 回を超える試行が必要です。

Amazon Pinpoint は、関数の戻り値でのみエンドポイントの定義を受け入れます。関数は、イベントデータで他の要素を変更することはできません。

Lambda 関数の例Lambda 関数は Node.js で書かれた次の例に示すように、Amazon Pinpoint によって送信されたイベントデータを処理し、変更されたエンドポイントを返します。

'use strict'; exports.handler = (event, context, callback) => { for (var key in event.Endpoints) { if (event.Endpoints.hasOwnProperty(key)) { var endpoint = event.Endpoints[key]; var attr = endpoint.Attributes; if (!attr) { attr = {}; endpoint.Attributes = attr; } attr["CreditScore"] = [ Math.floor(Math.random() * 200) + 650]; } } console.log("Received event:", JSON.stringify(event, null, 2)); callback(null, event.Endpoints);};

Lambda は event パラメータとしてイベントデータをハンドラに渡します。

この例では、ハンドラは event.Endpoints オブジェクトの各エンドポイントで反復処理し、エンドポイントに新しい属性 CreditScore を追加します。CreditScore 属性の値は、単純にランダムな数値です。

console.log() ステートメントは CloudWatch Logs にイベントのログを記録します。

callback() ステートメントは変更されたエンドポイントを Amazon Pinpoint に返します。通常、Node.js Lambda 関数で callback パラメータはオプションですが、この関数は更新されたエンドポイントを Amazon Pinpoint に返す必要があるため、このコンテキストで必要です。

関数は、イベントデータで提供されるのと同じ形式でエンドポイントを返す必要があります。これは、次の例に示すように、エンドポイント ID とエンドポイント定義を関連付けるマップです。

{ "eqmj8wpxszeqy/b3vch04sn41yw": {

50

Page 55: Amazon Pinpoint - 開発者ガイド - AWS Documentation€¢ AWS SDK for Ruby バージョン 1.0.0.rc2 以降。 • AWS SDK for Go バージョン 1.5.13 以降。• AWS SDK for

Amazon Pinpoint 開発者ガイドLambda 関数ポリシーの割り当て

"ChannelType": "GCM", "Address": "4d5e6f1a2b3c4d5e6f7g8h9i0j1a2b3c", "EndpointStatus": "ACTIVE", "OptOut": "NONE", "Demographic": { "Make": "android" }, "EffectiveDate": "2017-11-02T21:26:48.598Z", "User": {} }, "idrexqqtn8sbwfex0ouscod0yto": { "ChannelType": "APNS", "Address": "1a2b3c4d5e6f7g8h9i0j1a2b3c4d5e6f", "EndpointStatus": "ACTIVE", "OptOut": "NONE", "Demographic": { "Make": "apple" }, "EffectiveDate": "2017-11-02T21:26:48.598Z", "User": {} }}

この例の関数では、イベントデータで受信した event.Endpoints オブジェクトを変更して返します。

返されるエンドポイント定義で、Amazon Pinpoint は TitleOverride および BodyOverride 属性を受け入れます。

Lambda 関数ポリシーの割り当てLambda 関数を使用してエンドポイントを処理する前に、Amazon Pinpoint に Lambda 関数の呼び出しを許可する必要があります。呼び出しのアクセス許可を付与するには、関数に Lambda 関数ポリシーを割り当てます。Lambda 関数ポリシーはリソースベースのアクセス許可ポリシーで、関数を使用できるエンティティと、それらのエンティティが実行できるアクションを指定します。

詳細については、「AWS Lambda でリソースベースのポリシーを使用する (Lambda 関数ポリシー)」(AWS Lambda Developer Guide) を参照してください。

関数ポリシーの例次のポリシーでは、lambda:InvokeFunction アクションを使用するアクセス許可を、Amazon Pinpointサービスプリンシパルに付与します。

{ "Sid": "sid", "Effect": "Allow", "Principal": { "Service": "pinpoint.us-east-1.amazonaws.com" }, "Action": "lambda:InvokeFunction", "Resource": "{arn:aws:lambda:us-east-1:account-id:function:function-name}", "Condition": { "ArnLike": { "AWS:SourceArn": "arn:aws:mobiletargeting:us-east-1:account-id:/apps/application-id/campaigns/campaign-id" } }}

関数ポリシーは、AWS:SourceArn キーを含む Condition ブロックを必要とします。このコードは、関数を呼び出すために許可される Amazon Pinpoint キャンペーンを指定します。この例では、ポリシーは 1

51

Page 56: Amazon Pinpoint - 開発者ガイド - AWS Documentation€¢ AWS SDK for Ruby バージョン 1.0.0.rc2 以降。 • AWS SDK for Go バージョン 1.5.13 以降。• AWS SDK for

Amazon Pinpoint 開発者ガイドキャンペーンへの Lambda 関数の割り当て

つのキャンペーン ID のみにアクセス許可を付与します。より一般的なポリシーを記述するには、複数文字に一致するワイルドカード (*) を使用します。たとえば、次の Condition ブロックを使用して、AWS アカウントの任意の Amazon Pinpoint キャンペーンに関数の呼び出しを許可できます。

"Condition": { "ArnLike": { "AWS:SourceArn": "arn:aws:mobiletargeting:us-east-1:account-id:/apps/*" }}

Amazon Pinpoint への呼び出しアクセス許可の付与AWS Command Line Interface (AWS CLI) を使用して、Lambda 関数に割り当てられた Lambda 関数ポリシーにアクセス許可を追加できます。Amazon Pinpoint に関数の呼び出しを許可するには、次の例に示すように Lambda add-permission コマンドを使用します。

$ aws lambda add-permission \> --function-name function-name \> --statement-id sid \> --action lambda:InvokeFunction \> --principal pinpoint.us-east-1.amazonaws.com \> --source-arn arn:aws:mobiletargeting:us-east-1:account-id:/apps/application-id/campaigns/campaign-id

--source-arn パラメータのキャンペーン ID を指定する場合は、Amazon Pinpoint の get-campaigns コマンドと AWS CLI を使用して、キャンペーン ID を参照できます。このコマンドには、--application-id パラメータが必要です。アプリケーション ID を参照するには、https://console.aws.amazon.com/pinpoint/ で Amazon Pinpoint コンソールにサインインし、[Projects] ページに移動します。コンソールには各プロジェクトの [ID] が表示されます。これはプロジェクトのアプリケーション ID です。

Lambda の add-permission コマンドを実行すると、AWS Lambda により以下のような出力が表示されます。

{ "Statement": "{\"Sid\":\"sid\", \"Effect\":\"Allow\", \"Principal\":{\"Service\":\"pinpoint.us-east-1.amazonaws.com\"}, \"Action\":\"lambda:InvokeFunction\", \"Resource\":\"arn:aws:lambda:us-east-1:111122223333:function:function-name\", \"Condition\": {\"ArnLike\": {\"AWS:SourceArn\": \"arn:aws:mobiletargeting:us-east-1:111122223333:/apps/application-id/campaigns/campaign-id\"}}}"}

Statement 値は Lambda 関数ポリシーに追加されたステートメントの JSON 文字列バージョンです。

キャンペーンへの Lambda 関数の割り当てLambda 関数は個別の Amazon Pinpoint キャンペーンに割り当てることができます。または、個別に関数を割り当てるキャンペーンを除いて、プロジェクトのすべてのキャンペーンで使用されるデフォルトとして、Lambda 関数を設定できます。

Lambda 関数を個別のキャンペーンに割り当てるには、Amazon Pinpoint API を使用して Campaign オブジェクトを作成または更新し、その CampaignHook 属性を定義します。プロジェクトのすべてのキャン

52

Page 57: Amazon Pinpoint - 開発者ガイド - AWS Documentation€¢ AWS SDK for Ruby バージョン 1.0.0.rc2 以降。 • AWS SDK for Go バージョン 1.5.13 以降。• AWS SDK for

Amazon Pinpoint 開発者ガイドキャンペーンへの Lambda 関数の割り当て

ペーン用にデフォルトとして Lambda 関数を設定するには、そのプロジェクト用の Settings リソースを作成または更新し、その CampaignHook オブジェクトを定義します。

いずれの場合も、次の CampaignHook 属性を設定します。

• LambdaFunctionName – キャンペーンのメッセージを送信する前に Amazon Pinpoint が呼び出すLambda 関数の名前または ARN。

• Mode – FILTER に設定します。このモードでは、Amazon Pinpoint はこの関数を呼び出し、変更されたエンドポイントが返されるのを待ちます。エンドポイントを受け取った後、メッセージが送信されます。Amazon Pinpoint は最大 15 秒待ってから、メッセージ配信を失敗させます。

キャンペーンに対して CampaignHook 設定を定義した状態で、Amazon Pinpoint はキャンペーンのメッセージを送信する前に、指定された Lambda 関数を呼び出します。Amazon Pinpoint は、変更されたエンドポイントの関数からの受け取りを待機します。Amazon Pinpoint が更新されたエンドポイントを受信する場合、更新されたエンドポイントデータを使用して、メッセージの配信を続行します。

53

Page 58: Amazon Pinpoint - 開発者ガイド - AWS Documentation€¢ AWS SDK for Ruby バージョン 1.0.0.rc2 以降。 • AWS SDK for Go バージョン 1.5.13 以降。• AWS SDK for

Amazon Pinpoint 開発者ガイド標準キャンペーンの作成

キャンペーンの作成アプリとユーザーの間のエンゲージメントを向上するために、Amazon Pinpoint を使用してユーザーの特定のセグメントを対象とするプッシュ通知キャンペーンを作成し管理します。

たとえば、キャンペーンにより、最近アプリを実行していないユーザーをアプリに戻るよう招待し、最近購入していないユーザーに特別なプロモーションを提供します。

キャンペーンでは、指定したセグメントのユーザーに向けたメッセージを送信します。キャンペーンではセグメントのすべてのユーザーにメッセージを送信できます。または、メッセージを受け取らないユーザーの割合である保留 (Holdout) を割り当てることもできます。

メッセージを 1 回、または 1 週間に一度など、定期的な間隔で送信するように、キャンペーンのスケジュールを設定できます。ユーザーが都合の悪い時間にメッセージを受信しないように、スケジュールにメッセージを送信しないクワイエットタイムを含めることができます。

別のキャンペーン戦略を試すには、キャンペーンを A/B テストとして設定します。A/B テストには、メッセージまたはスケジュールの 2 つ以上の処理が含まれます。処理によって、メッセージまたはスケジュールに違いを持たせます。ユーザーがキャンペーンに応答すると、キャンペーン分析を表示してそれぞれの処理の効果性を比較できます。

詳細については、「キャンペーン」を参照してください。

標準キャンペーンの作成標準キャンペーンは、定義したスケジュールに基づいて、指定したセグメントにカスタムのプッシュ通知を送信します。

AWS SDK for Java を使用してキャンペーンを作成する次の例では、AWS SDK for Java でキャンペーンを作成する方法を示します。

import com.amazonaws.services.pinpoint.AmazonPinpointClient;import com.amazonaws.services.pinpoint.model.Action;import com.amazonaws.services.pinpoint.model.CampaignResponse;import com.amazonaws.services.pinpoint.model.CreateCampaignRequest;import com.amazonaws.services.pinpoint.model.CreateCampaignResult;import com.amazonaws.services.pinpoint.model.Message;import com.amazonaws.services.pinpoint.model.MessageConfiguration;import com.amazonaws.services.pinpoint.model.Schedule;import com.amazonaws.services.pinpoint.model.WriteCampaignRequest;

import java.util.ArrayList;import java.util.List;

public class PinpointCampaignSample {

public CampaignResponse createCampaign(AmazonPinpointClient client, String appId, String segmentId) { Schedule schedule = new Schedule() .withStartTime("IMMEDIATE");

Message defaultMessage = new Message()

54

Page 59: Amazon Pinpoint - 開発者ガイド - AWS Documentation€¢ AWS SDK for Ruby バージョン 1.0.0.rc2 以降。 • AWS SDK for Go バージョン 1.5.13 以降。• AWS SDK for

Amazon Pinpoint 開発者ガイドA/B テストキャンペーンの作成

.withAction(Action.OPEN_APP) .withBody("My message body.") .withTitle("My message title.");

MessageConfiguration messageConfiguration = new MessageConfiguration() .withDefaultMessage(defaultMessage);

WriteCampaignRequest request = new WriteCampaignRequest() .withDescription("My description.") .withSchedule(schedule) .withSegmentId(segmentId) .withName("MyCampaign") .withMessageConfiguration(messageConfiguration);

CreateCampaignRequest createCampaignRequest = new CreateCampaignRequest() .withApplicationId(appId).withWriteCampaignRequest(request);

CreateCampaignResult result = client.createCampaign(createCampaignRequest);

System.out.println("Campaign ID: " + result.getCampaignResponse().getId());

return result.getCampaignResponse(); }

}

この例を実行すると、IDE のコンソールウィンドウに次のように出力されます。

Campaign ID: b1c3de717aea4408a75bb3287a906b46

A/B テストキャンペーンの作成A/B テストは標準キャンペーンのように動作しますが、キャンペーンメッセージまたはスケジュールに異なる処理を定義できます。

AWS SDK for Java を使用して A/B テストキャンペーンを作成する次の例では、AWS SDK for Java で A/B テストキャンペーンを作成する方法を示します。

import com.amazonaws.services.pinpoint.AmazonPinpointClient;import com.amazonaws.services.pinpoint.model.Action;import com.amazonaws.services.pinpoint.model.CampaignResponse;import com.amazonaws.services.pinpoint.model.CreateCampaignRequest;import com.amazonaws.services.pinpoint.model.CreateCampaignResult;import com.amazonaws.services.pinpoint.model.Message;import com.amazonaws.services.pinpoint.model.MessageConfiguration;import com.amazonaws.services.pinpoint.model.Schedule;import com.amazonaws.services.pinpoint.model.WriteCampaignRequest;import com.amazonaws.services.pinpoint.model.WriteTreatmentResource;

import java.util.ArrayList;import java.util.List;

public class PinpointCampaignSample {

public CampaignResponse createAbCampaign(AmazonPinpointClient client, String appId, String segmentId) {

55

Page 60: Amazon Pinpoint - 開発者ガイド - AWS Documentation€¢ AWS SDK for Ruby バージョン 1.0.0.rc2 以降。 • AWS SDK for Go バージョン 1.5.13 以降。• AWS SDK for

Amazon Pinpoint 開発者ガイドAWS SDK for Java を使用して A/B テストキャンペーンを作成する

Schedule schedule = new Schedule() .withStartTime("IMMEDIATE");

// Default treatment. Message defaultMessage = new Message() .withAction(Action.OPEN_APP) .withBody("My message body.") .withTitle("My message title.");

MessageConfiguration messageConfiguration = new MessageConfiguration() .withDefaultMessage(defaultMessage);

// Additional treatments WriteTreatmentResource treatmentResource = new WriteTreatmentResource() .withMessageConfiguration(messageConfiguration) .withSchedule(schedule) .withSizePercent(40) .withTreatmentDescription("My treatment description.") .withTreatmentName("MyTreatment");

List<WriteTreatmentResource> additionalTreatments = new ArrayList<WriteTreatmentResource>(); additionalTreatments.add(treatmentResource);

WriteCampaignRequest request = new WriteCampaignRequest() .withDescription("My description.") .withSchedule(schedule) .withSegmentId(segmentId) .withName("MyCampaign") .withMessageConfiguration(messageConfiguration) .withAdditionalTreatments(additionalTreatments) .withHoldoutPercent(10); // Hold out of A/B test

CreateCampaignRequest createCampaignRequest = new CreateCampaignRequest() .withApplicationId(appId).withWriteCampaignRequest(request);

CreateCampaignResult result = client.createCampaign(createCampaignRequest);

System.out.println("Campaign ID: " + result.getCampaignResponse().getId());

return result.getCampaignResponse(); }

}

この例を実行すると、IDE のコンソールウィンドウに次のように出力されます。

Campaign ID: b1c3de717aea4408a75bb3287a906b46

56

Page 61: Amazon Pinpoint - 開発者ガイド - AWS Documentation€¢ AWS SDK for Ruby バージョン 1.0.0.rc2 以降。 • AWS SDK for Go バージョン 1.5.13 以降。• AWS SDK for

Amazon Pinpoint 開発者ガイドイベントストリーミングのセットアップ

Amazon Pinpoint イベントを Kinesisにストリーミングする

Kinesis プラットフォームでは、AWS のストリーミングデータのロードと分析に使用できるサービスを提供します。Amazon Pinpoint を設定して Amazon Kinesis Data Firehose または Amazon Kinesis DataStreams にイベントを送信できます。イベントをストリーミングすることによって、より柔軟な分析とストレージのオプションが利用可能になります。詳細、および Amazon Pinpoint コンソールでイベントストリーミングを設定する手順については、Amazon Pinpoint ユーザーガイド の「Amazon Pinpoint によるアプリとキャンペーンイベントのストリーミング」を参照してください。

イベントストリーミングのセットアップ次の例は、アプリからのイベントデータを Kinesis ストリームまたは Kinesis Data Firehose 配信ストリームへ自動的に送信するために Amazon Pinpoint を設定する方法を示しています。

前提条件

これらの例では、以下の入力が必要になります。

• Amazon Pinpoint と統合されているアプリのアプリ ID およびイベントのレポート。統合する方法については、「Amazon Pinpoint とアプリケーションの統合 (p. 3)」を参照してください。

• AWS アカウントの Kinesis ストリームまたは Kinesis Data Firehose 配信ストリームの ARN。これらのリソースの作成の詳細については、『Amazon Kinesis Data Streams 開発者ガイド』の「Amazon Kinesis Data Streams」、または、『Amazon Kinesis Firehose 開発者ガイド』の「Amazon Kinesis Firehose 配信システムの作成」を参照してください。

• Amazon Pinpoint がストリームにデータを送信するのを許可する AWS Identity and AccessManagement(IAM) ロールの ARN。ロールの作成の詳細については、Kinesis にイベントをストリーミングするための IAM ロール (p. 84) を参照してください。

AWS CLI次の AWS CLI の例では、put-event-stream コマンドを使用します。このコマンドは Amazon Pinpointを設定し、アプリとキャンペーンイベントを Kinesis ストリームに送信します。

aws pinpoint put-event-stream --application-id application-id --write-event-stream DestinationStreamArn=stream-arn,RoleArn=role-arn

AWS SDK for Java次の Java の例では、Amazon Pinpoint を設定し、アプリおよびキャンペーンイベントを Kinesis ストリームに送信します。

public PutEventStreamResult createEventStream(AmazonPinpoint pinClient, String appId, String streamArn, String roleArn) { WriteEventStream stream = new WriteEventStream() .withDestinationStreamArn(streamArn) .withRoleArn(roleArn);

57

Page 62: Amazon Pinpoint - 開発者ガイド - AWS Documentation€¢ AWS SDK for Ruby バージョン 1.0.0.rc2 以降。 • AWS SDK for Go バージョン 1.5.13 以降。• AWS SDK for

Amazon Pinpoint 開発者ガイドイベントストリーミングを無効にする

PutEventStreamRequest request = new PutEventStreamRequest() .withApplicationId(appId) .withWriteEventStream(stream);

return pinClient.putEventStream(request);}

この例では、Kinesis ストリームの ARN と IAM ロールを保存する WriteEventStream オブジェクトを構築します。WriteEventStream オブジェクトは、PutEventStreamRequest オブジェクトに渡され、特定のアプリのためにイベントをストリームするように Amazon Pinpoint を設定します。PutEventStreamRequest オブジェクトは Amazon Pinpoint クライアントの putEventStream メソッドに渡されます。

Kinesis ストリームは複数のアプリに割り当てることができます。Amazon Pinpoint は各アプリケーションからストリームへイベントデータを送信するので、データをコレクションとして分析できます。次の例のメソッドでは、アプリ ID のリストを受け取り、前の例のメソッドである createEventStream を使用して各アプリにストリームを割り当てます。

public List<PutEventStreamResult> createEventStreamFromAppList( AmazonPinpoint pinClient, List<String> appIDs, String streamArn, String roleArn) { return appIDs.stream() .map(appId -> createEventStream(pinClient, appId, streamArn, roleArn)) .collect(Collectors.toList());}

Amazon Pinpoint では、1 つのストリームを複数のアプリケーションに割り当てることができますが、複数のストリームを 1 つのアプリに割り当てることはできません。

イベントストリーミングを無効にするKinesis ストリームをアプリに割り当てた場合、そのアプリのイベントストリーミングを無効にできます。Amazon Pinpoint はイベントのストリーミングを停止しますが、Amazon Pinpoint コンソールのイベントに基づく分析を表示できます。

AWS CLIdelete-event-stream コマンドを使用します。

aws pinpoint delete-event-stream --application-id application-id

AWS SDK for JavaAmazon Pinpoint クライアントの deleteEventStream メソッドを使用します。

pinClient.deleteEventStream(new DeleteEventStreamRequest().withApplicationId(appId));

イベントデータイベントストリーミングを設定すると、Amazon Pinpoint は、アプリケーションによって報告された各イベント、および Amazon Pinpoint により作成された各キャンペーンを、JSON データオブジェクトとしてKinesis ストリームに送信します。

58

Page 63: Amazon Pinpoint - 開発者ガイド - AWS Documentation€¢ AWS SDK for Ruby バージョン 1.0.0.rc2 以降。 • AWS SDK for Go バージョン 1.5.13 以降。• AWS SDK for

Amazon Pinpoint 開発者ガイドアプリイベント

イベントタイプは、イベント JSON オブジェクトで event_type 属性により示されます。

アプリイベントアプリと Amazon Pinpoint を統合し、1 つ以上のキャンペーンを実行すると、Amazon Pinpoint はユーザーアクティビティとキャンペーンメッセージ配信に関するイベントをストリーミングします。

例アプリイベントの JSON オブジェクトには以下の例に示されているデータが含まれています。

{ "event_type": "_session.stop", "event_timestamp": 1487973802507, "arrival_timestamp": 1487973803515, "event_version": "3.0", "application": { "app_id": "a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6", "cognito_identity_pool_id": "us-east-1:a1b2c3d4-e5f6-g7h8-i9j0-k1l2m3n4o5p6", "package_name": "main.page", "sdk": { "name": "aws-sdk-mobile-analytics-js", "version": "0.9.1:2.4.8" }, "title": "title", "version_name": "1.0", "version_code": "1" }, "client": { "client_id": "m3n4o5p6-a1b2-c3d4-e5f6-g7h8i9j0k1l2", "cognito_id": "us-east-1:i9j0k1l2-m3n4-o5p6-a1b2-c3d4e5f6g7h8" }, "device": { "locale": { "code": "en_US", "country": "US", "language": "en" }, "make": "generic web browser", "model": "Unknown", "platform": { "name": "android", "version": "10.10" } }, "session": { "session_id": "f549dea9-1090-945d-c3d1-e496780baac5", "start_timestamp": 1487973202531, "stop_timestamp": 1487973802507 }, "attributes": {}, "metrics": {}}

標準アプリイベントタイプAmazon Pinpoint は、アプリイベントの以下の標準アプリケーションタイプをストリーミングします。

• _campaign.send• _monetization.purchase

59

Page 64: Amazon Pinpoint - 開発者ガイド - AWS Documentation€¢ AWS SDK for Ruby バージョン 1.0.0.rc2 以降。 • AWS SDK for Go バージョン 1.5.13 以降。• AWS SDK for

Amazon Pinpoint 開発者ガイドE メールイベント

• _session.start• _session.stop• _session.pause• _session.resume• _userauth.sign_in• _userauth.sign_up• _userauth.auth_fail

E メールイベントE メールチャネルが有効になっている場合は、E メール、配信、苦情、オープンなどに関するイベントをAmazon Pinpoint がストリーミングします。

例E メールイベントの JSON オブジェクトには以下の例に示されているデータが含まれています。

{ "event_type": "_email.delivered", "event_timestamp": 1487973802507, "arrival_timestamp": 1487973803515, "event_version": "3.0", "application": { "app_id": "a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6", "cognito_identity_pool_id": "us-east-1:a1b2c3d4-e5f6-g7h8-i9j0-k1l2m3n4o5p6", "package_name": "main.page", "sdk": { "name": "aws-sdk-mobile-analytics-js", "version": "0.9.1:2.4.8" }, "title": "title", "version_name": "1.0", "version_code": "1" }, "client": { "client_id": "m3n4o5p6-a1b2-c3d4-e5f6-g7h8i9j0k1l2", "cognito_id": "us-east-1:i9j0k1l2-m3n4-o5p6-a1b2-c3d4e5f6g7h8" }, "device": { "locale": { "code": "en_US", "country": "US", "language": "en" }, "make": "generic web browser", "model": "Unknown", "platform": { "name": "android", "version": "10.10" } }, "session": { "session_id": "f549dea9-1090-945d-c3d1-e496780baac5", "start_timestamp": 1487973202531, "stop_timestamp": 1487973802507 }, "attributes": {}, "metrics": {}}

60

Page 65: Amazon Pinpoint - 開発者ガイド - AWS Documentation€¢ AWS SDK for Ruby バージョン 1.0.0.rc2 以降。 • AWS SDK for Go バージョン 1.5.13 以降。• AWS SDK for

Amazon Pinpoint 開発者ガイドSMS イベント

標準 E メールイベントタイプAmazon Pinpoint は、E メールチャネルの以下の標準アプリケーションタイプをストリーミングします。

• _email.send• _email.delivered• _email.rejected• _email.hardbounce• _email.softbounce• _email.complaint• _email.open• _email.click• _email.unsubscribe

SMS イベントSMS チャネルが有効になっている場合、Amazon Pinpoint は SMS 配信に関するイベントをストリーミングします。

例SMS イベントの JSON オブジェクトには以下の例に示されているデータが含まれています。

{ "account_id": "123412341234", "event_type": "_SMS.SUCCESS", "arrival_timestamp": 2345678, "timestamp": 13425345, "timestamp_created": "1495756908285", "application_key": "AppKey-688037015201", "unique_id": "uniqueId-68803701520114087975969", "attributes": { "message_id": "12234sdv", "sender_request_id": "abdfg", "number_of_message_parts": 1, "record_status": "SUCCESS", "message_type": "Transactional", "keyword": "test", "mcc_mnc": "456123", "iso_country_code": "US" }, "metrics": { "price_in_millicents_usd": 0.0 }, "facets": {}, "additional_properties": {}}

標準 SMS イベントタイプAmazon Pinpoint は、SMS チャネルの以下の標準アプリケーションタイプをストリーミングします。

• _sms.send• _sms.success• _sms.fail

61

Page 66: Amazon Pinpoint - 開発者ガイド - AWS Documentation€¢ AWS SDK for Ruby バージョン 1.0.0.rc2 以降。 • AWS SDK for Go バージョン 1.5.13 以降。• AWS SDK for

Amazon Pinpoint 開発者ガイドイベントの属性

• _sms.optout

イベントの属性イベントの JSON オブジェクトには、次の属性が含まれます。

イベント

属性 説明

event_type アプリによって報告されたイベントのタイプ。

event_timestamp イベントが報告された時間 (Unix 時間、ミリ秒単位)。アプリが AWS Mobile SDK for Android または AWS MobileSDK for iOS を使用してイベントを報告すると、タイムスタンプが自動的に生成されます。

arrival_timestamp Amazon Pinpoint がイベントを受信した時間 (Unix 時間、ミリ秒単位)。キャンペーンイベントには適用されません。

event_version イベントの JSON スキーマのバージョン。

イベント処理アプリケーションでこのバージョンをチェックし、スキーマの更新に合わせてアプリケーションを更新する時期を把握します。

application Amazon Pinpoint アプリ。アプリケーションテーブルを参照してください。

client イベントを報告するためにクライアントがデバイスにインストールしたアプリ。クライアントテーブルを参照してください。

device イベントを報告するデバイス。デバイステーブルを参照してください。

session デバイスのアプリセッション。通常、ユーザーがアプリを開くとセッションが開始します。

attributes イベントの一部としてアプリが Amazon Pinpoint へ報告するカスタム属性。

metrics イベントの一部としてアプリが Amazon Pinpoint へ報告するカスタムメトリクス。

アプリケーション

属性 説明

app_id イベントを報告する Amazon Pinpoint アプリの一意のID。

cognito_identity_pool_id アプリが使用する Amazon Cognito ID プールの一意のID。

package_name アプリパッケージの名前。たとえば、com.example.my_app と指定します。

62

Page 67: Amazon Pinpoint - 開発者ガイド - AWS Documentation€¢ AWS SDK for Ruby バージョン 1.0.0.rc2 以降。 • AWS SDK for Go バージョン 1.5.13 以降。• AWS SDK for

Amazon Pinpoint 開発者ガイドイベントの属性

属性 説明

sdk イベントの報告に使用される SDK。

title アプリのタイトル。

version_name お客様向けのアプリバージョン (V2.0 など)。

version_code アプリのバージョンを表す内部コード。

クライアント

属性 説明

client_id デバイスにインストールされているアプリクライアントの一意の ID。この ID は、AWS Mobile SDK for iOS および AWS Mobile SDK for Android で自動的に生成されます。

cognito_id アプリが使用する Amazon CognitoID プールのアプリクライアントに割り当てられた一意の ID。

デバイス

属性 説明

locale デバイスロケール。

make デバイスのメーカー (Apple、Samsung など)。

model デバイスモデル (iPhone など)。

platform デバイスのプラットフォーム (ios、android など)。

セッション

属性 説明

session_id アプリセッションの一意の ID。

start_timestamp セッションの開始時間 (Unix 時間、ミリ秒単位)。

stop_timestamp セッションの終了時間 (Unix 時間、ミリ秒単位)。

63

Page 68: Amazon Pinpoint - 開発者ガイド - AWS Documentation€¢ AWS SDK for Ruby バージョン 1.0.0.rc2 以降。 • AWS SDK for Go バージョン 1.5.13 以降。• AWS SDK for

Amazon Pinpoint 開発者ガイドCloudTrail 内の Amazon Pinpoint 情報

AWS CloudTrail を使用した AmazonPinpoint API 呼び出しのログ作成

Amazon Pinpoint は、Amazon Pinpoint のユーザーやロール、または AWS のサービスによって実行されたアクションを記録するサービスである AWS CloudTrail と統合されています。証跡を作成する場合は、Amazon S3 バケット、Amazon CloudWatch Logs、Amazon CloudWatch Events への CloudTrailイベントの継続的な配信を有効にすることができます。CloudTrail によって収集された情報を使用して、リクエストの作成元の IP アドレス、リクエストの実行者、リクエストの実行日時などの詳細を調べて、Amazon Pinpoint に対してどのようなリクエストが行われたかを判断できます。

CloudTrail の詳細 (設定する方法や有効にする方法など) については、AWS CloudTrail User Guide を参照してください。

CloudTrail 内の Amazon Pinpoint 情報Amazon Pinpoint は CloudTrail ログファイルのイベントとして次のアクションを記録します。

• CreateApp• CreateCampaign• CreateImportJob• CreateSegment• DeleteAdmChannel• DeleteApnsChannel• DeleteApnsSandboxChannel• DeleteApnsVoipChannel• DeleteApnsVoipSandboxChannel• DeleteApp• DeleteBaiduChannel• DeleteCampaign• DeleteEmailChannel• DeleteEventStream• DeleteGcmChannel• DeleteSegment• DeleteSmsChannel• GetAdmChannel• GetApnsChannel• GetApnsSandboxChannel• GetApnsVoipChannel• GetApnsVoipSandboxChannel• GetApp• GetApplicationSettings• GetApps• GetBaiduChannel

64

Page 69: Amazon Pinpoint - 開発者ガイド - AWS Documentation€¢ AWS SDK for Ruby バージョン 1.0.0.rc2 以降。 • AWS SDK for Go バージョン 1.5.13 以降。• AWS SDK for

Amazon Pinpoint 開発者ガイドCloudTrail 内の Amazon Pinpoint 情報

• GetCampaign• GetCampaignActivities• GetCampaignVersion• GetCampaignVersions• GetCampaigns• GetEmailChannel• GetEventStream• GetGcmChannel• GetImportJob• GetImportJobs• GetSegment• GetSegmentImportJobs• GetSegmentVersion• GetSegmentVersions• GetSegments• GetSmsChannel• PutEventStream• UpdateAdmChannel• UpdateApnsChannel• UpdateApnsSandboxChannel• UpdateApnsVoipChannel• UpdateApnsVoipSandboxChannel• UpdateApplicationSettings• UpdateBaiduChannel• UpdateCampaign• UpdateEmailChannel• UpdateGcmChannel• UpdateSegment• UpdateSmsChannel

Important

次の Amazon Pinpoint アクションは CloudTrail に記録されません。

• GetEndpoint• SendMessages• SendUsersMessages• UpdateEndpoint• UpdateEndpointsBatch

各イベントまたはログエントリには、リクエストの生成者に関する情報が含まれます。この ID 情報は以下のことを確認するのに役立ちます。

• リクエストが、ルートと IAM ユーザー認証情報のどちらを使用して送信されたか.• リクエストが、ロールとフェデレーティッドユーザーのどちらの一時的なセキュリティ認証情報を使用

して送信されたか.• リクエストが、別の AWS サービスによって送信されたかどうか.

65

Page 70: Amazon Pinpoint - 開発者ガイド - AWS Documentation€¢ AWS SDK for Ruby バージョン 1.0.0.rc2 以降。 • AWS SDK for Go バージョン 1.5.13 以降。• AWS SDK for

Amazon Pinpoint 開発者ガイド例: Amazon Pinpoint ログファイルのエントリ

詳細については、「CloudTrail userIdentity 要素」を参照してください。

証跡を作成し、ログファイルを必要な期間 Amazon S3 バケットに保存することもできます。さらに、ログファイルを自動的にアーカイブまたは削除するように、Amazon S3 ライフサイクルルールを定義することもできます。デフォルトでは Amazon S3 のサーバー側の暗号化 (SSE) を使用して、ログファイルが暗号化されます。

ログファイルの配信が通知されるためには、新しいログファイルの配信時に Amazon SNS 通知が発行されるように CloudTrail を設定します。詳細については、「Configuring Amazon SNS Notifications forCloudTrail」を参照してください。

また、複数の AWS リージョンと複数の AWS アカウントからの Amazon Pinpoint ログファイルを 1 つのAmazon S3 バケットに集約することもできます。

詳細は、「Receiving CloudTrail Log Files from Multiple Regions」と「Receiving CloudTrail Log Files fromMultiple Accounts」を参照してください。

例: Amazon Pinpoint ログファイルのエントリ証跡は、指定した Amazon S3 バケットにイベントをログファイルとして配信するように設定できます。CloudTrail ログファイルには、1 つ以上のログエントリが含まれます。イベントは任意の発生元からの 1 つのリクエストを表し、リクエストされたアクション、アクションの日時、リクエストのパラメータなどに関する情報が含まれます。CloudTrail ログファイルは、パブリック API 呼び出しの順序付けられたスタックトレースではないため、特定の順序では表示されません。

以下の例は、GetCampaigns アクションと CreateCampaign アクションの CloudTrail ログエントリを示しています。

{ "Records": [ { "awsRegion": "us-east-1", "eventID": "example0-09a3-47d6-a810-c5f9fd2534fe", "eventName": "GetCampaigns", "eventSource": "pinpoint.amazonaws.com", "eventTime": "2018-02-03T00:56:48Z", "eventType": "AwsApiCall", "eventVersion": "1.05", "readOnly": true, "recipientAccountId": "123456789012", "requestID": "example1-b9bb-50fa-abdb-80f274981d60", "requestParameters": { "application-id": "example71dfa4c1aab66332a5839798f", "page-size": "1000" }, "responseElements": null, "sourceIPAddress": "192.0.2.0", "userAgent": "Jersey/${project.version} (HttpUrlConnection 1.8.0_144)", "userIdentity": { "accessKeyId": "AKIAIOSFODNN7EXAMPLE", "accountId": "123456789012", "arn": "arn:aws:iam::123456789012:root", "principalId": "123456789012", "sessionContext": { "attributes": { "creationDate": "2018-02-02T16:55:29Z", "mfaAuthenticated": "false" } }, "type": "Root"

66

Page 71: Amazon Pinpoint - 開発者ガイド - AWS Documentation€¢ AWS SDK for Ruby バージョン 1.0.0.rc2 以降。 • AWS SDK for Go バージョン 1.5.13 以降。• AWS SDK for

Amazon Pinpoint 開発者ガイド例: Amazon Pinpoint ログファイルのエントリ

} }, { "awsRegion": "us-east-1", "eventID": "example0-09a3-47d6-a810-c5f9fd2534fe", "eventName": "CreateCampaign", "eventSource": "pinpoint.amazonaws.com", "eventTime": "2018-02-03T01:05:16Z", "eventType": "AwsApiCall", "eventVersion": "1.05", "readOnly": false, "recipientAccountId": "123456789012", "requestID": "example1-b9bb-50fa-abdb-80f274981d60", "requestParameters": { "Description": "***", "HoldoutPercent": 0, "IsPaused": false, "MessageConfiguration": "***", "Name": "***", "Schedule": { "Frequency": "ONCE", "IsLocalTime": true, "StartTime": "2018-02-03T00:00:00-08:00", "Timezone": "utc-08" }, "SegmentId": "exampleda204adf991a80281aa0e591", "SegmentVersion": 1, "application-id": "example71dfa4c1aab66332a5839798f" }, "responseElements": { "ApplicationId": "example71dfa4c1aab66332a5839798f", "CreationDate": "2018-02-03T01:05:16.425Z", "Description": "***", "HoldoutPercent": 0, "Id": "example54a654f80948680cbba240ede", "IsPaused": false, "LastModifiedDate": "2018-02-03T01:05:16.425Z", "MessageConfiguration": "***", "Name": "***", "Schedule": { "Frequency": "ONCE", "IsLocalTime": true, "StartTime": "2018-02-03T00:00:00-08:00", "Timezone": "utc-08" }, "SegmentId": "example4da204adf991a80281example", "SegmentVersion": 1, "State": { "CampaignStatus": "SCHEDULED" }, "Version": 1 }, "sourceIPAddress": "192.0.2.0", "userAgent": "aws-cli/1.14.9 Python/3.4.3 Linux/3.4.0+ botocore/1.8.34", "userIdentity": { "accessKeyId": "AKIAIOSFODNN7EXAMPLE", "accountId": "123456789012", "arn": "arn:aws:iam::123456789012:user/userName", "principalId": "AIDAIHTHRCDA62EXAMPLE", "type": "IAMUser", "userName": "userName" } } ]}

67

Page 72: Amazon Pinpoint - 開発者ガイド - AWS Documentation€¢ AWS SDK for Ruby バージョン 1.0.0.rc2 以降。 • AWS SDK for Go バージョン 1.5.13 以降。• AWS SDK for

Amazon Pinpoint 開発者ガイドエンドポイントの削除

Amazon Pinpoint からデータを削除する

使用方法によっては、個人用と見なされる可能性のあるデータが Amazon Pinpoint に保存される場合があります。たとえば、Amazon Pinpoint の各エンドポイントには、そのユーザーの E メールアドレスまたは携帯電話番号などのエンドユーザーの連絡先情報が含まれています。

Amazon Pinpoint API を使用して、個人データを完全に削除することができます。このセクションには、個人用と見なされる可能性があるさまざまなタイプのデータを削除する手順が含まれています。

エンドポイントの削除エンドポイントは、顧客の 1 人に連絡する単一のメソッドを表します。各エンドポイントは、顧客の Eメールアドレス、モバイルデバイス識別子または E メールアドレスを参照することができます。多くの管轄区域では、この種の情報は、個人情報と見なされます。

このセクションの手順では、AWS CLI を使用して Amazon Pinpoint API を操作します。この手順は、AWS CLI がすでにインストールされ、設定されていることを前提としています。詳細については、AWS Command Line Interface ユーザーガイド の「AWS Command Line Interface のインストール」を参照してください。

AWS CLI を使用してエンドポイントを削除するには

• コマンドラインから、以下のコマンドを入力します。

aws pinpoint delete-endpoint --application-id example1884c7d659a2feaa0c5 --endpoint-id ad015a3bf4f1b2b0b82example

前述のコマンドでは、example1884c7d659a2feaa0c5 をエンドポイントが配置されているアプリケーションまたはプロジェクトの ID に置き換えます。また、ad015a3bf4f1b2b0b82example をエンドポイント自体の ID に置き換えます。

Amazon S3 に保存されているセグメントとエンドポイントデータの削除

Amazon Pinpoint コンソールまたは API を使用して、Amazon S3 バケットに保存されているファイルからセグメントをインポートすることができます。アプリケーション、セグメント、エンドポイントデータをAmazon Pinpoint から Amazon S3 バケットにエクスポートすることもできます。インポートおよびエクスポートされた両方のファイルには、E メールアドレス、携帯電話番号、エンドポイントの物理的な場所に関する情報を含む個人データが含まれています。

Amazon S3 バケットに対して配信するコンテンツには、お客様のコンテンツが含まれる場合があります。機密データの削除の詳細については、「S3 バケットを空にする方法」または「S3 バケットを削除する方法」を参照してください。

68

Page 73: Amazon Pinpoint - 開発者ガイド - AWS Documentation€¢ AWS SDK for Ruby バージョン 1.0.0.rc2 以降。 • AWS SDK for Go バージョン 1.5.13 以降。• AWS SDK for

Amazon Pinpoint 開発者ガイドAWS アカウントを解約すること

ですべての AWS データを削除する

AWS アカウントを解約することですべての AWSデータを削除する

AWS アカウントを解約することにより、Amazon Pinpoint に保存されたすべての個人データを削除することもできます。ただし、このアクションでは、他のすべての AWS サービスに保存した他のすべてのデータ (個人データと非個人データ) も削除されます。

AWS アカウントを解約しても、AWS アカウントのデータは 90 日間保持されます。この保持期間の終了時に、このデータは完全にまた元に戻すことができない形で削除されます。

Warning

次の手順では、すべての AWS サービスとリージョンにまたがる AWS アカウントに保存されているすべてのデータを完全に削除します。

AWS マネジメントコンソールを使用して AWS アカウントを解約することができます。

AWS アカウントを解約するには

1. https://console.aws.amazon.com で AWS マネジメントコンソール を開きます。2. https://console.aws.amazon.com/billing/home?#/account の [Account Settings] (アカウント設定) ペー

ジに移動します。

Warning

次の 2 つのステップでは、すべての AWS リージョンにまたがるすべての AWS サービスに保存したデータがすべて完全に削除されます。

3. [Close Account] で、AWS アカウントを解約した場合の結果について説明する免責事項を読みます。条項に同意する場合、チェックボックスをオンにして、[Close Account] を選択します。

4. 確認ダイアログボックスで [Close Account] を選択します。

69

Page 74: Amazon Pinpoint - 開発者ガイド - AWS Documentation€¢ AWS SDK for Ruby バージョン 1.0.0.rc2 以降。 • AWS SDK for Go バージョン 1.5.13 以降。• AWS SDK for

Amazon Pinpoint 開発者ガイドユーザー向けの IAM ポリシー

アクセス許可Amazon Pinpoint を使用するには、AWS アカウントのユーザーは、分析データの表示、ユーザーセグメントの定義、キャンペーンの作成およびデプロイなどのためにアクセス許可を必要とします。アプリがエンドポイントを登録し使用状況データを報告するため、アプリのユーザーも Amazon Pinpoint へのアクセスが必要です。Amazon Pinpoint 機能へのアクセス権限を付与するには、AWS Identity and AccessManagement (IAM) の Amazon Pinpoint アクションを許可するポリシー (p. 70)を作成します。

IAM は、AWS リソースへのアクセスを安全に制御するためのサービスです。IAM ポリシーには、特定のリソースでユーザーが実行できる特定のアクションを許可または拒否するステートメントが含まれています。Amazon Pinpoint は、IAM ポリシーの一連のアクション (p. 72)を提供し、Amazon Pinpoint ユーザーの詳細なアクセス権限を指定できます。重要なデータを公開やキャンペーンの漏洩をするような過度に寛容なポリシーを作成することなく、Amazon Pinpoint へのアクセスを適切なレベルにできます。たとえば、Amazon Pinpoint 管理者へは無制限のアクセスを許可し、分析のみにアクセスする必要のある組織内の個人へは読み取り専用アクセスを付与できます。

IAM ポリシーの詳細については、『IAM ユーザーガイド』の「IAM ポリシーの概要」を参照してください。

AWS Mobile Hub にプロジェクトを作成して Amazon Pinpoint へアプリを追加すると、Mobile Hub はアプリのユーザー認証のための AWS リソース (p. 76)を自動的にプロビジョニングします。Mobile Hub がAmazon Cognito ID プールを作成するので、アプリユーザーは AWS で認証できます。また、Mobile Hubは IAM ロールを作成し、アプリユーザーが Amazon Pinpoint で登録し使用状況データを報告するのを許可します。アプリの必要に応じて、これらのリソースをカスタマイズできます。

エンドポイント定義をインポートするには、Amazon Pinpoint に Amazon S3 バケットへの読み取り専用アクセス (p. 80)を許可する必要があります。

トピック• Amazon Pinpoint ユーザー向けの IAM ポリシー (p. 70)• Amazon Pinpoint アプリのユーザー認証 (p. 76)• AWS Mobile Hub サービスロール (p. 79)• セグメントをインポートするための IAM ロール (p. 80)• セグメントをエクスポートするための IAM ロール (p. 81)• Kinesis にイベントをストリーミングするための IAM ロール (p. 84)

Amazon Pinpoint ユーザー向けの IAM ポリシーAWS Identity and Access Management (IAM) ポリシーに Amazon Pinpoint API アクションを追加して、アカウントの Amazon Pinpoint ユーザーに対する特定のアクションを許可または拒否できます。ポリシーのAmazon Pinpoint API アクションは Amazon Pinpoint コンソール内でユーザーが実行できる操作を制御します。これらのアクションはまた、AWS SDK、AWS CLI、Amazon Pinpoint REST API を使用して実行できるプログラムによるリクエストも制御します。

ポリシーでは、mobiletargeting 名前空間に、コロンおよび GetSegments などのアクションの名前をつけて、各アクションを指定します。ほとんどのアクションは、特定の URI および HTTP メソッドを使用した Amazon Pinpoint REST API へのリクエストに対応しています。たとえば、ユーザーポリシーでmobiletargeting:GetSegments アクションを許可する場合、ユーザーは、/apps/{application-id}/segments URI に対する HTTP GET リクエストを行うことができます。またこのポリシーでは、コンソールでアプリケーションのセグメントを表示し、AWS SDK または AWS CLI を使用してセグメントを取得することもできます。

各アクションは、Amazon リソースネーム (ARN) により、ポリシーステートメントで識別する、特定のAmazon Pinpoint リソースで実行されます。たとえば、mobiletargeting:GetSegments アクション

70

Page 75: Amazon Pinpoint - 開発者ガイド - AWS Documentation€¢ AWS SDK for Ruby バージョン 1.0.0.rc2 以降。 • AWS SDK for Go バージョン 1.5.13 以降。• AWS SDK for

Amazon Pinpoint 開発者ガイドポリシーの例

が、ARN を使用して指定した特定のアプリ arn:aws:mobiletargeting:region:account-id:/apps/application-id で実行されます。

ワイルドカード ("*") を使用して、一般的にすべての Amazon Pinpoint アクションまたはリソースを参照できます。たとえば、すべてのリソースですべてのアクションを許可するには、ポリシーステートメントに以下を含めます。

"Effect": "Allow","Action": "mobiletargeting:*","Resource": "*"

ポリシーの例次の例は、IAM ポリシーを使用して Amazon Pinpoint アクセスを管理する方法を示しています。

Amazon Pinpoint 管理者次の管理者ポリシーは、Amazon Pinpoint アクションとリソースへのフルアクセスを許可します。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "mobiletargeting:*", "mobileanalytics:*" ], "Resource": "*" } ]}

Amazon Pinpoint アクションに加えて、このポリシーにより mobileanalytics:* を使用したすべてのAmazon Mobile Analytics アクションが許可されます。Amazon Pinpoint および Amazon Mobile Analyticsは、アプリケーションに関するデータを共有するので、Amazon Pinpoint ユーザー用のポリシーで、両方のサービスのアクセス許可を含める必要があります。

読み取り専用アクセス次のポリシーでは、アカウント内のすべてのアプリケーションに対して読み取り専用アクセスを許可します。

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "mobiletargeting:GetEndpoint", "mobiletargeting:GetSegment*", "mobiletargeting:GetCampaign*", "mobiletargeting:GetImport*", "mobiletargeting:GetApnsChannel", "mobiletargeting:GetGcmChannel", "mobiletargeting:GetApplicationSettings", "mobiletargeting:GetEventStream" ], "Effect": "Allow", "Resource": "arn:aws:mobiletargeting:*:account-id:apps/*"

71

Page 76: Amazon Pinpoint - 開発者ガイド - AWS Documentation€¢ AWS SDK for Ruby バージョン 1.0.0.rc2 以降。 • AWS SDK for Go バージョン 1.5.13 以降。• AWS SDK for

Amazon Pinpoint 開発者ガイドIAM ポリシーの API アクション

}, { "Action": "mobiletargeting:GetReports", "Effect": "Allow", "Resource": "arn:aws:mobiletargeting:*:account-id:reports" }, { "Action": "mobileanalytics:ListApps", "Effect": "Allow", "Resource": "*" } ]}

IAM ポリシーの API アクションIAM ポリシーに次の API アクションを追加して、アカウント内の Amazon Pinpoint ユーザーに許可される操作を管理できます。

mobiletargeting:GetEndpoint

特定のエンドポイントに関する情報を取得します。• URI - /apps/{application-id}/endpoints/{endpoint-id}• メソッド - GET• リソース ARN – arn:aws:mobiletargeting:region:account-id:apps/application-id/endpoints/endpoint-id

mobiletargeting:UpdateEndpoint

エンドポイントを作成、または、エンドポイントの情報を更新します。• URI - /apps/{application-id}/endpoints/{endpoint-id}• メソッド - PUT• リソース ARN – arn:aws:mobiletargeting:region:account-id:apps/application-id/endpoints/endpoint-id

mobiletargeting:UpdateEndpointsBatch

バッチオペレーションとしてエンドポイントを作成または更新します。• URI - /apps/{application-id}/endpoints• メソッド - PUT• リソース ARN – arn:aws:mobiletargeting:region:account-id:apps/application-id

mobiletargeting:CreateSegment

アプリによって Amazon Pinpoint に報告されたエンドポイントデータに基づくセグメントを作成します。ユーザーが Amazon Pinpoint の外部からエンドポイントデータをインポートしてセグメントを作成することを許可するには、 mobiletargeting:CreateImportJob アクションを許可します。• URI - /apps/{application-id}/segments• メソッド - POST• リソース ARN – arn:aws:mobiletargeting:region:account-id:apps/application-id

mobiletargeting:DeleteSegment

特定のセグメントを削除します。• URI - /apps/{application-id}/segments/{segment-id}• メソッド - DELETE• リソース ARN – arn:aws:mobiletargeting:region:account-id:apps/application-id/segments/segment-id

72

Page 77: Amazon Pinpoint - 開発者ガイド - AWS Documentation€¢ AWS SDK for Ruby バージョン 1.0.0.rc2 以降。 • AWS SDK for Go バージョン 1.5.13 以降。• AWS SDK for

Amazon Pinpoint 開発者ガイドIAM ポリシーの API アクション

mobiletargeting:GetSegment

特定のセグメントに関する情報を取得します。• URI - /apps/{application-id}/segments/{segment-id}• メソッド - GET• リソース ARN – arn:aws:mobiletargeting:region:account-id:apps/application-id/segments/segment-id

mobiletargeting:GetSegments

アプリケーションのセグメントについての情報を取得します。• URI - /apps/{application-id}/segments• メソッド - GET• リソース ARN – arn:aws:mobiletargeting:region:account-id:apps/application-id

mobiletargeting:GetSegmentImportJobs

Amazon S3 からエンドポイント定義をインポートしてセグメントを作成するジョブに関する情報を取得します。• URI - /apps/{application-id}/segments/{segment-id}/jobs/import• メソッド - GET• リソース ARN – arn:aws:mobiletargeting:region:account-id:apps/application-id/segments/segment-id

mobiletargeting:GetSegmentVersion

特定のセグメントバージョンに関する情報を取得します。• URI - /apps/{application-id}/segments/{segment-id}/versions/{version-id}• メソッド - GET• リソース ARN – arn:aws:mobiletargeting:region:account-id:apps/application-id/segments/segment-id

mobiletargeting:GetSegmentVersions

現在および以前のセグメントのバージョンに関する情報を取得します。• URI - /apps/{application-id}/segments/{segment-id}/versions• メソッド - GET• リソース ARN – arn:aws:mobiletargeting:region:account-id:apps/application-id/segments/segment-id

mobiletargeting:UpdateSegment

特定のセグメントを更新します。• URI - /apps/{application-id}/segments/{segment-id}• メソッド - PUT• リソース ARN – arn:aws:mobiletargeting:region:account-id:apps/application-id/segments/segment-id

mobiletargeting:CreateCampaign

アプリケーションのキャンペーンを作成します。• URI - /apps/{application-id}/campaigns• メソッド - POST• リソース ARN – arn:aws:mobiletargeting:region:account-id:apps/application-id

mobiletargeting:DeleteCampaign

特定のキャンペーンを削除します。

73

Page 78: Amazon Pinpoint - 開発者ガイド - AWS Documentation€¢ AWS SDK for Ruby バージョン 1.0.0.rc2 以降。 • AWS SDK for Go バージョン 1.5.13 以降。• AWS SDK for

Amazon Pinpoint 開発者ガイドIAM ポリシーの API アクション

• URI - /apps/{application-id}/campaigns/{campaign-id}• メソッド - DELETE• リソース ARN – arn:aws:mobiletargeting:region:account-id:/apps/application-id/campaigns/campaign-id

mobiletargeting:GetCampaign

特定のキャンペーンに関する情報を取得します。• URI - /apps/{application-id}/campaigns/{campaign-id}• メソッド - GET• リソース ARN – arn:aws:mobiletargeting:region:account-id:apps/application-id/campaigns/campaign-id

mobiletargeting:GetCampaignActivities

キャンペーンによって実行されたアクティビティに関する情報を取得します。• URI - /apps/{application-id}/campaigns/{campaign-id}/activities• メソッド - GET• リソース ARN – arn:aws:mobiletargeting:region:account-id:apps/application-id/campaigns/campaign-id

mobiletargeting:GetCampaigns

アプリケーションのすべてのキャンペーンに関する情報を取得します。• URI - /apps/{application-id}/campaigns• メソッド - GET• リソース ARN – arn:aws:mobiletargeting:region:account-id:apps/application-id

mobiletargeting:GetCampaignVersion

特定のキャンペーンのバージョンに関する情報を取得します。• URI - /apps/{application-id}/campaigns/{campaign-id}/versions/{version-id}• メソッド - GET• リソース ARN – arn:aws:mobiletargeting:region:account-id:apps/application-id/campaigns/campaign-id

mobiletargeting:GetCampaignVersions

現在および以前のキャンペーンのバージョンに関する情報を取得します。• URI - /apps/{application-id}/campaigns/{campaign-id}/versions• メソッド - GET• リソース ARN – arn:aws:mobiletargeting:region:account-id:apps/application-id/campaigns/campaign-id

mobiletargeting:UpdateCampaign

特定のキャンペーンを更新します。• URI - /apps/{application-id}/campaigns/{campaign-id}• メソッド - PUT• リソース ARN – arn:aws:mobiletargeting:region:account-id:apps/application-id/campaigns/campaign-id

mobiletargeting:CreateImportJob

Amazon S3 からエンドポイント定義をインポートしてセグメントを作成します。• URI - /apps/{application-id}/jobs/import• メソッド - POST• リソース ARN – arn:aws:mobiletargeting:region:account-id:apps/application-id

74

Page 79: Amazon Pinpoint - 開発者ガイド - AWS Documentation€¢ AWS SDK for Ruby バージョン 1.0.0.rc2 以降。 • AWS SDK for Go バージョン 1.5.13 以降。• AWS SDK for

Amazon Pinpoint 開発者ガイドIAM ポリシーの API アクション

mobiletargeting:GetImportJob

特定のインポートジョブに関する情報を取得します。• URI - /apps/{application-id}/jobs/import/{job-id}• メソッド - GET• リソース ARN – arn:aws:mobiletargeting:region:account-id:apps/application-id/jobs/import/job-id

mobiletargeting:GetImportJobs

アプリケーションのすべてのインポートジョブに関する情報を取得します。• URI - /apps/{application-id}/jobs/import• メソッド - GET• リソース ARN – arn:aws:mobiletargeting:region:account-id:apps/application-id

mobiletargeting:DeleteApnsChannel

アプリケーションの APN チャネルを削除します。• URI - /apps/{application-id}/channels/apns• メソッド - DELETE• リソース ARN – arn:aws:mobiletargeting:region:account-id:apps/application-id/channels/apns

mobiletargeting:GetApnsChannel

アプリケーションの APN チャネルについての情報を取得します。• URI - /apps/{application-id}/channels/apns• メソッド - GET• リソース ARN – arn:aws:mobiletargeting:region:account-id:apps/application-id/channels/apns

mobiletargeting:UpdateApnsChannel

Apple Push Notification Service (APN) 証明書とプライベートキーを更新して、Amazon Pinpoint がiOS アプリにプッシュ通知を送信できるようにします。• URI - /apps/{application-id}/channels/apns• メソッド - PUT• リソース ARN – arn:aws:mobiletargeting:region:account-id:apps/application-id/channels/apns

mobiletargeting:DeleteGcmChannel

GCM チャネルを削除します。• URI - /apps/{application-id}/channels/gcm• メソッド - DELETE• リソース ARN – arn:aws:mobiletargeting:region:account-id:apps/application-id/channels/gcm

mobiletargeting:GetGcmChannel

アプリケーションの GCM チャネルについての情報を取得します。• URI - /apps/{application-id}/channels/gcm• メソッド - GET• リソース ARN – arn:aws:mobiletargeting:region:account-id:apps/application-id/channels/gcm

mobiletargeting:UpdateGcmChannel

Firebase Cloud Messaging (FCM) または Google Cloud Messaging (GCM) の API キーを更新して、Amazon Pinpoint が Android アプリにプッシュ通知を送信できるようにします。

75

Page 80: Amazon Pinpoint - 開発者ガイド - AWS Documentation€¢ AWS SDK for Ruby バージョン 1.0.0.rc2 以降。 • AWS SDK for Go バージョン 1.5.13 以降。• AWS SDK for

Amazon Pinpoint 開発者ガイドアプリのユーザー認証

• URI - /apps/{application-id}/channels/gcm• メソッド - PUT• リソース ARN – arn:aws:mobiletargeting:region:account-id:apps/application-id/channels/gcm

mobiletargeting:GetApplicationSettings

アプリケーションのデフォルト設定を取得します。• URI - /apps/{application-id}/settings• メソッド - GET• リソース ARN – arn:aws:mobiletargeting:region:account-id:apps/application-id

mobiletargeting:UpdateApplicationSettings

アプリケーションのデフォルト設定を更新します。• URI - /apps/{application-id}/settings• メソッド - PUT• リソース ARN – arn:aws:mobiletargeting:region:account-id:apps/application-id

mobiletargeting:DeleteEventStream

アプリケーションのイベントストリームを削除します。• URI - /apps/{application-id}/eventstream/• メソッド - DELETE• リソース ARN – arn:aws:mobiletargeting:region:account-id:apps/application-id/eventstream

mobiletargeting:GetEventStream

アプリケーションのイベントストリームに関する情報を取得します。• URI - /apps/{application-id}/eventstream/• メソッド - GET• リソース ARN – arn:aws:mobiletargeting:region:account-id:apps/application-id/eventstream

mobiletargeting:PutEventStream

アプリケーションのイベントストリームを作成または更新します。• URI - /apps/{application-id}/eventstream/• メソッド - PUT• リソース ARN – arn:aws:mobiletargeting:region:account-id:apps/application-id/eventstream

mobiletargeting:GetReports

Amazon Pinpoint コンソールで分析を表示します。• URI - 該当なし• メソッド - 該当なし• リソース ARN – arn:aws:mobiletargeting:region:account-id:reports

Amazon Pinpoint アプリのユーザー認証Amazon Pinpoint と統合するには、エンドポイントを登録して、使用量をレポートするために、アプリでユーザーを認証する必要があります。AWS Mobile Hub でプロジェクトを作成して Amazon Pinpoint にア

76

Page 81: Amazon Pinpoint - 開発者ガイド - AWS Documentation€¢ AWS SDK for Ruby バージョン 1.0.0.rc2 以降。 • AWS SDK for Go バージョン 1.5.13 以降。• AWS SDK for

Amazon Pinpoint 開発者ガイド認証されていないロール

プリを追加すると、ユーザー認証を実装するために、Mobile Hub は次の AWS リソースを自動的にプロビジョニングします。

Amazon Cognito ID プール

Amazon Cognito はユーザーの一意の ID を作成し、アプリのバックエンド AWS リソースへの一時的アクセスを許可する認証情報を提供します。ID プールは、アプリユーザーのユーザー ID データのストアです。

Amazon Cognito は認証されたユーザーと認証されていないユーザーに認証情報を提供します。認証されたユーザーには、Facebook、Amazon、または Google などのパブリック ID プロバイダーを使用してサインインしたユーザーが含まれます。認証されていないユーザーとは、ゲストユーザーなどアプリにサインインしていないユーザーです。

認証されたユーザーと認証されていないユーザーの、個別の AWS Identity and AccessManagement(IAM) ロールによって AWS リソースへのユーザーのアクセスを制御します。これらのロールは、ID プールに割り当てられている必要があります。

認証されていないユーザーの IAM ロール

認証されていないユーザーに AWS リソースへの制限付きのアクセス権を委任する、アクセス権限ポリシーが含まれています。必要に応じてロールをカスタマイズできます。デフォルトでは、このロールが Amazon Cognito ID プールに割り当てられます。

アプリでパブリック ID プロバイダーで認証するように要求する場合は、認証されたユーザーの IAM ロールを作成して、このロールを ID プールに割り当てる必要があります。Amazon Pinpoint をサポートするには、認証されたロールのアクセス権限に、Mobile Hub によって作成された認証されていないロールと同じアクセス権限が含まれている必要があります。

IAM ロールの詳細については、IAM ユーザーガイドの「IAM ロール」を参照してください。

アプリのコードでは、ユーザーの認証に Amazon Cognito と IAM が次のように使用されます。

1. アプリのコードは、Amazon Cognito 認証情報プロバイダーを構築します。2. Amazon Pinpoint クライアントを初期化するときに、アプリのコードはプロバイダーをパラメータとし

て渡します。3. この Amazon Pinpoint クライアントは、ID プールのユーザー ID の認証情報を取得するために、プロバ

イダーを使用します。新しい ID に新しいユーザーが割り当てられます。4. ユーザーは、ID プールと関連付けられた IAM ロールによって付与されたアクセス権限を取得します。

Amazon Cognito のユーザー認証方法の詳細については、Amazon Cognito 開発者ガイドの、「AmazonCognito Identity: フェデレーテッドアイデンティティを使用する」を参照してください。

認証されていないロールMobile Hub によって作成された認証されていないロールによって、アプリのユーザーは Amazon Pinpointにデータを送信することができます。ロール名には、「unauth_MOBILEHUB」が含まれます。たとえば、IAM コンソールに、MySampleApp_unauth_MOBILEHUB_1234567890 のような名前がついたロールが表示されます。

2 つのタイプのポリシーでアクセス権限を委任する IAM ロール。

• アクセス権限ポリシー – ロールのユーザーに、指定されたリソースの指定されたアクションを実行するアクセス権限を付与します。

• 信頼ポリシー – ロールを引き受け、アクセス権限の取得を許可されるエンティティを指定します。

77

Page 82: Amazon Pinpoint - 開発者ガイド - AWS Documentation€¢ AWS SDK for Ruby バージョン 1.0.0.rc2 以降。 • AWS SDK for Go バージョン 1.5.13 以降。• AWS SDK for

Amazon Pinpoint 開発者ガイド認証されていないロール

アクセス権限ポリシー認証されていないロールには 2 つのアクセス権限ポリシーが含まれています。以下のアクセス権限ポリシーでは、アプリユーザーは Amazon Pinpoint に登録し、アプリの使用状況イベントをレポートできます。Mobile Hub はポリシーに、「mobileanalytics_MOBILEHUB」を含む名前を割り当てます。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "mobileanalytics:PutEvents" ], "Resource": [ "*" ] }, { "Effect": "Allow", "Action": [ "mobiletargeting:UpdateEndpoint" ], "Resource": [ "arn:aws:mobiletargeting:*:*:apps/*" ] } ]}

アプリが Amazon Pinpoint に統合されると、アプリは Amazon Pinpoint に、新しいユーザーがアプリセッションを開始したときのエンドポイントを登録します。ユーザーが新しいセッションを開始するたびに、アプリは更新されたエンドポイントデータを Amazon Pinpoint に送信します。

以下のアクセス権限ポリシーでは、アプリユーザーはアプリの Amazon Cognito ID プールを使用して IDを確立できます。Mobile Hub はポリシーに、「signin_MOBILEHUB」を含む名前を割り当てます。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "cognito-identity:GetId" ], "Resource": [ "arn:aws:cognito-identity:*:*:identityPool/us-east-1:1a2b3c4d-5e6f-7g8h-9i0j-1k2l3m4n5o6p" ] } ]}

信頼ポリシーAmazon Cognito が ID プールで認証されていないユーザーのロールを引き受けることができるように、Mobile Hub はロールに以下の信頼ポリシーを追加します。

{ "Version": "2012-10-17",

78

Page 83: Amazon Pinpoint - 開発者ガイド - AWS Documentation€¢ AWS SDK for Ruby バージョン 1.0.0.rc2 以降。 • AWS SDK for Go バージョン 1.5.13 以降。• AWS SDK for

Amazon Pinpoint 開発者ガイドAWS Mobile Hub サービスロール

"Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Federated": "cognito-identity.amazonaws.com" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "cognito-identity.amazonaws.com:aud": "us-east-1:1a2b3c4d-5e6f-7g8h-9i0j-1k2l3m4n5o6p" }, "ForAnyValue:StringLike": { "cognito-identity.amazonaws.com:amr": "unauthenticated" } } } ]}

認証されたロールに割り当てられた信頼ポリシーの例については、Amazon Cognito 開発者ガイドの「ロールベースアクセスコントロール」を参照してください。

AWS Mobile Hub サービスロールMobile Hub コンソールで AWS リソースとサービスを管理するためのワンタイムリクエストに同意するときに、AWS Mobile Hub は AWS アカウントに AWS Identity and Access Management (IAM) ロールを作成します。このロールは MobileHub_Service_Role と呼ばれ、Mobile Hub が AWS リソースとサービスを Mobile Hub プロジェクトのために作成し変更するのを許可します。

Mobile Hub サービスロールの詳細については、『AWS Mobile Hub 開発者ガイド』の「役立つ Mobile Hubサービスロールとポリシー」を参照してください。

Amazon Pinpoint にアプリを追加するには、Mobile Hub プロジェクトを作成し、ユーザーエンゲージメントの機能が含まれるように設定します。この機能をサポートするために、Mobile Hub は Mobile Hub サービスロールに以下のアクセス権限を追加します。

{ "Effect": "Allow", "Action": [ "mobiletargeting:UpdateApnsChannel", "mobiletargeting:UpdateApnsSandboxChannel", "mobiletargeting:UpdateGcmChannel", "mobiletargeting:DeleteApnsChannel", "mobiletargeting:DeleteApnsSandboxChannel", "mobiletargeting:DeleteGcmChannel" ], "Resource": [ "arn:aws:mobiletargeting:*:*:apps/*/channels/*" ]}

これらのアクセス権限により、Mobile Hub は Amazon Pinpoint が iOS および Android のプッシュ通知サービスにメッセージを配信するのに使用するチャネルを管理できます。Apple Push NotificationService、Firebase クラウドメッセージング、または Google クラウドメッセージングのための認証情報を提供すると、Mobile Hub はチャネルを作成または更新します。Mobile Hub コンソールまたは AmazonPinpoint コンソールを使用して認証情報を提供できます。

79

Page 84: Amazon Pinpoint - 開発者ガイド - AWS Documentation€¢ AWS SDK for Ruby バージョン 1.0.0.rc2 以降。 • AWS SDK for Go バージョン 1.5.13 以降。• AWS SDK for

Amazon Pinpoint 開発者ガイドセグメントをインポートするための IAM ロール

セグメントをインポートするための IAM ロールAmazon Pinpoint では、AWS アカウントの Amazon S3 バケットからエンドポイント定義をインポートすることでユーザーセグメントを定義します。インポートする前に、必要なアクセス権限を AmazonPinpoint に与える必要があります。AWS Identity and Access Management (IAM) ロールを作成し、次のポリシーをロールにアタッチします。

• AmazonS3ReadOnlyAccess AWS 管理ポリシー。このポリシーは AWS により作成および管理され、Amazon S3 バケットに読み取り専用アクセスを付与します。

• Amazon Pinpoint がロールを引き受けるのを許可する信頼ポリシー。

IAM ロールの詳細については、IAM ユーザーガイドの「IAM ロール」を参照してください。

ロールの作成が完了したら、Amazon Pinpoint を使用してセグメントをインポートできます。AWS SDKfor Java を使用してセグメントをインポートする方法の例については、セグメントのインポート (p. 45) を参照してください。Amazon S3 バケットの作成、エンドポイントファイルの作成、およびコンソールを使用したセグメントのインポートの詳細については、『Amazon Pinpoint ユーザーガイド』の「セグメントのインポート」を参照してください。

信頼ポリシーAmazon Pinpoint が IAM ロールを引き受けるのを許可し、AmazonS3ReadOnlyAccess ポリシーによって許可されているアクションを実行するには、ロールに次の信頼ポリシーをアタッチします。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "pinpoint.amazonaws.com" }, "Action": "sts:AssumeRole" } ]}

IAM ロールの作成 (AWS CLI)IAM ロールを作成するには、AWS Command Line Interface(AWS CLI) を使用して、次の手順を実行します。

AWS CLI, をインストールしていない場合、AWS Command Line Interface ユーザーガイド の「AWS コマンドラインインターフェースの設定」を参照してください。

AWS CLI を使用して IAM ロールを作成するには

1. ロールの信頼ポリシーを含む JSON ファイルを作成し、ローカルにファイルを保存します。このトピックで提供されている信頼ポリシーをコピーできます。

2. create-role コマンドを使用して、ロールを作成し、信頼ポリシーをアタッチします。

aws iam create-role --role-name PinpointSegmentImport --assume-role-policy-document file://PinpointImportTrustPolicy.json

file:// に続けて、信頼ポリシーを含む JSON ファイル へのパスを指定します。

80

Page 85: Amazon Pinpoint - 開発者ガイド - AWS Documentation€¢ AWS SDK for Ruby バージョン 1.0.0.rc2 以降。 • AWS SDK for Go バージョン 1.5.13 以降。• AWS SDK for

Amazon Pinpoint 開発者ガイドセグメントをエクスポートするための IAM ロール

このコマンドを実行すると、AWS CLI は、ターミナルに次の出力を表示します。

{ "Role": { "AssumeRolePolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "Service": "pinpoint.amazonaws.com" } } ] }, "RoleId": "AIDACKCEVSQ6C2EXAMPLE", "CreateDate": "2016-12-20T00:44:37.406Z", "RoleName": "PinpointSegmentImport", "Path": "/", "Arn": "arn:aws:iam::111122223333:role/PinpointSegmentImport" }}

3. attach-role-policy コマンドを使用して、AmazonS3ReadOnlyAccess AWS 管理ポリシーをロールにアタッチします。

aws iam attach-role-policy --policy-arn arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess --role-name PinpointSegmentImport

セグメントをエクスポートするための IAM ロールエンドポイントのリストを取得するには、エクスポートジョブを作成します。エクスポートジョブを作成したら、プロジェクト ID を指定します。また、セグメント ID をオプションで指定できます。AmazonPinpoint は、プロジェクトまたはセグメントに関連付けられたエンドポイントのリストを Amazon SimpleStorage Service (Amazon S3) バケットにエクスポートします。結果のファイルには、エンドポイントとその属性 (チャネル、アドレス、オプトイン/オプトアウト状態、作成日、エンドポイント ID など) のリストが JSON 形式で含まれています。

エクスポートジョブを作成するには、Amazon Pinpoint を使用して Amazon S3 バケットに書き込むことを許可する IAM ロールを設定する必要があります。ロールを設定するプロセスは、2 つのステップで構成されます。

1. エンティティ (この場合は Amazon Pinpoint) を使用して特定の Amazon S3 バケットに書き込むことを許可する IAM ポリシーを作成します。

2. IAM ロールを作成して、ポリシーをアタッチします。

このセクションには、これらのステップのいずれも完了する手順が含まれています。これらの手順は、エクスポートされたセグメントの保存を目的として、Amazon S3 バケットだけでなく、そのバケット内に既にフォルダを作成していることを前提としています。バケットの作成の詳細については、『AmazonSimple Storage Service 入門ガイド』の「バケットの作成」を参照してください。

また、これらの手順でも、AWS CLI がすでにインストールされ、設定されていることを前提としています。AWS CLI の設定の詳細については、『AWS Command Line Interface ユーザーガイド』の「AWSCommand Line Interface のインストール」を参照してください。

81

Page 86: Amazon Pinpoint - 開発者ガイド - AWS Documentation€¢ AWS SDK for Ruby バージョン 1.0.0.rc2 以降。 • AWS SDK for Go バージョン 1.5.13 以降。• AWS SDK for

Amazon Pinpoint 開発者ガイドステップ 1: IAM ポリシーの作成

ステップ 1: IAM ポリシーの作成IAM ポリシーは、アイデンティティやリソースなどのエンティティのアクセス許可を定義します。Amazon Pinpoint エンドポイントをエクスポートするためのロールを作成するには、特定の AmazonS3 バケットの特定のフォルダに書き込むアクセス許可を付与するポリシーを作成する必要があります。次のポリシー例では、最小限の権限、つまり、1 つのタスクを実行するのに必要なアクセス許可のみを付与するセキュリティプラクティスを示します。

IAM ポリシーを作成するには

1. テキストエディタで新規ファイルを作成します。ファイルに次のコードを貼り付けます。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowUserToSeeBucketListInTheConsole", "Action": [ "s3:ListAllMyBuckets", "s3:GetBucketLocation" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::*" ] }, { "Sid": "AllowRootAndHomeListingOfBucket", "Action": [ "s3:ListBucket" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::example-bucket" ], "Condition": { "StringEquals": { "s3:delimiter": [ "/" ], "s3:prefix": [ "", "Exports/" ] } }, }, { "Sid": "AllowListingOfUserFolder", "Action": [ "s3:ListBucket" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::example-bucket" ], "Condition": { "StringLike": { "s3:prefix": [ "Exports/*" ] } } }, { "Sid": "AllowAllS3ActionsInUserFolder", "Action": [ "s3:*" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::example-bucket/Exports/*" ] } ]

82

Page 87: Amazon Pinpoint - 開発者ガイド - AWS Documentation€¢ AWS SDK for Ruby バージョン 1.0.0.rc2 以降。 • AWS SDK for Go バージョン 1.5.13 以降。• AWS SDK for

Amazon Pinpoint 開発者ガイドステップ 2: IAM ロールを作成する

}

上記のコードでは、example-bucket のすべてのインスタンスを、セグメント情報をエクスポートするフォルダを含む Amazon S3 の名前に置き換えます。また、例のすべてのインスタンスをフォルダの名前に置き換えます。

終了したら、s3policy.json としてファイルを保存します。2. コマンドラインで、s3policy.json があるディレクトリに移動します。次のコマンドを入力してポ

リシーを作成します。

aws iam create-policy --policy-name s3ExportPolicy --policy-document file://s3policy.json

ポリシーが正常に作成されたら、次のような出力が表示されます。

{ "Policy": { "CreateDate": "2018-04-11T18:44:34.805Z", "IsAttachable": true, "DefaultVersionId": "v1", "AttachmentCount": 0, "PolicyId": "ANPAJ2YJQRJCG3EXAMPLE", "UpdateDate": "2018-04-11T18:44:34.805Z", "Arn": "arn:aws:iam::123456789012:policy/s3ExportPolicy", "PolicyName": "s3ExportPolicy", "Path": "/" }}

ポリシーの Amazon リソースネーム (ARN) (前述の例の arn:aws:iam::123456789012:policy/s3ExportPolicy) をコピーします。次のセクションでは、ロールを作成するときに、この ARN を指定する必要があります。

Note

CreatePolicy オペレーションを実行する権限がアカウントに付与されていないというメッセージが表示された場合は、新しい IAM ポリシーやロールの作成を可能にするポリシーをユーザーアカウントにアタッチする必要があります。詳細については、『IAM ユーザーガイド』の「IAM ポリシーをアタッチする (コンソール)」を参照してください。

ステップ 2: IAM ロールを作成するIAM ポリシーが作成され、ロールを作成してそのポリシーをアタッチできるようになりました。IAM ロールにはそれぞれ、信頼ポリシーが含まれます。信頼ポリシーは、ロールを引き受けることができるエンティティを指定するルールのセットです。このセクションでは、Amazon Pinpoint がロールを引き受けることを許可する信頼ポリシーを作成します。次に、ロール自体を作成し、前のセクションで作成したポリシーをアタッチします。

IAM ロールを作成するには

1. テキストエディタで新規ファイルを作成します。ファイルに次のコードを貼り付けます。

{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow",

83

Page 88: Amazon Pinpoint - 開発者ガイド - AWS Documentation€¢ AWS SDK for Ruby バージョン 1.0.0.rc2 以降。 • AWS SDK for Go バージョン 1.5.13 以降。• AWS SDK for

Amazon Pinpoint 開発者ガイドKinesis にイベントをストリーミングするための IAM ロール

"Principal":{ "Service":"pinpoint.amazonaws.com" }, "Action":"sts:AssumeRole" } ]}

trustpolicy.json という名前でファイルを保存します。2. コマンドラインで、trustpolicy.json があるディレクトリに移動します。次のコマンドを入力し

て新しいロールを作成します。

aws iam create-role --role-name s3ExportRole --assume-role-policy-document file://trustpolicy.json

コマンドが正常に実行された場合は、次のような出力が表示されます。

{ "Role": { "RoleName": "s3ExportRole", "AssumeRolePolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "pinpoint.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }, "RoleId": "AROAICPO353GIPEXAMPLE", "Arn": "arn:aws:iam::123456789012:role/s3ExportRole", "CreateDate": "2018-04-11T18:52:36.712Z", "Path": "/" } }

3. コマンドラインに次のコマンドを入力し、前のセクションで作成したポリシーを、先ほど作成したロールにアタッチします。

aws iam attach-role-policy --policy-arn arn:aws:iam::123456789012:policy/s3ExportPolicy --role-name s3ExportRole

前述のコマンドで、arn:aws:iam::123456789012:policy/s3ExportPolicy を、前のセクションで作成したポリシーの ARN に置き換えます。

Kinesis にイベントをストリーミングするためのIAM ロール

Amazon Pinpoint では、アプリから AWS アカウントの Kinesis ストリームまたは Amazon Kinesis DataFirehose 配信ストリームに、自動的にアプリの使用状況データまたはイベントデータを送信できます。Amazon Pinpoint でイベントデータのストリーミングを開始する前に、Amazon Pinpoint に必要なアクセス権限を割り当てる必要があります。

84

Page 89: Amazon Pinpoint - 開発者ガイド - AWS Documentation€¢ AWS SDK for Ruby バージョン 1.0.0.rc2 以降。 • AWS SDK for Go バージョン 1.5.13 以降。• AWS SDK for

Amazon Pinpoint 開発者ガイドアクセス権限ポリシー

コンソールを使用してイベントストリーミングをセットアップする場合、Amazon Pinpoint は自動的に必要なアクセス権限を持つ AWS Identity and Access Management (IAM) ロールを作成します。詳細については、『Amazon Pinpoint ユーザーガイド』の「Amazon Pinpoint イベントを Amazon Kinesis へストリーミングする」を参照してください。

手動でロールを作成する場合は、次のポリシーをロールにアタッチします。

• Amazon Pinpoint がストリームにレコードを送信するためのアクセス権限ポリシー。• Amazon Pinpoint がロールを引き受けるのを許可する信頼ポリシー。

IAM ロールの詳細については、IAM ユーザーガイドの「IAM ロール」を参照してください。

ロールの作成が完了したら、Amazon Pinpoint を設定して自動的にストリームにイベントを送信できます。詳細については、「Amazon Pinpoint イベントを Kinesis にストリーミングする (p. 57)」を参照してください。

アクセス権限ポリシーAmazon Pinpoint でストリームにイベントデータを送信するには、次のいずれかのポリシーをロールにアタッチします。

Amazon Kinesis Data Streams次のポリシーにより、Amazon Pinpoint で Kinesis ストリームにイベントデータを送信できます。

{ "Version": "2012-10-17", "Statement": { "Action": [ "kinesis:PutRecords", "kinesis:DescribeStream" ], "Effect": "Allow", "Resource": [ "arn:aws:kinesis:region:account-id:stream/stream-name" ] }}

Amazon Kinesis Data Firehose次のポリシーにより、Amazon Pinpoint で Kinesis Data Firehose 配信ストリームにイベントデータを送信できます。

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": [ "firehose:PutRecordBatch", "firehose:DescribeDeliveryStream" ], "Resource": [ "arn:aws:firehose:region:account-id:deliverystream/delivery-stream-name" ] }}

85

Page 90: Amazon Pinpoint - 開発者ガイド - AWS Documentation€¢ AWS SDK for Ruby バージョン 1.0.0.rc2 以降。 • AWS SDK for Go バージョン 1.5.13 以降。• AWS SDK for

Amazon Pinpoint 開発者ガイド信頼ポリシー

信頼ポリシーAmazon Pinpoint が IAM ロールを引き受けるのを許可し、アクセス権限ポリシーによって許可されているアクションを実行するには、ロールに次の信頼ポリシーをアタッチします。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "pinpoint.amazonaws.com" }, "Action": "sts:AssumeRole" } ]}

IAM ロールの作成 (AWS CLI)IAM ロールを作成するには、AWS Command Line Interface(AWS CLI) を使用して、次の手順を実行します。

AWS CLI, をインストールしていない場合、AWS Command Line Interface ユーザーガイド の「AWS コマンドラインインターフェースの設定」を参照してください。

IAM コンソールを使用してロールを作成するには、Amazon Pinpoint ユーザーガイドの「イベントストリーミングのセットアップ」を参照してください。

AWS CLI を使用して IAM ロールを作成するには

1. ロールの信頼ポリシーを含む JSON ファイルを作成し、ローカルにファイルを保存します。このトピックで提供されている信頼ポリシーをコピーできます。

2. create-role コマンドを使用して、ロールを作成し、信頼ポリシーをアタッチします。

aws iam create-role --role-name PinpointEventStreamRole --assume-role-policy-document file://PinpointEventStreamTrustPolicy.json

file:// に続けて、信頼ポリシーを含む JSON ファイル へのパスを指定します。

このコマンドを実行すると、AWS CLI は、ターミナルに次の出力を表示します。

{ "Role": { "AssumeRolePolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "Service": "pinpoint.amazonaws.com" } } ] }, "RoleId": "AIDACKCEVSQ6C2EXAMPLE", "CreateDate": "2017-02-28T18:02:48.220Z",

86

Page 91: Amazon Pinpoint - 開発者ガイド - AWS Documentation€¢ AWS SDK for Ruby バージョン 1.0.0.rc2 以降。 • AWS SDK for Go バージョン 1.5.13 以降。• AWS SDK for

Amazon Pinpoint 開発者ガイドIAM ロールの作成 (AWS CLI)

"RoleName": "PinpointEventStreamRole", "Path": "/", "Arn": "arn:aws:iam::111122223333:role/PinpointEventStreamRole" }}

3. ロールのアクセス権限ポリシーを含む JSON ファイルを作成し、ローカルにファイルを保存します。アクセス権限ポリシー (p. 85) セクションに記載のポリシーの 1 つをコピーできます。

4. put-role-policy コマンドを使用して、ロールにアクセス権限ポリシーをアタッチします。

aws iam put-role-policy --role-name PinpointEventStreamRole --policy-name PinpointEventStreamPermissionsPolicy --policy-document file://PinpointEventStreamPermissionsPolicy.json

file:// に続けて、アクセス権限ポリシーを含む JSON ファイルへのパスを指定します。

87

Page 92: Amazon Pinpoint - 開発者ガイド - AWS Documentation€¢ AWS SDK for Ruby バージョン 1.0.0.rc2 以降。 • AWS SDK for Go バージョン 1.5.13 以降。• AWS SDK for

Amazon Pinpoint 開発者ガイド一般的な制限事項

Amazon Pinpoint での制限以下のセクションでは、Amazon Pinpoint での制限について説明します。

トピック• 一般的な制限事項 (p. 88)• エンドポイントの制限 (p. 88)• エンドポイントインポートの制限 (p. 89)• セグメントの制限 (p. 89)• キャンペーンの制限 (p. 89)• モバイルプッシュの制限 (p. 90)• E メールの制限 (p. 90)• SMS の制限 (p. 92)• 制限の引き上げのリクエスト (p. 93)

一般的な制限事項次の制限は、Amazon Pinpoint の一般的な使用に影響を与える可能性があります。

リソース デフォルトの制限 増加の対象

API リクエストのペイロードサイズ

リクエストあたり 7 MB いいえ

アプリケーション アカウントあたり 100 いいえ

エンドポイントの制限Amazon Pinpoint API のエンドポイントリソースには、次の制限が適用されます。

リソース デフォルトの制限 増加の対象

Attributes、Metrics、UserAttributesパラメータにまとめて割り当てられた属性

アプリごとに 40 いいえ

Attributes パラメータにまとめて割り当てられた属性

アプリごとに 40 いいえ

Metrics パラメータにまとめて割り当てられた属性

アプリごとに 40 いいえ

88

Page 93: Amazon Pinpoint - 開発者ガイド - AWS Documentation€¢ AWS SDK for Ruby バージョン 1.0.0.rc2 以降。 • AWS SDK for Go バージョン 1.5.13 以降。• AWS SDK for

Amazon Pinpoint 開発者ガイドエンドポイントインポートの制限

リソース デフォルトの制限 増加の対象

UserAttributes パラメータにまとめて割り当てられた属性

アプリごとに 40 いいえ

属性名の長さ 50 文字 いいえ

属性値の長さ 100 文字 いいえ

EndpointBatchRequest ペイロードの EndpointBatchItemオブジェクト

ペイロードごとに 100. ペイロードサイズが 7 MB を超えることはできません。

いいえ

同じユーザー ID を持つエンドポイント

ユーザー ID ごとに 10 個の一意のエンドポイント

いいえ

Attributes パラメータ属性に割り当てられた値

属性ごとに 50 いいえ

UserAttributes パラメータ属性に割り当てられた値

属性ごとに 50 いいえ

エンドポイントインポートの制限エンドポイントを Amazon Pinpoint にインポートする際に、以下の制限が適用されます。

リソース デフォルトの制限 増加の対象

同時インポートジョブ アカウントあたり 2 はい (p. 93)

インポートサイズ インポートジョブごとに 1 GB

(たとえば、各エンドポイントが4 KB 以下の場合、250,000 エンドポイントをインポートできます)。

はい (p. 93)

セグメントの制限Amazon Pinpoint API のセグメントリソースには、次の制限が適用されます。

リソース デフォルトの制限 増加の対象

セグメントの最大数 アプリごとに 100 いいえ

セグメントの作成に使用できるディメンションの最大数

セグメントごとに 100 いいえ

キャンペーンの制限Amazon Pinpoint API のキャンペーンリソースには、次の制限が適用されます。

89

Page 94: Amazon Pinpoint - 開発者ガイド - AWS Documentation€¢ AWS SDK for Ruby バージョン 1.0.0.rc2 以降。 • AWS SDK for Go バージョン 1.5.13 以降。• AWS SDK for

Amazon Pinpoint 開発者ガイドモバイルプッシュの制限

リソース デフォルトの制限 増加の対象

アクティブなキャンペーン アカウントあたり 200

Note

アクティブなキャンペーンとは、完了または失敗していないキャンペーンのことです。アクティブなキャンペーンのステータスはSCHEDULED、EXECUTING、またはPENDING_NEXT_RUN です。

はい (p. 93)

メッセージ送信 キャンペーンアクティビティごとに 1 億

はい (p. 93)

モバイルプッシュの制限モバイルプッシュチャネルを通じて Amazon Pinpoint が配信するメッセージには、以下の制限が適用されます。

リソース デフォルトの制限 増加の対象

1 秒あたりに送信できるモバイルプッシュ通知の最大数

25000 通知 / 秒 いいえ

Amazon Device Messaging(ADM) のメッセージペイロードサイズ

メッセージごとに 6 KB いいえ

Apple Push Notification Service(APNs) メッセージのペイロードサイズ

メッセージごとに 4 KB いいえ

APNs サンドボックスメッセージのペイロードサイズ

メッセージごとに 4 KB いいえ

Baidu Cloud Push メッセージペイロードサイズ

メッセージごとに 4 KB いいえ

Firebase クラウドメッセージング (FCM) または Google クラウドメッセージング (GCM) メッセージペイロードサイズ

メッセージごとに 4 KB いいえ

E メールの制限次のセクションの制限は E メールチャネルに適用されます。

90

Page 95: Amazon Pinpoint - 開発者ガイド - AWS Documentation€¢ AWS SDK for Ruby バージョン 1.0.0.rc2 以降。 • AWS SDK for Go バージョン 1.5.13 以降。• AWS SDK for

Amazon Pinpoint 開発者ガイドE メールの送信制限

E メールの送信制限

リソース デフォルトの制限 増加の対象

24 時間ごとに送信可能な E メールの数 (送信クォータ)

アカウントがサンドボックスにある場合: 24 時間あたり 200 通の E メール。

アカウントがサンドボックスの外にある場合、クォータは具体的なユースケースによって異なります。

Note

このクォータは、一意の送信メッセージの数ではなく、受取人の数に基づいています。受取人はTo: 行にあるすべての Eメールアドレスです。

はい (p. 93)

1 秒ごとに送信できる E メールの数 (送信レート)

アカウントがサンドボックスにある場合: 1 秒あたり 1 通の Eメール。

アカウントがサンドボックスの外にある場合、レートは具体的なユースケースによって異なります。

Note

このレートは、一意の送信メッセージの数ではなく、受取人の数に基づいています。受取人はTo: 行にあるすべての Eメールアドレスです。

はい (p. 93)

E メールメッセージ制限

リソース デフォルトの制限 増加の対象

最大メッセージサイズ (添付ファイルを含む)

メッセージごとに 10 MB。 いいえ

検証済み ID の数 10,000 ID。

Note

ID とは、E メールアドレスまたはドメイン、またはその 2 つの組み合わせを指します。Amazon Pinpoint

いいえ

91

Page 96: Amazon Pinpoint - 開発者ガイド - AWS Documentation€¢ AWS SDK for Ruby バージョン 1.0.0.rc2 以降。 • AWS SDK for Go バージョン 1.5.13 以降。• AWS SDK for

Amazon Pinpoint 開発者ガイドE メール送信者と受取人の制限

リソース デフォルトの制限 増加の対象を使用して送信する Eメールはすべて、検証済み ID から送信される必要があります。

E メール送信者と受取人の制限

リソース デフォルトの制限 増加の対象

送信者アドレス すべての送信元のメールアドレスまたはドメインを検証する必要があります。

いいえ

受取人アドレス アカウントがサンドボックスにまだある場合は、受取人 E メールアドレスまたはドメインを検証する必要があります。

アカウントがサンドボックスの外にある場合、任意の有効なアドレスに送信することができます。

はい (p. 93)

メッセージあたりの受取人の最大数

メッセージあたり 50 人の受取人。

いいえ

検証できるアイデンティティの数

AWS リージョンあたり 10,000ID。

Note

ID とは、E メールアドレスまたはドメイン、またはその 2 つの組み合わせを指します。Amazon Pinpointを使用して送信する Eメールはすべて、検証済み ID から送信される必要があります。

いいえ

SMS の制限SMS チャネルには、以下の制限が適用されます。

リソース デフォルトの制限 増加の対象

アカウント使用料しきい値 アカウントごとに 1.00 USD。 はい (p. 93)

1 秒ごとに送信できる SMS メッセージの数 (送信レート#)

1 秒あたり 20 メッセージ. いいえ

92

Page 97: Amazon Pinpoint - 開発者ガイド - AWS Documentation€¢ AWS SDK for Ruby バージョン 1.0.0.rc2 以降。 • AWS SDK for Go バージョン 1.5.13 以降。• AWS SDK for

Amazon Pinpoint 開発者ガイド制限の引き上げのリクエスト

リソース デフォルトの制限 増加の対象

双方向 SMS の Amazon SNS トピックの数

アカウントあたり 100,000. はい (p. 93)

制限の引き上げのリクエスト上記のいずれかの表の [Eligible for Increase] 列の値が [Yes] の場合、その制限への変更をリクエストできます。

制限の引き上げをリクエストするには

1. AWS マネジメントコンソール (https://console.aws.amazon.com/) にサインインします。2. https://console.aws.amazon.com/support/home#/case/create で新しいサポートケースを作成します。3. [Create Case] ページで、以下の選択を行います。

• [Regarding] では、[Service Limit Increase] を選択します。• [Limit Type] で、以下のいずれかのオプションを選択します。

• Amazon Pinpoint キャンペーンおよびインポートに関連する制限の引き上げについては、[Amazon Pinpoint] を選択します。

• E メールチャネルに関連する制限の引き上げについては、[Amazon Pinpoint Email] を選択します。

• SMS チャネルに関連する制限の引き上げについては、[Amazon Pinpoint SMS] を選択します。4. [Use Case Description] では、制限の引き上げをリクエストする理由を説明します。5. [Support Language] で、AWS サポートチームとやり取りする際に使用をご希望する言語を選択しま

す。6. [Contact Method] には、AWS サポートチームとやり取りする際にご希望の方法を選択します。7. [Submit] を選択します。

93

Page 98: Amazon Pinpoint - 開発者ガイド - AWS Documentation€¢ AWS SDK for Ruby バージョン 1.0.0.rc2 以降。 • AWS SDK for Go バージョン 1.5.13 以降。• AWS SDK for

Amazon Pinpoint 開発者ガイド

AWS Lambda を使用したカスタムチャネルの作成

これはパブリックベータリリースの機能に関するプレリリースドキュメントです。このドキュメントは変更される可能性があります。

Amazon Pinpoint はモバイルプッシュ、E メール、および SMS 用のチャネルをサポートします。ただし、一部のメッセージングユースケースでは、サポートされていないチャネルが必要になる場合もあります。たとえば、Facebook Messenger などのインスタントメッセージングサービスにメッセージを送信したり、ウェブアプリケーション内で通知を表示したりしたい場合があります。このような場合は、AWSLambda を使用して、Amazon Pinpoint 外部でメッセージ配信を実行するカスタムチャネルを作成します。

AWS Lambda はサーバーをプロビジョニングしたり管理しなくてもコードを実行するために使用できるコンピューティングサービスです。コードをパッケージ化し、Lambda 関数として Lambda にアップロードします。関数が呼び出されたときに、Lambda によって関数が実行されます。この操作は手動で行うことも、イベントに応じて自動的に行うこともできます。

詳細については、AWS Lambda Developer Guideの「Lambda 関数」を参照してください。

カスタムチャネルを作成するには、Amazon Pinpoint キャンペーンのメッセージ配信を処理する Lambda関数を定義します。次に、キャンペーンの CampaignHook 設定を定義して、関数をキャンペーンに割り当てます。これらの設定には、Lambda 関数名と CampaignHook モードが含まれます。モードをDELIVERY に設定することで、Amazon Pinpoint の代わりに Lambda 関数がメッセージの配信を処理することを指定します。

キャンペーンに割り当てる Lambda 関数を、Amazon Pinpoint の拡張機能と呼びます。

CampaignHook 設定が定義されると、Amazon Pinpoint はキャンペーンを実行するときに、キャンペーンのメッセージを標準チャネルに送信することなく、自動的に Lambda 関数を呼び出します。その代わり、Amazon Pinpoint はメッセージ配信に関するイベントデータを関数に送信し、それにより関数は配信を処理できます。このイベントデータには、メッセージ本文と、メッセージの配信先のエンドポイントのリストが含まれます。

Amazon Pinpoint は、関数を正常に呼び出すと、キャンペーンの送信成功イベントを生成します。

Note

また、CampaignHook 設定を使用して、Amazon Pinpoint がキャンペーンのメッセージを配信する前に、キャンペーンのセグメントを変更して返す Lambda 関数を割り当ることもできます。詳細については、「AWS Lambda を使用したセグメントのカスタマイズ (p. 48)」を参照してください。

AWS Lambda を使用してカスタムチャネルを作成するには、Amazon Pinpoint によって送信されたイベントデータを受け取り、メッセージ配信を処理する関数を最初に関数を作成します。次に、Lambda 関数ポリシーを割り当てて関数を呼び出すことを Amazon Pinpoint に許可します。最後に、CampaignHook 設定を定義して、1 つ以上のキャンペーンに関数を割り当てます。

94

Page 99: Amazon Pinpoint - 開発者ガイド - AWS Documentation€¢ AWS SDK for Ruby バージョン 1.0.0.rc2 以降。 • AWS SDK for Go バージョン 1.5.13 以降。• AWS SDK for

Amazon Pinpoint 開発者ガイドイベントデータ

イベントデータAmazon Pinpoint が Lambda 関数を呼び出すときに、イベントデータとして次のペイロードを提供します。

{ "MessageConfiguration": {Message configuration} "ApplicationId": ApplicationId, "CampaignId": CampaignId, "TreatmentId": TreatmentId, "ActivityId": ActivityId, "ScheduledTime": Scheduled Time, "Endpoints": { EndpointId: {Endpoint definition} . . . }}

イベントデータは次の属性を提供します。

• MessageConfiguration – Amazon Pinpoint API の Messages リソースのDirectMessageConfiguration と同じ構造を持ちます。

• ApplicationId – キャンペーンが属する Amazon Pinpoint プロジェクトの ID。• CampaignId – 関数が呼び出される Amazon Pinpoint プロジェクトの ID。• TreatmentId – A/B テストに使用されるキャンペーンバリエーションの ID。• ActivityId – キャンペーンによって実行中のアクティビティの ID。• ScheduledTime – キャンペーンのメッセージが ISO 8601 形式で配信されるスケジュール時間。• Endpoints – エンドポイント ID をエンドポイント定義と関連付けるマップ。各イベントデータのペイ

ロードには最大 50 のエンドポイントが含まれます。キャンペーンセグメントに 50 以上のエンドポイントが含まれる場合、Amazon Pinpoint はすべてのエンドポイントが処理されるまで、繰り返し関数を呼び出します (最大で一度に 50 のエンドポイント)。

Lambda 関数の作成Lambda 関数を作成するには、AWS Lambda Developer Guideの「Lambda 関数のビルド」を参照してください。

Lambda 関数の例次の例では、Amazon Pinpoint がキャンペーンを実行するときに Lambda 関数がイベントデータを受け取り、キャンペーンのメッセージを Facebook Messenger に送信します。

"use strict";

var https = require("https");var q = require("q");

var VERIFY_TOKEN = "my_token";var PAGE_ACCESS_TOKEN = "EAF...DZD";/* this constant can be put in a constants file and shared between this function and your Facebook Messenger webhook code */var FACEBOOK_MESSENGER_PSID_ATTRIBUTE_KEY = "facebookMessengerPsid";

exports.handler = function(event, context, callback) {

95

Page 100: Amazon Pinpoint - 開発者ガイド - AWS Documentation€¢ AWS SDK for Ruby バージョン 1.0.0.rc2 以降。 • AWS SDK for Go バージョン 1.5.13 以降。• AWS SDK for

Amazon Pinpoint 開発者ガイドLambda 関数の例

var deliverViaMessengerPromises = [];

if (event.Message && event.Endpoints) { for (var endpoint in event.Endpoints) { if (isFbookMessengerActive(event.Endpoints[endpoint])) { deliverViaMessengerPromises.push(deliverViaMessenger(event.Message, event.Endpoints[endpoint].User)); } } }

/* default OK response */ var response = { body: "ok", statusCode: 200 };

if (deliverViaMessengerPromises.length > 0) { q.all(deliverViaMessengerPromises).done(function() { callback(null, response); }); } else { callback(null, response); }

}

/**Example Pinpoint Endpoint User object where we've added custom attribute facebookMessengerPsid to store the PSID needed by Facebook's API{ "UserId": "7a9870b7-493c-4521-b0ca-08bbbc36e595", "UserAttributes": { "facebookMessengerPsid": [ "1667566386619741" ] }}**/function isFbookMessengerActive(endpoint) { return endpoint.User && endpoint.User.UserAttributes && endpoint.User.UserAttributes[FACEBOOK_MESSENGER_PSID_ATTRIBUTE_KEY];}

/**Sample message object from Pinpoint. This sample was an SMS so it has "smsmessage" attribute but this will vary for each messaging channel{ "smsmessage": { "body": "This message should be intercepted by a campaign hook." }}**/function deliverViaMessenger(message, user) { var deferred = q.defer();

var messageText = message["smsmessage"]["body"]; var pinpointUserId = user.UserId; var facebookPsid = user.UserAttributes[FACEBOOK_MESSENGER_PSID_ATTRIBUTE_KEY][0]; console.log("Sending message for user %s and page %s with message:", pinpointUserId, facebookPsid, messageText);

var messageData = { recipient: { id: facebookPsid }, message: {

96

Page 101: Amazon Pinpoint - 開発者ガイド - AWS Documentation€¢ AWS SDK for Ruby バージョン 1.0.0.rc2 以降。 • AWS SDK for Go バージョン 1.5.13 以降。• AWS SDK for

Amazon Pinpoint 開発者ガイドLambda 関数ポリシーの割り当て

text: messageText } };

var body = JSON.stringify(messageData); var path = "/v2.6/me/messages?access_token=" + PAGE_ACCESS_TOKEN; var options = { host: "graph.facebook.com", path: path, method: "POST", headers: { "Content-Type": "application/json" } };

var req = https.request(options, httpsCallback);

req.on("error", function(e) { console.log("Error posting to Facebook Messenger: " + e); deferred.reject(e); });

req.write(body); req.end();

return deferred.promise;

function httpsCallback(response) { var str = ""; response.on("data", function(chunk) { str += chunk; }); response.on("end", function() { console.log(str); deferred.resolve(response); }); }}

Lambda 関数ポリシーの割り当てLambda 関数を使用してエンドポイントを処理する前に、Amazon Pinpoint に Lambda 関数の呼び出しを許可する必要があります。呼び出しのアクセス許可を付与するには、関数に Lambda 関数ポリシーを割り当てます。Lambda 関数ポリシーはリソースベースのアクセス許可ポリシーで、関数を使用できるエンティティと、それらのエンティティが実行できるアクションを指定します。

詳細については、「AWS Lambda でリソースベースのポリシーを使用する (Lambda 関数ポリシー)」(AWS Lambda Developer Guide) を参照してください。

関数ポリシーの例次のポリシーでは、lambda:InvokeFunction アクションを使用するアクセス許可を、Amazon Pinpointサービスプリンシパルに付与します。

{ "Sid": "sid", "Effect": "Allow", "Principal": { "Service": "pinpoint.us-east-1.amazonaws.com" },

97

Page 102: Amazon Pinpoint - 開発者ガイド - AWS Documentation€¢ AWS SDK for Ruby バージョン 1.0.0.rc2 以降。 • AWS SDK for Go バージョン 1.5.13 以降。• AWS SDK for

Amazon Pinpoint 開発者ガイドAmazon Pinpoint への呼び出しアクセス許可の付与

"Action": "lambda:InvokeFunction", "Resource": "{arn:aws:lambda:us-east-1:account-id:function:function-name}", "Condition": { "ArnLike": { "AWS:SourceArn": "arn:aws:mobiletargeting:us-east-1:account-id:/apps/application-id/campaigns/campaign-id" } }}

関数ポリシーは、AWS:SourceArn キーを含む Condition ブロックを必要とします。このコードは、関数を呼び出すために許可される Amazon Pinpoint キャンペーンを指定します。この例では、ポリシーは 1つのキャンペーン ID のみにアクセス許可を付与します。より一般的なポリシーを記述するには、複数文字に一致するワイルドカード (*) を使用します。たとえば、次の Condition ブロックを使用して、AWS アカウントの任意の Amazon Pinpoint キャンペーンに関数の呼び出しを許可できます。

"Condition": { "ArnLike": { "AWS:SourceArn": "arn:aws:mobiletargeting:us-east-1:account-id:/apps/*/campaigns/*" }}

Amazon Pinpoint への呼び出しアクセス許可の付与AWS Command Line Interface (AWS CLI) を使用して、Lambda 関数に割り当てられた Lambda 関数ポリシーにアクセス許可を追加できます。Amazon Pinpoint に関数の呼び出しを許可するには、次の例に示すように Lambda add-permission コマンドを使用します。

$ aws lambda add-permission \> --function-name function-name \> --statement-id sid \> --action lambda:InvokeFunction \> --principal pinpoint.us-east-1.amazonaws.com \> --source-arn arn:aws:mobiletargeting:us-east-1:account-id:/apps/application-id/campaigns/campaign-id

--source-arn パラメータのキャンペーン ID を指定する場合は、Amazon Pinpoint の get-campaigns コマンドと AWS CLI を使用して、キャンペーン ID を参照できます。このコマンドには、--application-id パラメータが必要です。アプリケーション ID を参照するには、https://console.aws.amazon.com/pinpoint/ で Amazon Pinpoint コンソールにサインインし、[Projects] ページに移動します。コンソールには各プロジェクトの [ID] が表示されます。これはプロジェクトのアプリケーション ID です。

Lambda の add-permission コマンドを実行すると、AWS Lambda により以下のような出力が表示されます。

{ "Statement": "{\"Sid\":\"sid\", \"Effect\":\"Allow\", \"Principal\":{\"Service\":\"pinpoint.us-east-1.amazonaws.com\"}, \"Action\":\"lambda:InvokeFunction\", \"Resource\":\"arn:aws:lambda:us-east-1:111122223333:function:function-name\", \"Condition\": {\"ArnLike\": {\"AWS:SourceArn\": \"arn:aws:mobiletargeting:us-east-1:111122223333:/apps/application-id/campaigns/campaign-id\"}}}"}

98

Page 103: Amazon Pinpoint - 開発者ガイド - AWS Documentation€¢ AWS SDK for Ruby バージョン 1.0.0.rc2 以降。 • AWS SDK for Go バージョン 1.5.13 以降。• AWS SDK for

Amazon Pinpoint 開発者ガイドキャンペーンへの Lambda 関数の割り当て

Statement 値は Lambda 関数ポリシーに追加されたステートメントの JSON 文字列バージョンです。

キャンペーンへの Lambda 関数の割り当てLambda 関数は個別の Amazon Pinpoint キャンペーンに割り当てることができます。または、個別に関数を割り当てるキャンペーンを除いて、プロジェクトのすべてのキャンペーンで使用されるデフォルトとして、Lambda 関数を設定できます。

Lambda 関数を個別のキャンペーンに割り当てるには、Amazon Pinpoint API を使用して Campaign オブジェクトを作成または更新し、その CampaignHook 属性を定義します。プロジェクトのすべてのキャンペーン用にデフォルトとして Lambda 関数を設定するには、そのプロジェクト用の Settings リソースを作成または更新し、その CampaignHook オブジェクトを定義します。

いずれの場合も、次の CampaignHook 属性を設定します。

• LambdaFunctionName – キャンペーンのメッセージを送信するために Amazon Pinpoint が呼び出すLambda 関数の名前または ARN。

• Mode – DELIVERY に設定します。このモードでは、Amazon Pinpoint は関数を使用してキャンペーンのメッセージを配信します。標準チャネルを通じたメッセージの送信は試みません。

99

Page 104: Amazon Pinpoint - 開発者ガイド - AWS Documentation€¢ AWS SDK for Ruby バージョン 1.0.0.rc2 以降。 • AWS SDK for Go バージョン 1.5.13 以降。• AWS SDK for

Amazon Pinpoint 開発者ガイド

Amazon Pinpoint のドキュメント履歴。

次の表は、Amazon Pinpoint の今回のリリースの内容をまとめたものです。

• ドキュメントの最終更新日: 2018 年 5 月 1 日

変更 説明 日付

エンドポイントエクスポートのアクセス許可

Amazon Pinpoint エンドポイントを Amazon S3 バケットにエクスポートすることを許可する IAMポリシーを設定します (p. 81)。

2018 年 5 月 1 日

Amazon Pinpoint 統合に関するトピックの更新

AWS SDK またはライブラリを使用して、Android、iOS あるいはJavaScript で Amazon Pinpointを統合 (p. 3)します。

2018 年 3 月 23 日

AWS CloudTrail ログ CloudTrail による AmazonPinpoint API コールのログ (p. 64)に関する情報を追加しました。

2018 年 2 月 6 日

サービスの制限を更新しました E メール制限に関する情報を追加し、制限 (p. 88) を更新しました。

2018 年 1 月 19 日

Amazon Pinpoint 拡張機能のパブリックベータ

AWS Lambda 関数を使用してセグメントをカスタマイズ (p. 48)するか、カスタムメッセージングチャネルを作成 (p. 94)します。

2017 年 11 月 28 日

外部 ID が IAM 信頼ポリシーから削除されました

セグメントのインポートのため、外部 ID キーが信頼ポリシー (p. 80)の例と Java コード (p. 45)の例から削除されました。

2017 年 10 月 26 日

プッシュ通知のペイロードの制限

この制限には、モバイルプッシュメッセージのペイロードサイズ (p. 90)が含まれます。

2017 年 10 月 25 日

サービスの制限を更新しました SMS と E メールチャネル情報を「制限 (p. 88)」に追加しました。

2017 年 10 月 9 日

ADM および Baidu モバイルプッシュ

Baidu (p. 35) および ADM (p. 34)モバイルプッシュチャネルからのプッシュ通知を処理するようにアプリケーションコードを更新しました。

2017 年 9 月 27 日

100

Page 105: Amazon Pinpoint - 開発者ガイド - AWS Documentation€¢ AWS SDK for Ruby バージョン 1.0.0.rc2 以降。 • AWS SDK for Go バージョン 1.5.13 以降。• AWS SDK for

Amazon Pinpoint 開発者ガイド

変更 説明 日付

Amazon Cognito ユーザープールでのユーザー ID と認証イベント。

Amazon Cognito ユーザープールを使用してモバイルアプリでユーザーのサインインを管理する場合、Amazon Cognito はエンドポイントにユーザー ID を割り当て、Amazon Pinpoint に認証イベントを報告します。

2017 年 9 月 26 日

ユーザー ID エンドポイントにユーザー ID を割り当てて、個々のユーザーからのアプリケーションの使用状況をモニタリングします。AWSMobile SDK (p. 9) および SDK forJava (p. 41) の例を示しています。

2017 年 8 月 31 日

認証イベント 認証イベントを報告し、ユーザーがアプリに対して認証する頻度を確認します。例は、アプリケーションでのイベントの報告 (p. 16) で参照できます。

2017 年 8 月 31 日

サンプルイベントの更新 サンプルイベント (p. 58)には、Eメールと SMS アクティビティについて Amazon Pinpoint がストリーミングするイベントが含まれます。

2017 年 6 月 08 日

Android セッション管理 AWS Mobile Hub サンプルアプリにより提供されているクラスを使用した Android アプリのセッションを管理します。

2017 年 4 月 20 日

更新された収益化イベントサンプル

収益化イベントの報告に関するサンプルコードが更新されました。 。

2017 年 31 月 3 日

イベントストリーム Amazon Pinpoint を設定してアプリとキャンペーンイベントを Kinesis ストリームに送る (p. 57)ことができます。

2017 年 24 月 3 日

アクセス許可 モバイルアプリのアカウント内の AWS ユーザーのためのAmazon Pinpoint へのアクセス権の付与の詳細については、アクセス許可 (p. 70) を参照してください。

2017 年 1 月 12 日

Amazon Pinpoint の一般提供 このリリースで Amazon Pinpointが導入されました。

2016 年 12 月 1 日

101