支付sdk演示程序不在BlackBerry工作?

时间:2012-07-19 13:29:21

标签: blackberry in-app-purchase

我正在使用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

1 个答案:

答案 0 :(得分:2)

在调用PaymentEngine.getInstance()之前,您要做的第一件事就是先调用PaymentEngine.isAppWorldInstalledAndAtCorrectVersion()。此调用将检查设备安装的App World版本以及是否需要升级。付款SDK需要最低版本的App World随SDK版本而变化,因此上述调用有助于确保您的安全。如果这会引发异常,您可以调用PaymentEngine.upDateAppWorld()来启动更新。

如果App World的版本版本正确,请在设备上提供有关App World版本的一些信息,以及用于重现问题的确切设备型号和软件版本。