Android one store v21版本储值SDK接入

接下来给大家介绍下one store v21版本的储值SDK接入使用流程!!

one store v21接入文档:v21接入教程

一. 配置

build.gradle(project)


repositories {
    ...
    maven { url 'https://repo.onestore.co.kr/repository/onestore-sdk-public' }
}

build.gradle(app/library)


dependencies {
    implementation "com.onestorecorp.sdk:sdk-iap:21.00.00"
    implementation "com.onestorecorp.sdk:sdk-configuration-kr:1.0.0"
}

AndroidManifest.xml

	//适配target 30 Android11
	<queries>
        <intent>
            <action android:name="com.onestore.ipc.iap.IapService.ACTION" />
        </intent>
        <intent>
            <action android:name="android.intent.action.VIEW" />
            <data android:scheme="onestore" />
        </intent>
    </queries>

	//适配 target31 Android12
	//请在四大组件(activity,receiver...)中加入这个属性:android:exported="false",true or false 看工程需求。示例:
	 <activity
            android:name="com.xxx.xxxx.xxxActivity"
            android:exported="false"/>

	//支付界面选项,application下添加
	//full: 全屏(竖屏,固定)
	//popup: 弹窗界面(竖屏&横屏)
	<meta-data
            android:name="iap:view_option"
            android:value="popup" />

如果你需要手动集成,而不是通过maven,那么可以使用fat-aar把库拉取下来,使用教程请查看 fat-aar使用教程

二. 接口调用流程

  1. 初始化
//继承PurchasesUpdatedListener 或者 定义变量
private PurchasesUpdatedListener purchasesUpdatedListener = new PurchasesUpdatedListener {
        @Override
        public void onPurchasesUpdated(IapResult iapResult, List<PurchaseData>) {
                // To be implemented in a later section.
                if (iapResult.isSuccess() && purchaseData != null && purchaseData.size() > 0) {
                	//可在此处处理储值,或回调出去再处理
                	//handlePurchase(purchase);//consumeAsync()
                }

            } else if (iapResult.getResponseCode() == PurchaseClient.ResponseCode.RESULT_NEED_UPDATE) {
                // You need the required version of the ONE store service in the SDK.
                
            } else {
                // Other error codes.
                //"Onestore储值异常"
                
            }
        }
};

private PurchaseClient purchaseClient = PurchaseClient.newBuilder(activity)
        .setListener(purchasesUpdatedListener)
        .setBase64PublicKey(/*your public key*/) // optional
        .build();
  1. 设置one store服务连接
    callback.connected();
    callback.disConnection();
    interface 类请自行设计
	purchaseClient.startConnection(new PurchaseClientStateListener() {
                @Override
                public void onSetupFinished(IapResult iapResult) {
                    LogUtil.d(TAG, "onConnected");

                    if (iapResult.isSuccess()) {
                        // The PurchaseClient is ready. You can query purchases here.
                        
                        callback.connected();

                    } else if (iapResult.getResponseCode() == PurchaseClient.ResponseCode.RESULT_NEED_LOGIN) {
                        // The connection is completed successfully but login is required. You must write your login code here.
                        //此处调用登录
                        
                    } else if (iapResult.getResponseCode() == PurchaseClient.ResponseCode.RESULT_NEED_UPDATE) {
                        LogUtil.d(TAG, "connect onErrorNeedUpdateException");
                        //此处调用应用更新接口
                        

                    } else {
                        // Other error codes.
                        
                    }
                }

                @Override
                public void onServiceDisconnected() {
                    LogUtil.d(TAG, "onDisconnected");
                    callback.disConnection();
                    
                }
            });
  1. 登录 one store
GaaSignInClient.getClient(mActivity).launchSignInFlow(mActivity, new OnAuthListener() {
                @Override
                public void onResponse(SignInResult signInResult) {
                    if (signInResult.isSuccessful()) {
                    	//成功
                        LogUtil.e("测试", "code: " + signInResult.getCode());
                        LogUtil.e("测试", "message: " + signInResult.getMessage());
                        
                    } else {
                    	//失败
                        LogUtil.w(TAG, "launchLoginFlow() got an error response code: " + signInResult.getCode());
                        
                    }
                }
            });
  1. 查询商店详细信息
	connect(new Connection() {
                @Override
                public void connected() {
                    LogUtil.i(TAG, "queryPurchases connected: Called!");

                    ProductDetailsParams productDetailsParams = ProductDetailsParams.newBuilder()
                            .setProductIdList(productIdList)
                            .setProductType(PurchaseClient.ProductType.INAPP)
                            .build();

                    mPurchaseClient.queryProductDetailsAsync(productDetailsParams, new ProductDetailsListener() {
                        @Override
                        public void onProductDetailsResponse(IapResult iapResult, List<ProductDetail> productDetails) {
                            // Process the result.
                            
                            if (iapResult.isSuccess()) {
                                if (productDetails != null) {
                                    for (ProductDetail product : productDetails) {
                                    }
                                }
                                
                            } else {
                                LogUtil.w(TAG, "queryPurchasesAsync() got an error response code: " + iapResult.getResponseCode());
                                
                            }
                        }
                    });
                }

                @Override
                public void disConnection() {
                    LogUtil.i(TAG, "queryPurchases disConnection: Called!");
              
                }
            });
  1. 拉起储值
	connect(new Connection() {
                @Override
                public void connected() {
                    LogUtil.i(TAG, "launchPurchase connected: Called!");

                    // Retrieve a value for "productDetail" by calling queryProductDetailsAsync().
                    PurchaseFlowParams purchaseFlowParams = PurchaseFlowParams.newBuilder()
    						.setProductId(productId)
    						.setProductType(PurchaseClient.ProductType.INAPP)
						    .setDeveloperPayload(devPayload) // optional
						    .setQuantity(1) // optional
						    .setProductName("") // optional
						    .setGameUserId("") // optional
						    .setPromotionApplicable(false) // optional
						    .build();

                    mPurchaseClient.launchPurchaseFlow(mActivity, purchaseFlowParams);
                }

                @Override
                public void disConnection() {
                    LogUtil.i(TAG, "launchPurchase disConnection: Called!");
                }
            });
  1. 购买处理
private void handlePurchase(PurchaseData purchase) {
	connect(new Connection() {
                @Override
                public void connected() {
                    LogUtil.i(TAG, "consume connected: Called!");
               
                    ConsumeParams params = ConsumeParams.newBuilder().setPurchaseData(purchase).build();
                    mPurchaseClient.consumeAsync(params, new ConsumeListener() {
                        @Override
                        public void onConsumeResponse(final IapResult iapResult, final PurchaseData purchaseData) {
                            if (iapResult.isSuccess()) {
                                // Process the result. 储值成功完成
                                
                            } else if (iapResult.getResponseCode() == PurchaseClient.ResponseCode.RESULT_NEED_UPDATE) {
                                // You need the required version of the ONE store service in the SDK.
                                
                            } else {
                                // Other error codes.
                                
                            }
                        }
                    });
                }

                @Override
                public void disConnection() {
                    LogUtil.i(TAG, "consume disConnection: Called!");
                    
                }
            });
        }
  1. 查询购买订单

如果存在掉单的,此处会有数据返回,然后自行处理掉单补单逻辑

	connect(new Connection() {
                @Override
                public void connected() {
                    LogUtil.i(TAG, "queryPurchases connected: Called!");

                    mPurchaseClient.queryPurchasesAsync(PurchaseClient.ProductType.INAPP, new QueryPurchasesListener() {
                        @Override
                        public void onPurchasesResponse(IapResult iapResult, List<PurchaseData> purchaseData) {
                            
                            if (iapResult.isSuccess()) {
                                if (purchaseData != null) {
                                    for (PurchaseData purchase : purchaseData) {
                                    //回调出去,或处理
                                        
                                    }
                                }
                                
                            } else {
                                LogUtil.w(TAG, "queryPurchasesAsync() got an error response code: " + iapResult.getResponseCode());
                                
                            }
                        }
                    });
                }

                @Override
                public void disConnection() {
                    LogUtil.i(TAG, "queryPurchases disConnection: Called!");
                   
                }
            });
  1. 安装One store服务
Activity activity = ...

purchaseClient.launchUpdateOrInstallFlow(activity, new IapResultListener() {
    @Override
    public void onResponse(IapResult iapResult) {
        if (iapResult.isSuccess()) {
            // If the installation is completed successfully,
            // you should try to reconnect with the ONE store service.
            // PurchaseClient by calling the startConnection() method.
        }
    }
});

三. 注意事项

1.v17和v19版本是不兼容的,v17掉的单,在v19是不能自动补发的,需要人为手动补发。
2.从2023年6月开始,所有新创建的应用都必须使用v21的SDK。
3.v21是在v19的基础上升级的,所以和v19兼容,使用v19的sdk版本可以直接升至v21版本。
4.沙盒测试记得把账号在后台加入测试计划。

至此,one store v21版本的储值SDK就接入完成了~~希望对你有帮助!!

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值