/ / Androidのアプリ内課金で払い戻しを行った場合、IN_APP_NOTIFYはどのように機能しますか? - アンドロイド、アプリ内購入、アプリ内課金、チタンモジュール

Androidのアプリ内課金で払い戻しを行った場合、IN_APP_NOTIFYはどのように機能しますか? - アンドロイド、アプリ内購入、アプリ内課金、チタンモジュール

私たちはTitanium Studioを使用してAppを開発し、Appceleratorは API v2のみをサポートするアプリ内課金 (私はv3を使うべきだと知っていますが、私たちはインディーズグループをやっているので、API v3をサポートするモジュールのための$ 100は当面はノーです)。

私は、 API v2のアプリ内課金ワークフロー、これまでの購入ロジックは魅力のように機能します。

それは払い戻しの一部になるまでです。私たちは、アプリで商品や購読を管理しています。

ドキュメンテーションによると、払い戻しが行われると、 IN_APP_NOTIFY イベントが開始されます getPurchaseInformation コール。私たちが疑問を持っているのは、私たちが getPurchaseInformation コール。ありません PURCHASE_STATE_CHANGED イベントが発生しましたか?そうであれば、注文書と署名されたデータが更新されて返されますか?

たとえば、Urielが管理対象製品Aを購入したとすると、Urielは払い戻しを要求します。これによりIN_APP_NOTIFYイベントが発生し、 getPurchaseInformation コールが行われます。

どのようなイベントがトリガーされるので、ユーザーが以前に利用可能なコンテンツをロックするようにアプリを更新できますか?意志 PURCHASE_STATE_CHANGED 誘発される?そうであれば、注文情報と署名されたデータは空に戻されますか?私の PURCHASE_STATE_CHANGED 注文がある場合は確認し、注文が見つからない場合はすべてのコンテンツがブロックされます。

要するに、私の推測の権利であるか、または払い戻しのための作業の流れは異なりますか?

参考までに、ここに私の PURCHASE_STATE_CHANGED 関数:

function PURCHASE_STATE_CHANGED_EVENT(e)
{
Ti.API.info("PURCHASE STATE CHANGED CALLED");
Ti.API.info("Signature Verification Result:n" + VerificationString(e.result));
Ti.API.info("Signed Data:n" + e.signedData);
/*
* We receive an object that might look like this
* {
*  "nonce":-2458019374247073515,
*  "orders":[
*   {
*    "notificationId":"notificationId",
*    "orderId":"transactionId",
*    "packageName":"my.package",
*    "productId":"in_app_identifier",
*    "purchaseTime":1394062412214,
*    "purchaseState":0
*   }
*  ]
* }
*/

if (e.signedData != null) {
var response = JSON.parse(e.signedData);
/*
* We are not guaranteed to have any orders returned so
* we need to make sure that this one exists before using it.
*
* If there is no notificationId then there is no need to confirmNotifications().
* This happens when restoreTransactions() triggers a PURCHASE_STATE_CHANGED_EVENT.
*/
if(response.orders.length === 0)
{
Ti.API.info("nothing to restore");
setNoTransactionsToRestore();
return;
}
for(var i = 0; i < response.orders.length; i++)
{
if(typeof response.orders[i] !== "undefined")
{
Ti.API.info("set purchase flag");
setPurchaseFlag(response.orders[i].productId);
}
if (response.orders[i] && response.orders[i].notificationId)
{

Ti.API.info("confirming notification for order " + JSON.stringify(response.orders[i]));
var synchronousResponse = InAppBilling.confirmNotifications({
notificationIds: [response.orders[i].notificationId]
});
displaySynchronousResponseCodes(synchronousResponse);
}
}
}
else
{
Ti.API.info("signed data was null");
}
}

InAppBilling.addEventListener(InAppBilling.PURCHASE_STATE_CHANGED_EVENT, PURCHASE_STATE_CHANGED_EVENT);

と私 IN_APP_NOTIFY 関数:

function NOTIFY_EVENT(e)
{
Ti.API.info("NOTIFY CALLED n" + "Notify Id:n" + e.notifyId);

var synchronousResponse = InAppBilling.getPurchaseInformation({
notificationIds: [e.notifyId]
});
displaySynchronousResponseCodes(synchronousResponse);
}
InAppBilling.addEventListener(InAppBilling.NOTIFY_EVENT, NOTIFY_EVENT);

回答:

回答№1は0

私は、ワークフロー、特にIN_APP_NOTIFYイベントに関する詳細を提供するドキュメントを読んでいます。 ここに 私が見つけたものです:

払い戻しやその他の迷惑なIN_APP_NOTIFYメッセージの処理

アプリケーションが2つの場合がありますIN_APP_NOTIFYを受け取る あなたのアプリケーションが REQUEST_PURCHASEメッセージ。図5は、 これらの両方の場合。各sendBillingRequest()のリクエストタイプ 方法は太字で示され、放送意図はイタリックで示されている。にとって 図5はRESPONSE_CODEブロードキャストインテントを示していません リクエストごとに送信されます。

図5.払い戻しやその他の迷惑メールのメッセージシーケンス IN_APP_NOTIFYメッセージ。

最初のケースでは、アプリケーションがIN_APP_NOTIFY ユーザーがアプリケーションを2つ(または より多くの)デバイスを使用し、ユーザーは デバイス。この場合、Google PlayはIN_APP_NOTIFYメッセージを送信します 第2の装置は、アプリケーションに購入があることを通知する 状態変化。アプリケーションはこのメッセージを同じ方法で処理できます アプリケーションによって開始されたREQUEST_PURCHASEからの応答を処理する メッセージが表示されるので、最終的にアプリケーションには PURCHASE_STATE_CHANGEDブロードキャストインテントメッセージ。 購入された商品に関する情報。これはただ適用する 製品タイプが「管理ユーザーあたり」に設定されているアイテム アカウント。"

2番目のケースでは、アプリケーションは、IN_APP_NOTIFY Google Playが払い戻し通知を受け取ったときの放送の意図 Googleウォレット。この場合、Google PlayはIN_APP_NOTIFYを送信します メッセージをアプリケーションに送信します。アプリケーションはこのメッセージを処理できます アプリケーションからの応答を処理するのと同じ方法 REQUEST_PURCHASEメッセージを送信して、最終的にアプリケーションが受け取るようにします PURCHASE_STATE_CHANGEDメッセージ。 払い戻された商品払い戻し情報は、 PURCHASE_STATE_CHANGEDブロードキャストに付随するJSON文字列 意図。また、JSON文字列のpurchaseStateフィールドは2に設定されています。

これは、Merchant Centerからの払い戻しが、IN_APP_NOTIFYをトリガーすることを意味します。 getPurchaseInformation コールが行われ、 PURCHASE_STATE_CHANGED イベントがトリガーされ、払い戻された注文が表示されなくなります。これは注文がないことを確認してコンテンツがブロックされることを意味します。