×
Namespaces

Variants
Actions

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

From Nokia Developer 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 09:31.
56 page views in the last 30 days.