我正在使用Payment SDk 1.8版了解黑莓手机内的应用内购买任务。 目前我使用以下代码:
package com.purchasedemo;
///import net.rimlib.blackberry.api.payment.*;
import net.rimlib.blackberry.api.paymentsdk.PaymentEngine;
import net.rimlib.blackberry.api.paymentsdk.PaymentException;
import net.rimlib.blackberry.api.paymentsdk.Purchase;
import net.rimlib.blackberry.api.paymentsdk.PurchaseArgumentsBuilder;
import net.rimlib.blackberry.api.paymentsdk.PurchaseResult;
import net.rimlib.blackberry.api.paymentsdk.purchaseHistory.PurchaseHistory;
import net.rimlib.blackberry.api.paymentsdk.purchaseHistory.PurchaseHistoryListingListener;
import net.rim.device.api.ui.*;
import net.rim.device.api.ui.component.*;
import net.rim.device.api.ui.container.*;
public class PurchaseDemo extends UiApplication
{
public static void main(String[] args)
{
PurchaseDemo theApp = new PurchaseDemo();
theApp.enterEventDispatcher();
}
public PurchaseDemo()
{
pushScreen(new PurchaseDemoScreen());
}
private static class PurchaseDemoScreen extends MainScreen implements FieldChangeListener {
private BasicEditField parentSku;
private ButtonField buyButton;
private ButtonField displayButton;
private BasicEditField digitalGoodName;
private BasicEditField digitalGoodSku;
private PurchaseHistoryListingListener purchaseHistoryListener;
private PaymentEngine **engine** = PaymentEngine.getInstance();
public PurchaseDemoScreen() {
setTitle( "Payment Service SDK Demo" );
if( **engine** != null ) {
parentSku = new BasicEditField( "Parent SKU: ", "abc123" );
add( parentSku );
digitalGoodName = new BasicEditField( "Digital Good Name: ", "Sample Good" );
add( digitalGoodName );
digitalGoodSku = new BasicEditField( "Digital Good SKU: ", "abc123" );
add( digitalGoodSku );
HorizontalFieldManager hfm = new HorizontalFieldManager();
add( hfm );
buyButton = new ButtonField( "Buy" );
buyButton.setChangeListener( this );
hfm.add( buyButton );
displayButton = new ButtonField( "Display Purchases" );
displayButton.setChangeListener( this );
hfm.add( displayButton );
} else {
RichTextField errorMessage = new RichTextField( "Sorry, in-app purchases are unavailable" );
add( errorMessage );
}
}
public void fieldChanged( Field field, int context ) {
if( field == buyButton ) {
String name = digitalGoodName.getText();
String sku = digitalGoodSku.getText();
PurchaseArgumentsBuilder arguments = new PurchaseArgumentsBuilder().withDigitalGoodSku( sku )
.withDigitalGoodName( name ).withMetadata( name ).withPurchasingAppName( "Payment Service SDK Demo" );
try {
PurchaseResult purchase = engine.purchase( arguments.build() );
Dialog.inform( "Purchase of " + purchase.getMetadata() + " is successful." );
} catch( IllegalArgumentException e ) {
Dialog.inform( e.getMessage() );
} catch( PaymentException e ) {
Dialog.inform( e.getMessage() );
}
} else if( field == displayButton ) {
purchaseHistoryListener = new PurchaseHistoryListingListener() {
public void error( String message, int errorCode ) {
Dialog.inform( message );
}
public void success( Purchase[] purchases ) {
if( purchases.length != 0 ) {
if( getFieldCount() > 3 ) {
deleteRange( 3, ( getFieldCount() - 3 ) );
}
for( int i = 0; i < purchases.length; i++ ) {
RichTextField purchaseRecord = new RichTextField( "Name: " + purchases[ i ].getMetadata()
+ " SKU: " + purchases[ i ].getDigitalGoodSku() );
add( purchaseRecord );
}
} else {
Dialog.inform( "No existing purchases" );
}
}
};
PurchaseHistory.get(purchaseHistoryListener);
}
}
}
}
通过使用此代码,我只是想了解这个过程实际上是如何工作的。 但问题是,我在 PaymentEngine 的引擎对象中变为空。 请让我知道如何解决这个问题。 此服务的实际要求是什么。目前我正在开发5.0 OS和设备6.0 OS
答案 0 :(得分:2)
在调用PaymentEngine.getInstance()
之前,您要做的第一件事就是先调用PaymentEngine.isAppWorldInstalledAndAtCorrectVersion()
。此调用将检查设备安装的App World版本以及是否需要升级。付款SDK需要最低版本的App World随SDK版本而变化,因此上述调用有助于确保您的安全。如果这会引发异常,您可以调用PaymentEngine.upDateAppWorld()
来启动更新。
如果App World的版本版本正确,请在设备上提供有关App World版本的一些信息,以及用于重现问题的确切设备型号和软件版本。