Code sample: Creating an application that features in-app purchases

import net.rim.device.api.ui.*;
import net.rim.device.api.ui.component.*;
import net.rim.device.api.ui.container.*;
import net.rimlib.blackberry.api.paymentsdk.*;
import net.rimlib.blackberry.api.paymentsdk.purchaseHistory.*;

public class PurchaseDemo extends UiApplication {
    public static void main( String[] args ) {
        PurchaseDemo app = new PurchaseDemo();
        app.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);
            }
        }
    }
}

Was this information helpful? Send us your comments.