1

PaymentSDkバージョン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のエンジンオブジェクトでnullを取得していることです。この問題を解決する方法を教えてください。また、このサービスの実際の要件は何ですか。現在、5.0OSとデバイス6.0OSで作業しています

4

1 に答える 1

2

電話をかける前に、最初にやりたいことは、PaymentEngine.getInstance()最初に電話することですPaymentEngine.isAppWorldInstalledAndAtCorrectVersion()。この呼び出しは、デバイスにインストールされているApp Worldのバージョンと、アップグレードが必要かどうかを確認します。Payment SDKには、SDKのバージョンに応じて変更される最小バージョンのApp Worldが必要であるため、上記の呼び出しは安全を確保するのに役立ちます。これにより例外がスローされた場合は、呼び出しPaymentEngine.upDateAppWorld()て更新を開始できます。

App Worldのバージョンが正しいバージョンである場合は、デバイス上のApp Worldのバージョンと、問題の再現に使用された正確なデバイスモデルとソフトウェアバージョンに関する情報を含めてください。

于 2012-07-30T13:59:44.870 に答える