程序内支付-Java程序实现流程
文章信息
在开始你的代码实现之前,请先确保你已经从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中获取付费物品的信息。
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” 来验证用户是否已经真正购买次内容,服务。


(no comments yet)