Namespaces

Variants
Actions

Please note that as of October 24, 2014, the Nokia Developer Wiki will no longer be accepting user contributions, including new entries, edits and comments, as we begin transitioning to our new home, in the Windows Phone Development Wiki. We plan to move over the majority of the existing entries over the next few weeks. Thanks for all your past and future contributions.

Revision as of 06:31, 19 November 2013 by hamishwillee (Talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

程序内支付-Java程序实现流程

From Wiki
Jump to: navigation, search
WP Metro Icon Chinese.png
Article Metadata

文章
Amazing110 在 11 Jan 2012 创建
最后由 hamishwillee 在 19 Nov 2013 编辑


在开始你的代码实现之前,请先确保你已经从Nokia Store获取到了Product ID。 下面是实现IAP支付的基本流程:

Contents

1. 获取付费内容信息

调用IAPClientPaymentManager.setIAPClientPaymentListener函数来设置一个IAPClientPaymentListener监听实例,然后调

用 IAPClientPaymentManager.getProductData 来获取元数据内容,你可以针对每一个出售的物品调用次函数,也可以一次

性为所有的物品调用此函数。每一次getProductData的调用都会触发IAPClientPaymentListener.productDataReceived 或者

IAPClientPaymentListener.productDataListReceived 的回调。示例代码:

try {
// set IAPClientPaymentListener
IAPClientPaymentManager manager = IAPClientPaymentManager.getIAPClientPaymentManager();
manager.setIAPClientPaymentListener(this);
 
// request metadata for product with ID "123456"
int status = manager.getProductData("123456");
if (status != IAPClientPaymentManager.SUCCESS) {
// do not expect a productDataReceived() callback, handle the failed call
}
} catch (IAPClientPaymentException e) {
// handle IAPClientPaymentException from getIAPClientPaymentManager()
}

2. 向用户显示付费物品信息

实现IAPClientPaymentListener.productDataReceived 或者 IAPClientPaymentListener.productDataListReceived 函数,以

便获取到付费物品信息后回调,然后回调参数中,我们可以获取的IAPClientProductData对象或者数组,然后我们可以在应

用中把这些信息在UI中展示给用户,以便用户选择。至于具体怎样显示,由你自己决定。 productDataReceived 或者 productDataListReceived 函数在每一次 IAPClientPaymentManager.getProductData成功的调

用时都会被触发。 下面的代码展示如何从IAPClientProductData中获取付费物品的信息。

public void productDataReceived(int status, IAPClientProductData pd) {
 
if (status == IAPClientPaymentListener.OK) {
 
String title = pd.getTitle();
String price = pd.getPrice();
String sdesc = pd.getShortDescription();
 
// update the UI with the product information
 
}
 
}


3. 实现购买功能

通过UI界面触发实际的购买功能,比如你可以为每一个付费物品创建一个单独的按钮,或者说全部一个按钮,不管怎样你

需要调用IAPClientPaymentManager.purchaseProduct来实现真正的购买功能。

int purchaseStatus = manager.purchaseProduct("123456", 
 
IAPClientPaymentManager.FORCED_AUTOMATIC_RESTORATION);
if (purchaseStatus != IAPClientPaymentManager.SUCCESS) {
// do not expect a purchaseCompleted() callback, handle the failed call
}


4. 用户购买流程

到这一步,IAP开始了向Nokia商店的支付流程,在这个过程中,你的应用会处于后台状态。 下面的步骤描叙这个过程:

  • IAP框架提醒用户登录Nokia商店,然后会显示确认购买对话框。IAP框架决定了具体所使用的支付方式。
  • 支付完成后,IAP框架会发送一个purchaseCompleted回调到你的应用。
  • 然后IAP框架会显示一个关于支付是否成功的对话框提醒用户。
  • 最后用户点击对话框上的确认,你的应用重新获得了UI控制权,回到了前台。

以上这些都是由IAP框架自动完成的,开发者所需要的仅仅是一个简单的函数调用。


5. 访问付费内容,服务

如果支付成功后,IAP框架会授权用户访问付费的物品或者服务。

  • 如果付费内容是受DRM保护的,IAP框架就回去自动的移除DRM保护。你可以实现

IAPClientPaymentListener.purchaseCompleted 方法,在里面调用IAPClientPaymentManager.getDRMResourceAsStream

方法来访问DRM保护内容。

public void purchaseCompleted(int status, String purchaseTicket) {
// Protected resource file
String resourceFile = "/res/drm/data/resourceid_123456/resource.img";
if (status == IAPClientPaymentListener.OK) {
InputStream input = manager.getDRMResourceAsStream(resourceFile);
// Make the purchased content available to the user in the application UI
}
}
  • 如果付费内容是以其他方式保护的,你的应用必须要做出适当处理,以便授权用户使用受保护内容,服务。

同样你可以在IAPClientPaymentListener.purchaseCompleted 方法中实现。

  • 如果你使用的是后台终端服务器来下载付费物品服务到用户设备,那么这个服务器必须首先使用“ Purchase Ticket

Verification API” 来验证用户是否已经真正购买次内容,服务。





相关链接

This page was last modified on 19 November 2013, at 06:31.
50 page views in the last 30 days.

Was this page helpful?

Your feedback about this content is important. Let us know what you think.

 

Thank you!

We appreciate your feedback.

×