从零开始详解应用内支付:商品创建及测试上架

当用户在应用市场里下载APP,体验了免费的基础功能和服务后,通过自主选择付费,以获取和使用应用内提供的增值服务——这种用户应用内购买行为的完成,就需要用到应用内支付(In-App Purchases,简称IAP)。

应用内支付有丰富的使用场景和需求,游戏类应用中装备和虚拟币的购买、视频类应用中会员的订阅、知识工具类应用中一次性购买开高级服务和功能……应用内支付大大拓宽了移动开发的盈利模式,增加了APP营收的灵活性。

在华为移动生态体系中,我们为开发者提供了安全好用的应用内支付基础开发服务,助力开发者降本增效,实现付费转化和持续营收。本文将详解应用内支付开通启用、商品管理、测试和上架等环节操作步骤,呈现应用内商品生成全过程,让开发者轻松实现从入门运用和熟练掌握华为应用内支付服务。

IAP的启用及商品管理方法
启用服务
1.开启服务开关

1.1. 登录 AppGallery Connect 网站,选择“我的项目”,在项目列表中找到相应项目,在项目下的应用列表中选择需要开通服务的应用。

1.2. 在所选应用页面中点击<我的项目>,进入“API管理”页签,打开需要开通服务所在行的开关。

*API管理:在此页签确认和开通所需服务能力。支持一个服务有多个API开关,可单独控制各API开启或关闭,也可通过该服务右侧的API总开关一键开启或关闭该服务下的全部API。

2.配置支付服务参数
2.1. 在所选应用页面左侧导航栏选择[盈利 >www.ggymb.com 应用内支付服务],点击[设置]。
如果首次配置会弹出签署协议弹框。

2.2. 点击“订阅通知地址”后的“✔”图标,配置订阅通知地址。

2.3. 配置完成点击“✔”。

创建商品及沙盒测试
1、创建商品:全球定价,一个版本搞定
登录AppAallery Connect,在[我的应用]界面选择应用,进入[运营]页面。

*数据信息为模拟

在[运营]页面左侧导航栏选择[产品运营 > 商品管理],选择[商品列表],点击[添加商品]。

1.1相关参数说明:
①确认创建的商品类型:华为应用内支付支持三种商品类型:
消耗型商品:即可以消耗使用的商品,比如游戏类应用中的金币、钻石、点券等,可用来兑换和购买应用内虚拟服务和物品的货币。
非消耗型商品:即购买后永久使用的商品。比如游戏中特别篇关卡、教育类应用中无限时的课程学习权限等
订阅型商品:即一种预定支付方式,购买后未来一段时间内允许访问增值更能或内容,周期结束后自动续期购买下一期的服务。比如音视频类、教育课程类应用中的月度会员等。
根据你所需添加的商品属性,来勾选商品类型进行进一步填写。

②商品ID:以大小写字母及数字开头,由字母、数字及下划线 (_) 和句点 (.)组成,字符输入上限148个,一个应用内商品ID不能重复,保存后不能修改,删除后无法再次使用。

③语言:点击[管理语言列表],勾选需支持的语言种类
④商品名称:不能为空,字符上限55个,不支持特殊字符|
⑤商品简介:不能为空,字符上限100个,不支持特殊字符|
⑥商品价格:点击“查看编辑”,为商品适配合适价格。

1.2 面向全球的商品信息设置:如果你的应用开发面向全球多个国家,无需维护管理多个地域版本。

多语言设置:创建商品时,在<语言>栏,勾选需支持的国家语言,并在<商品名称>一栏,输入对应国家语言的商品名及信息。

全球实时汇率定价参考:不同国家及地域的价格设置,只需定义一个商品价格,不同国家和地区价格会根据当地汇率来计算并显示,给开发者提供当地定价依据,也可自定义单个地域定价。

商品信息填写完成后,点击[编辑价格],即可进入商品价格编辑界面。

根据以上操作步骤,完成商品创建,回到商品列表页面进行商品的状态编辑,点击<生效>,即添加商品完成。

相关参数说明:

通用币种要求国家/地区:支持整数或两位小数,如输入1.34,则默认选取1.34作为该商品的输入价格;
特殊币种要求国家/地区:

  • 仅支持整数的国家/地区,整数或向上取整作为输入价格,如输入5.02,则默认选取6.00作为该商品的输入价格;
  • 仅以五分之一为最小单位的国家/地区,整数或向上取符合五分之一要求的数值作为输入价格,如输入1.23,则默认选取1.40作为该商品的输入价格。

1.3商品激活
填写好信息点击[保存],返回商品列表,新添加商品会显示处于[失效]状态,点击确认[激活],商品即生效。

2、客户端接入,支付过程开发指南
2.1 判断是否支持应用内支付

在使用应用内支付之前,你的应用需向华为应用内支付发送isEnvReady请求,以此判断用户当前登录的华为帐号所在的服务地是否在华为IAP支持结算的国家/地区中。如果应用未接入华为帐号的登录接口,可通过该接口完成登录操作。

开发步骤如下:

发起isEnvReady请求,并设置两个回调监听来接收接口请求的结果。
• 当接口请求成功时,你的应用将获取到一个IsEnvReadyResult实例对象,表示用户当前登录的华为帐号所在的服务地支持IAP。
• 当接口请求失败时,IAP会返回一个Exception对象,若该对象为IapApiException对象,可使用其getStatusCode()方法获取此次请求的返回码。
当返回帐号未登录(OrderStatusCode.ORDER_HWID_NOT_LOGIN)时,可使用IapApiException对象中的status拉起华为帐号登录页面,此后在Activity的onActivityResult方法中获取结果信息。从onActivityResult返回的intent中解析出returnCode,当returnCode=OrderStatusCode.ORDER_STATE_SUCCESS时,则表示当前帐号所在服务地支持IAP,其他则表示此次请求有异常。
*Status不支持序列化,请勿对IAP接口返回的Status对象执行序列化操作。

// 获取调用接口的Activity对象
final Activity activity = getActivity();
Task task = Iap.getIapClient(activity).isEnvReady();
task.addOnSuccessListener(new OnSuccessListener() {
@Override
public void onSuccess(IsEnvReadyResult result) {
// 获取接口请求的结果
int accountFlag = result.getAccountFlag();
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(Exception e) {
if (e instanceof IapApiException) {
IapApiException apiException = (IapApiException) e;
Status status = apiException.getStatus();
if (status.getStatusCode() == OrderStatusCode.ORDER_HWID_NOT_LOGIN) {
// 未登录帐号
if (status.hasResolution()) {
try {
// 6666是您自定义的常量
// 启动IAP返回的登录页面
status.startResolutionForResult(activity, 6666);
} catch (IntentSender.SendIntentException exp) {
}
}
} else if (status.getStatusCode() == OrderStatusCode.ORDER_ACCOUNT_AREA_NOT_SUPPORTED) {
// 用户当前登录的华为帐号所在的服务地不在华为IAP支持结算的国家/地区中
}
} else {
// 其他外部错误
}
}
});
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 6666) {
if (data != null) {
// 使用parseRespCodeFromIntent方法获取接口请求结果
int returnCode = IapClientHelper.parseRespCodeFromIntent(data);
// 使用parseAccountFlagFromIntent方法获取接口返回的帐号类型
int accountFlag = IapClientHelper.parseAccountFlagFromIntent(data);
}
}
}
2.2 展示商品信息

在华为AppGallery Connect网站上完成商品的配置后,需在你的应用中使用obtainProductInfo接口来获取此类商品的详细信息。

开发步骤如下:

  1. 构建请求参数ProductInfoReq,发起obtainProductInfo请求并设置OnSuccessListener和OnFailureListener回调监听器以接收接口请求的结果。您需要在ProductInfoReq中携带您此前已在华为AppGallery Connect网站上定义并生效的商品ID,并根据实际配置的商品指定其priceType。
    *obtainProductInfo每次只能查询一种类型的商品。
  2. 当接口请求成功时,IAP将返回一个ProductInfoResult对象,您的应用可通过该对象的getProductInfoList方法获取到包含了单个商品信息的ProductInfo对象的列表。您可以使用ProductInfo对象包含的商品价格、名称和描述等信息,向用户展示可供购买的商品列表。

List productIdList = new ArrayList<>();
// 查询的商品必须是您在AppGallery Connect网站配置的商品
productIdList.add(“ConsumeProduct1001”);
ProductInfoReq req = new ProductInfoReq();
// priceType: 0:消耗型商品; 1:非消耗型商品; 2:订阅型商品
req.setPriceType(0);
req.setProductIds(productIdList);
// 获取调用接口的Activity对象
final Activity activity = getActivity();
// 调用obtainProductInfo接口获取AppGallery Connect网站配置的商品的详情信息
Task task = Iap.getIapClient(activity).obtainProductInfo(req);
task.addOnSuccessListener(new OnSuccessListener() {
@Override
public void onSuccess(ProductInfoResult result) {
// 获取接口请求成功时返回的商品详情信息
List productList = result.getProductInfoList();
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(Exception e) {
if (e instanceof IapApiException) {
IapApiException apiException = (IapApiException) e;
int returnCode = apiException.getStatusCode();
} else {
// 其他外部错误
}
}
});
2.3 发起购买

AppGallery Connect网站支持托管的商品包括消耗型商品,非消耗型商品和订阅型商品。您的应用可通过createPurchaseIntent接口发起购买请求。开发步骤如下:

  1. 构建请求参数PurchaseIntentReq,发起createPurchaseIntent请求。您需要在PurchaseIntentReq中携带您此前已在AGC网站上定义并生效的商品ID。当接口请求成功时,您可获取到一个PurchaseIntentResult对象,其getStatus方法返回了一个Status对象,您的应用需要通过Status对象的startResolutionForResult方法来启动华为IAP收银台。
    *Status不支持序列化,请勿对IAP接口返回的Status对象执行序列化操作。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值