应用内订阅
In-App Subscription
每当我使用测试帐户测试应用程序中的订阅时,它 return 成功回调,根据回调,我在我的远程服务器上存储了一些信息......但是当我发布它并测试时其他帐户扣除订阅金额并成功执行,但我无法收到成功回调,因此我无法访问内容。我们如何从采购模型或库存模型中获取交易信息,除此之外,我们如何获取有关特定订单 ID 的信息,例如其剩余时间等,这些信息由 google 它自己管理。我们如何在每台设备上识别用户和(his/her)订阅以访问内容
mHelper = new IabHelper(this, "Key");
mHelper.startSetup(new IabHelper.OnIabSetupFinishedListener() {
public void onIabSetupFinished(IabResult result) {
if (!result.isSuccess()) {
Log.d(TAG, "In-app Billing setup failed: " + result);
} else {
Log.d(TAG, "In-app Billing is set up OK");
}
// Hooray, IAB is fully set up!
}
});
levelSubscriptionPurchaseFinishedListener = new IabHelper.OnIabPurchaseFinishedListener() {
public void onIabPurchaseFinished(IabResult result,
Purchase purchase) {
if (result.isFailure()) {
Log.d(TAG, "failed billing");
} else {
Log.d(TAG, "purchase success Callback billing");
Log.d(TAG, purchase.getToken());
setSubscription(session.getUserDetail().getEmail());
}
}
};
mReceivedInventoryListener = new IabHelper.QueryInventoryFinishedListener() {
public void onQueryInventoryFinished(IabResult result,
Inventory inventory) {
if (!result.isFailure()) {
Log.d(TAG, "Query Inventory failed Callback billing");
/*Toast.makeText(Dashboard.this, "InventoryListener", Toast.LENGTH_SHORT).show();
// Handle failure
mHelper.consumeAsync(inventory.getPurchase(ITEM_SKU),
mConsumeFinishedListener);*/
} else {
Log.d(TAG, "Query Inventory success Callback billing");
}
}
};
mConsumeFinishedListener = new IabHelper.OnConsumeFinishedListener() {
public void onConsumeFinished(Purchase purchase,
IabResult result) {
if (result.isSuccess()) {
Log.d(TAG, "Consume finish success Callback billing");
} else {
Log.d(TAG, "Consume finish failed Callback billing");
}
}
};
您可以在 QueryInventoryFinishedListener 中获取购买详细信息,例如
Purchase monthlySubscription = inv.getPurchase(SKU_SUBSCRIPTION_MONTHLY);
if (monthlySubscription != null) {
Log.d(TAG, "User has already subscribed for monthly benefits.");
Utils.Log(monthlySubscription.toString());
} else {
launchSubscriptions();
}
private void launchSubscriptions() {
try {
iabHelper.launchSubscriptionPurchaseFlow((Activity) context,
SKU_SUBSCRIPTION_MONTHLY, REQUEST_CODE, new
IabHelper.OnIabPurchaseFinishedListener() {
@Override
public void onIabPurchaseFinished(IabResult result,
Purchase monthlySubscription) throws
IabHelper.IabAsyncInProgressException {
if (result.isFailure()) {
Log.e(TAG, "Error purchasing: " + result);
} else if (result.isSuccess()) {
Log.d(TAG, "---Success---");
} else {
Log.d(TAG, "---Error---");
}
}
}, String.valueOf(preferences.getUserId()));
} catch (IabHelper.IabAsyncInProgressException e) {
e.printStackTrace();
}
}
您还在 "launchSubscriptionPurchaseFlow" 方法中添加了一个额外的参数。每当您获得购买详细信息时,您还会获得该额外参数。所以使用这个参数你可以识别用户明智的购买
(在我的例子中,我在 launchSubscriptions() 方法中添加了 userId)
每当我使用测试帐户测试应用程序中的订阅时,它 return 成功回调,根据回调,我在我的远程服务器上存储了一些信息......但是当我发布它并测试时其他帐户扣除订阅金额并成功执行,但我无法收到成功回调,因此我无法访问内容。我们如何从采购模型或库存模型中获取交易信息,除此之外,我们如何获取有关特定订单 ID 的信息,例如其剩余时间等,这些信息由 google 它自己管理。我们如何在每台设备上识别用户和(his/her)订阅以访问内容
mHelper = new IabHelper(this, "Key");
mHelper.startSetup(new IabHelper.OnIabSetupFinishedListener() {
public void onIabSetupFinished(IabResult result) {
if (!result.isSuccess()) {
Log.d(TAG, "In-app Billing setup failed: " + result);
} else {
Log.d(TAG, "In-app Billing is set up OK");
}
// Hooray, IAB is fully set up!
}
});
levelSubscriptionPurchaseFinishedListener = new IabHelper.OnIabPurchaseFinishedListener() {
public void onIabPurchaseFinished(IabResult result,
Purchase purchase) {
if (result.isFailure()) {
Log.d(TAG, "failed billing");
} else {
Log.d(TAG, "purchase success Callback billing");
Log.d(TAG, purchase.getToken());
setSubscription(session.getUserDetail().getEmail());
}
}
};
mReceivedInventoryListener = new IabHelper.QueryInventoryFinishedListener() {
public void onQueryInventoryFinished(IabResult result,
Inventory inventory) {
if (!result.isFailure()) {
Log.d(TAG, "Query Inventory failed Callback billing");
/*Toast.makeText(Dashboard.this, "InventoryListener", Toast.LENGTH_SHORT).show();
// Handle failure
mHelper.consumeAsync(inventory.getPurchase(ITEM_SKU),
mConsumeFinishedListener);*/
} else {
Log.d(TAG, "Query Inventory success Callback billing");
}
}
};
mConsumeFinishedListener = new IabHelper.OnConsumeFinishedListener() {
public void onConsumeFinished(Purchase purchase,
IabResult result) {
if (result.isSuccess()) {
Log.d(TAG, "Consume finish success Callback billing");
} else {
Log.d(TAG, "Consume finish failed Callback billing");
}
}
};
您可以在 QueryInventoryFinishedListener 中获取购买详细信息,例如
Purchase monthlySubscription = inv.getPurchase(SKU_SUBSCRIPTION_MONTHLY);
if (monthlySubscription != null) {
Log.d(TAG, "User has already subscribed for monthly benefits.");
Utils.Log(monthlySubscription.toString());
} else {
launchSubscriptions();
}
private void launchSubscriptions() {
try {
iabHelper.launchSubscriptionPurchaseFlow((Activity) context,
SKU_SUBSCRIPTION_MONTHLY, REQUEST_CODE, new
IabHelper.OnIabPurchaseFinishedListener() {
@Override
public void onIabPurchaseFinished(IabResult result,
Purchase monthlySubscription) throws
IabHelper.IabAsyncInProgressException {
if (result.isFailure()) {
Log.e(TAG, "Error purchasing: " + result);
} else if (result.isSuccess()) {
Log.d(TAG, "---Success---");
} else {
Log.d(TAG, "---Error---");
}
}
}, String.valueOf(preferences.getUserId()));
} catch (IabHelper.IabAsyncInProgressException e) {
e.printStackTrace();
}
}
您还在 "launchSubscriptionPurchaseFlow" 方法中添加了一个额外的参数。每当您获得购买详细信息时,您还会获得该额外参数。所以使用这个参数你可以识别用户明智的购买 (在我的例子中,我在 launchSubscriptions() 方法中添加了 userId)