クイック定期購入のワンクリックアカウント情報共有
ワンクリックアカウント情報共有では、ユーザーが最小限の労力でAmazonアカウントの情報をアプリと共有でき、手動でアカウントの詳細を入力する必要がありません。この機能により、ユーザーの登録エクスペリエンスが向上します。アプリでワンクリックアカウント情報共有機能を設定するには、以下のガイドを使用してください。
- アプリのマニフェストの更新
- セキュリティプロファイルの構成
- アプリのコードの更新
- Get Access Token API
- Get User Profile API
- アカウント設定に関するベストプラクティス
- 関連トピック
アプリのマニフェストの更新
アプリがクイック定期購入のワンクリックアカウント情報共有機能をサポートしていることをAmazonアプリストアに示すには、アプリのマニフェストを更新して、次のコードを追加します。
<uses-feature android:name="amazon.lwa.quicksignup.supported"/>
セキュリティプロファイルの構成
ワンクリックアカウント情報共有を正しく動作させるには、アプリのセキュリティプロファイルを設定する必要があります。セキュリティプロファイルは、Amazonから開発者に安全にユーザーデータを共有することを可能にし、開発者が自動的にアカウントを作成してユーザーをサインインできるようにするために不可欠なものです。
セキュリティプロファイルにより、セキュリティ認証情報を含むAmazonデータを1つ以上のアプリに関連付けることができます。たとえば、「マイゲーム - 無料」と「マイゲーム - HD」という2つのアプリがある場合に、同じセキュリティプロファイルを使用してデータを共有できます。セキュリティプロファイルには、アプリまたはアプリファミリーを識別できる名前を付けてください。詳細については、セキュリティプロファイルを参照してください。
アプリのセキュリティプロファイルを構成するには
- 開発者コンソールのダッシュボードに移動してアカウントにログインします。
- [アプリ&サービス] > [マイアプリ] を選択し、アプリを選択します。
- [アプリサービス] をクリックし、[セキュリティプロファイル] セクションまでスクロールします。
- [既存のセキュリティプロファイルを選択、または新規作成する] をクリックしてオプションを展開します。
-
ドロップダウンを使用して、このアプリにマップするセキュリティプロファイルを選択し、[セキュリティプロファイルを有効化] をクリックします。
または、[セキュリティプロファイルを作成] をクリックして新しいセキュリティプロファイルを作成することもできます。新しいセキュリティプロファイルを作成する場合は、すべての必須フィールドに入力し、[Save] をクリックします。
セキュリティプロファイルが正常に関連付けられると、[セキュリティプロファイル] セクションに成功メッセージが表示され、関連付けられたプロファイルの詳細が表示されます。
アプリのコードの更新
アプリにワンクリックアカウント情報共有を追加するには、以下の手順に従ってアプリのコードを更新します。
手順1: UserProfileAccessListenerを実装して登録する
ResponseReceiver
によってトリガーされるコールバックをアプリでリッスンして処理できるように、UserProfileAccessListener
インターフェイスのインスタンスを実装し、onCreate()
メソッドで登録します。
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
//...
// 登録するPurchasingListenerの参照を渡します。
PurchasingService.registerListener(this.getApplicationContext(), purchasingListener);
// 登録するUserProfileAccessListenerの参照を渡します
PurchasingService.registerUserProfileAccessListener(this.getApplicationContext(), userProfileAccessListener);
//...
}
手順2: getUserDataによる変更を実装する
クイック定期購入のフローでは、ユーザーが既に情報共有に同意している場合があります。以下の変更を実装すると、アプリの起動時に同意データを取得できます。
アプリのメインアクティビティのonResume()
メソッドで、次の処理を行います。
- 新しい
UserDataRequest
オブジェクトを作成し、ユーザーのプロフィール同意ステータス情報をリクエストするように構成します。同意ステータスをリクエストするようにUserDataRequest
オブジェクトを構成するには、setFetchUserProfileAccessConsentStatus()
メソッドをtrueに設定します。 getUserData()
メソッドを呼び出し、構成したUserDataRequest
オブジェクトを渡します。
次の例は、UserDataRequest
オブジェクトを作成してgetUserData()
に渡す方法を示しています。
@Override
protected void onResume()
{
super.onResume();
//...
// isLoggedIn()内には、ユーザーのログインステータスを特定するロジックを実装します。
if (!isLoggedIn()) {
PurchasingService.getUserData(UserDataRequest.newBuilder().setFetchUserProfileAccessConsentStatus(true).build());
}
//...
}
onUserDataResponse()
コールバックメソッドを実装して、ユーザーの同意データを含むUserDataResponse
オブジェクトを取得します。次のコードは、UserDataResponse
オブジェクトから受け取った同意データを処理する方法を示しています。
@Override
public void onUserDataResponse(final UserDataResponse response) {
UserDataResponse.RequestStatus status = response.getRequestStatus();
switch (status) {
case SUCCESSFUL:
if (UserProfileAccessConsentStatus.CONSENTED.equals(response.getUserData().getUserProfileAccessConsentStatus())) {
// 認可コードを取得します。
PurchasingService.requestUserProfileAccess();
}
break;
case FAILED:
case NOT_SUPPORTED:
// 失敗時の処理を適切に行います。
break;
}
}
UserData
オブジェクトのUserProfileAccessConsentStatus
フィールドには、次のいずれかの値が含まれます。
CONSENTED
: ユーザーが既に同意していることを示します。requestUserProfileAccess()
メソッドを呼び出し、レスポンスオブジェクトに含まれている認可コードでサーバーを更新できます。認可コードを抽出する方法の説明については、認可コードを抽出するを参照してください。UNAVAILABLE
: 同意トークンがないか、有効期限が切れていることを示します。この場合はアプリの登録フローを開始します。次のアプリの登録フローを更新するセクションの詳細を使用して、アプリの登録フローの中で同意をリクエストします。
手順3: アプリの登録フローを更新する
アプリの登録フローの中で、requestUserProfileAccess()
メソッドを呼び出します。これにより同意画面が開きます。ここでユーザーに同意をリクエストして、認可コードを取得できます。
次のサンプルコードは、requestUserProfileAccess()
メソッドを使用して同意画面を呼び出す方法を示しています。
@Override
public void invokeConsentScreen() {
// ユーザーデータの共有の同意画面を開始します。
PurchasingService.requestUserProfileAccess();
return;
}
これで、次のセクションで説明するように、ユーザープロフィールにアクセスするための認可コードを抽出できます。
手順4: 認可コードを抽出する
ユーザーが同意したら、ユーザープロフィールにアクセスするための認可コードを抽出する必要があります。この認可コードは、Get Access Token APIへのリクエストで必要になります。次のコードは、UserProfileAccessResponse
オブジェクトから認可コードを抽出する方法を示しています。
@Override
public void onUserProfileAccessResponse(final UserProfileAccessResponse response) {
UserProfileAccessResponse.RequestStatus status = response.getRequestStatus();
switch (status) {
case SUCCESSFUL:
// レスポンスから認可コードを抽出します。
final String userProfileAccessAuthCode = response.getUserProfileAccessAuthCode();
// ここでuserProfileAccessAuthCodeを使用してサーバーを更新し、
// Appstore IAP REST APIとさらに連携して、アクセストークンとユーザープロフィールを取得する必要があります。
passAuthCodeToBackend(userProfileAccessAuthCode);
break;
case FAILED:
case NOT_SUPPORTED:
// 失敗時の処理を適切に行います。
break;
}
}
次に、Amazonアプリストアのアプリ内課金(Appstore IAP)REST APIを使用して、アクセストークンとユーザープロフィールを取得します。ユーザープロフィールがある場合は、その情報を使用してアプリのシステムにアカウントを作成できます。以下のセクションでは、Appstore IAP REST APIについて説明します。
Get Access Token API
Appstore IAPには、アクセストークンを取得するためのGet Access Token REST APIが用意されています。このセクションでは、リクエスト、レスポンス、エラーについて説明します。
アクセストークンリクエスト
requestUserProfileAccess()
のレスポンスと有効な認可コードを受け取ったアプリは、そのコードを使用してアクセストークンを取得できます。アクセストークンがあれば、クライアントはユーザープロフィールを読み取ることができます。
Get Access Token APIは、次の例に示すように、GETリクエストではなくPOSTリクエストを使用する必要があります。
POST https://appstore-sdk.amazon.com/version/1.0/auth/o2/token?
grant_type=authorization_code
&code=SplxlOBezQQYbYS6WxSbIA
&client_id=foodev
&client_secret=foosecret
次の表では、アクセストークンリクエストのパラメーターについて説明します。
リクエストパラメーター | 説明 |
---|---|
grant_type |
必須。リクエストされたアクセスグラントのタイプ。authorization_code を指定する必要があります。 |
code |
必須。requestUserProfileAccess() メソッドから返された認可コード。 |
client_id |
必須。クライアント識別子。 |
client_secret |
必須。登録時にクライアントに割り当てられたシークレット値。クライアントシークレットはウェブページに確実に保存できないため、ブラウザベースのアプリではクライアントシークレットを使用しないでください。 |
アクセストークンレスポンス
ユーザーデータにアクセスするには、Appstore IAPのGet User Profile APIにアクセストークンを提供する必要があります。アクセストークンは350文字以上の英数字のコードで、最大サイズは2,048バイトです。アクセストークンはAtza|
という文字列で始まります。
レスポンスパラメーターは、application/json
メディアタイプを使用してエンコードされます。詳細については、RFC4627(英語のみ)を参照してください。以下は、アクセストークンリクエストからのレスポンスの例です。
{
"access_token":"Atza|IQEBLjAsAhRmHjNgHpi0U-Dme37rR6CuUpSR...",
"token_type":"bearer",
"expires_in":3600,
"refresh_token":"Atzr|IQEBLzAtAhRPpMJxdwVz2Nn6f2y-tpJX2DeX..."
}
次の表では、アクセストークンレスポンスのパラメーターについて説明します。
アクセストークンはBearerトークンであり、別のクライアントでも使用できます。詳細については、The OAuth 2.0 Authorization Framework: Bearer Token Usage(英語のみ)を参照してください。
アクセストークンエラー
エラーによっては、認可サービスがHTTP 401 (Unauthorized)
のステータスコードを返す場合があります。これには、クライアントが認可ヘッダーでclient_id
とclient_secret
の値を渡したものの、クライアントが認証されなかった場合などが該当します。
次の表では、失敗したレスポンスのエラーパラメーターについて説明します。
エラーパラメーター | 説明 |
---|---|
error |
エラーコード値を表すASCIIエラーコード。 |
error_description |
クライアント開発者が判読できる形でエラーに関する情報を記載したASCII文字列。 |
request_id |
アクセストークンリクエストに関連付けられたID。 |
error
の値として次のエラーコードが返される可能性があります。
Get User Profile API
Appstore IAPには、ユーザープロフィールデータを取得するためのGet User Profile REST APIが用意されています。このセクションでは、リクエスト、レスポンス、エラーについて説明します。
ユーザープロフィールのリクエスト
承認されたユーザープロフィールデータにアクセスするには、Get User Profile APIを使用してアクセストークンをAmazonアプリストアに送信します。Get User Profile APIは、HTTPS GETリクエストで、Get Access Token APIから受け取ったアクセストークンを唯一のパラメーターとして使用します。
次の例は、ユーザープロフィールデータを取得するGETリクエストを示しています。
GET https://appstore-sdk.amazon.com/version/1.0/user/profile?
access_token=Atza|IQEBLjAsAhRmHjNgHpi0U-Dme37rR6CuUpSR...
リクエストパラメーター | 説明 |
---|---|
access_token |
必須。Get Access Token APIから受け取ったアクセストークン。 |
ユーザープロフィールのレスポンス
アクセストークンが有効な場合は、次の例のように、HTTPレスポンスとしてユーザーのプロフィールデータがJSONで返されます。
{
"user_id": "amznl.account.K2LI23KL2LK2",
"email":"mhashimoto-04@plaxo.com",
"name" :"Mork Hashimoto",
"postal_code": "98052"
}
プロフィールリクエストを処理できない場合は、HTTPエラーが返されます。このとき、次の例のように、詳細情報を含むJSONペイロードが返されることがあります。
{
"error": "コンピューターで解読できるエラーコード",
"error_description": "human-readable error description",
"request_id": "bef0c2f8-e292-4l96-8c95-8833fbd559df"
}
次の表に、ユーザープロフィールリクエストが失敗した場合に返される可能性のあるエラーコードを示します。
アカウント設定に関するベストプラクティス
ユーザーのアカウントを設定するときは、以下のベストプラクティスに従ってください。
- ユーザーの同意があり、認可コードを取得できる場合は、次の操作を行います。
- Appstore IAPのGet User Profile APIからユーザー情報を取得します。この情報を使用して、一時パスワードでサインインアカウントを作成します。パスワードのリセットや追加情報をユーザーに要求することなく、ユーザーをアプリにサインインさせます。
- 後で、パスワードをリセットするようにEメールでユーザーに通知します。
- ユーザーの同意があり、その情報が会社のシステム内の既存のアカウントと一致する場合は、アプリのデフォルトのサインインフローにユーザーを誘導できます。
- ユーザーが同意を拒否した場合は、アプリのデフォルトの登録エクスペリエンスを使用します。
関連トピック
Last updated: 2025年8月13日