编程题实操
中级开发文档---使用入门---示例代码
常用知识点:
1) Req请求数据的使用: 创建对象, set属性
ProductInfoReq req = new ProductInfoReq();
// priceType: 0:消耗型商品; 1:非消耗型商品; 2:订阅型商品
req.setPriceType(0);
req.setProductIds(productIdList);
2)列表的使用
List<String> productIdList = new ArrayList<>();
或者
List<String> productIdList = new LinkedList<>();
3) 回调函数: [被别的函数调用的函数], [回调函数的参数值自动填充]。
4)获取调用接口的Activity对象
// 获取当前的activity
final Activity activity = getActivity();
// 在Activity的响应事件中获取
final Activity activity=MainActivity.this;
5)调用obtainProductInfo接口获取AppGallery Connect网站配置的商品的详情信息
Task<ProductInfoResult> task = Iap.getIapClient(activity).obtainProductInfo(req);
6) task.addOnSuccessListener(new OnSuccessListener<ProductInfoResult>() {
@Override
public void onSuccess(ProductInfoResult productInfoResult) {
List<ProductInfo> productInfoList= productInfoResult.getProductInfoList();
}
});
7) 支付状态: OrderStatusCode 枚举类
8) 设置文本 setText(...)
5. 作业
----------------------------------------------------------------------------------
答案
---------------------------------------------
/**
* 实现获取商品列表功能 - 请不要删除,否则影响考试成绩
* 非消耗型商品ID : Exams_NonConsumable_001
*/
public void onGetProductList() {
// TODO 根据非消耗型商品类型为:"1" 以及 商品ID固定为:"Exams_NonConsumable_001",设置请求商品列表参数 ProductInfoReq
ProductInfoReq req=new ProductInfoReq();
List<String> list=new ArrayList<>();
list.add("Exams_NonConsumable_001");
req.setPriceType(1);
req.setProductIds(list);
// TODO 通过调用 obtainProductInfo 接口,获取商品列表数据
Task<ProductInfoResult> task=Iap.getIapClient(MainActivity.this).obtainProductInfo(req);
// TODO 回调接口添加 addOnSuccessListener 监听,在 onSuccess(ProductInfoResult result) 回调成功方法中调用 onUpdateProductInfo 方法,展示商品信息
task.addOnSuccessListener(new OnSuccessListener<ProductInfoResult>() {
@Override
public void onSuccess(ProductInfoResult productInfoResult) {
onUpdateProductInfo(productInfoResult.getProductInfoList());
}
});
}
/**
* 实现购买商品功能 - 请不要删除,否则影响考试成绩
*/
private void onBuyProduct() {
// TODO 根据非消耗型商品类型 以及 商品ID,构建购买请求参数 PurchaseIntentReq
PurchaseIntentReq req=new PurchaseIntentReq();
req.setPriceType(1);
req.setProductId("Exams_NonConsumable_001");
// TODO 根据构建的 PurchaseIntentReq,调用createPurchaseIntent接口,创建托管商品订单
Task<PurchaseIntentResult> task=Iap.getIapClient(MainActivity.this).createPurchaseIntent(req);
// TODO 回调接口添加addOnSuccessListener监听,在 onSuccess() 回调成功方法中,启动IAP返回的收银台页面
task.addOnSuccessListener(new OnSuccessListener<PurchaseIntentResult>() {
@Override
public void onSuccess(PurchaseIntentResult result) {
Status status = result.getStatus();
if (status.hasResolution()) {
try {
// 6666是您自定义的常量
// 启动IAP返回的收银台页面
status.startResolutionForResult(MainActivity.this, 6666);
} catch (IntentSender.SendIntentException exp) {
}
}
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
try {
if (data == null) {
Log.e(TAG, "data is null");
return;
}
// TODO 支付成功后回调, 根据返回的 Intent data参数,调用 parsePurchaseResultInfoFromIntent 解析支付结果数据\
PurchaseResultInfo info=Iap.getIapClient(MainActivity.this).parsePurchaseResultInfoFromIntent(data);
// TODO 根据解析结果数据中 ReturnCode 判断支付是否成功
if(info.getReturnCode()== OrderStatusCode.ORDER_STATE_SUCCESS) {
// TODO 根据解析结果数据获取的 getInAppPurchaseData()数据,构造 InAppPurchaseData 对象,
InAppPurchaseData inAppPurchaseData=new InAppPurchaseData(info.getInAppPurchaseData());
// 并使用 InAppPurchaseData getPurchaseToken 方法获取 PurchaseToken,
String token=inAppPurchaseData.getPurchaseToken();
// TODO 将获取的 PurchaseToke 值设置到 mTvPurchaseToken 控件中
mTvPurchaseToken.setText(token);
}
} catch (Exception e) {
e.printStackTrace();
}
}