# 接入
# 账号接入
1、Maven 形式引入账号 SDK:在要引入的 app 工程下的的 build.gradle 文件的 dependencies{}里面 implementation '{SDK 名称+版本号}',如需 facebook 登录添加 facebooksdk 依赖,如下所示
implementation 'com.machbird:machbird-account:1.2.0-rc12'
//facebook sdk依赖(rc11版本号及以后版本不需要facebook依赖了)
//implementation 'com.facebook.android:facebook-core:6.0.0'
//implementation 'com.facebook.android:facebook-login:6.0.0'
//implementation 'com.facebook.android:facebook-share:6.0.0'
//implementation 'com.facebook.android:facebook-places:6.0.0'
//implementation 'com.facebook.android:facebook-messenger:6.0.0'
//implementation 'com.facebook.android:facebook-applinks:6.0.0'
2、在工程根目录下的 build.gradle 文件中的 repositories {}里面添加 maven center 依赖:
mavenCentral()
3、在工程的 value 文件夹中的 string.xml 或者自定义 config.xml 中添加 account id(MC_ACCOUNT_ID), facebook id(facebook_app_id) 和 google id(default_web_client_id):相关 ID 号值运营人员会提供
<string name="facebook_app_id">xxxx</string>
<string name="MC_ACCOUNT_ID">xxxxxx</string>
<string name="default_web_client_id">xxxxxxx</string>
//以下两个分别为debug模式下和release模式下的账号服务器地址配置,如果没有配置,我们会走sdk内部默认的账号服务器
<string name="DEBUG_MC_ACCOUNT_HOST_URL">http://test-xxxx</string> <!-- debug模式下测试服务器地址-->
<string name="USER_MC_ACCOUNT_HOST_URL">https://xxxx</string> <!-- 正式服务器地址,会覆盖sdk内部默认服务器地址-->
在 AndroidManifest.xml 里的
<meta-data
android:name="com.facebook.sdk.ApplicationId"
android:value="@string/facebook_app_id" />
<meta-data android:name="com.adjustX.sdk.appToken" android:value="xxxxx"/>
# 账号接口
1、无需初始化,直接用以下单例模式获得 Machbirdkit 的实体类
MachbirdKit.getInstance()
2、Machbirdkit 实体类一共包括 15 个接口,详细使用如下所示:
MachbirdKit.getInstance().isLogin(); //判断是否登录状态 true登录 false未登录
MachbirdKit.getInstance().getAccount();//获得账户信息 Account对象,Account 对象可能为空,为空就是未登录
MachbirdKit.getInstance().logout()//登出接口
~~MachbirdKit.getInstance().startLoginPage(); //弹出登录对话框,1.2.0-rc01版本以上已删除~~
MachbirdKit.getInstance().startEasyLoginPage(Activity activity, CGAccountCallBack callback);//弹出新版登录对话框
MachbirdKit.getInstance().startGoogleLogin(Activity activity, CGAccountCallBack callback)//无界面绑定(游客登录情况下登录未绑定的谷歌号就是游客账号和谷歌账号绑定)或登录谷歌账号接口(此谷歌账号已绑定游戏账号)
MachbirdKit.getInstance().startFaceBookLogin(Activity activity, CGAccountCallBack callback)//无界面绑定或登录facebook账号(逻辑与谷歌绑定或登录一致)
MachbirdKit.getInstance().startAccountInfo(Activity activity, CGAccountCallBack callback)//打开账号信息对话框
MachbirdKit.getInstance().startRegisterPage(Activity activity, CGAccountCallBack callback)//打开注册对话框
MachbirdKit.getInstance().autoLogin(CGAccountCallBack callback)//自动登录接口
MachbirdKit.getInstance().startGuestLogin(Activity activity, CGAccountCallBack callback)//游客登录接口,无账号时调用游客登录
//rc11 版本增加的接口
MachbirdKit.getInstance().startBindInfoPage(Activity activity, CGAccountCallBack callback)//打开收到绑定/解绑对话框UI
MachbirdKit.getInstance().getAccountBindInfo(Context context, CGAccountBindInfoCallBack BindInfoCallBack);//获得绑定信息
/**
* 对外接口 绑定
* @param activity
* @param callback
* 解绑与绑定参数 bindType 支持以下三种类型的绑定
* @param bindType :Constant.LoginType.FACEBOOK //facebook的绑定
* :Constant.LoginType.GOOGLE //谷歌绑定
* :Constant.LoginType.EMAIL //邮箱绑定
*/
MachbirdKit.getInstance().startBind(Activity activity,CGAccountCallBack callback,int bindType);//手动绑定账号接口
MachbirdKit.getInstance().startUnBind(Activity activity, CGAccountCallBack callback, int bindType);//手动解绑账号接口
----注意:所有接口中的回调CGAccountCallBack类中方法都是在java主线程中调用的。如果回调中有游戏渲染之类需要在游戏线程中做的事情,请切换到游戏线程中处理。---
游戏首页打开逻辑示例:
private void mainPageShow() {
Account account = MachbirdKit.getInstance().getAccount();
if (account == null) {
//第一次登录或者账号数据被清空时:
MachbirdKit.getInstance().startGuestLogin(this,new CGAccountCallBack() {
@Override
public void onSuccess(int actionType) {
//do something when suc
}
@Override
public void onFailed(int actionType, int errorCode, String msg) {
//do something when failed
}
});
} else {
//有账号数据时:
MachbirdKit.getInstance().autoLogin(new CGAccountCallBack() {
@Override
public void onSuccess(int actionType) {
//do something when suc
}
@Override
public void onFailed(int actionType, int errorCode, String msg) {
//do something when failed
}
});
}
}
其他接口调用示例:
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.mach_login_status:
boolean isLogin = MachbirdKit.getInstance().isLogin();
break;
case R.id.mach_login_account:
Account info = MachbirdKit.getInstance().getAccount());
break;
case R.id.mach_login:
MachbirdKit.getInstance().startLoginPage(this, new CGAccountCallBack() {
@Override
public void onSuccess(int actionType) {
Toast.makeText(MainActivity.this,"登录成功",Toast.LENGTH_SHORT);
}
@Override
public void onFailed(int actionType, int errorCode, String msg) {
Toast.makeText(MainActivity.this,"登录失败",Toast.LENGTH_SHORT);
}
});
break;
case R.id.mach_logout:
MachbirdKit.getInstance().logout(MainActivity.this, new CGAccountCallBack() {
@Override
public void onSuccess(int actionType) {
//登出成功
}
@Override
public void onFailed(int actionType, int errorCode, String msg) {
//登出失败
}
});
break;
}
//CGAccountCallBack为回调接口,处理登录和登出失败的情况
3、MachbirdKit.getInstance().isLogin() 返回值为 boolean 值:true 为登录状态 false 为未登录状态
4、MachbirdKit.getInstance().getAccount() 返回值为 org.n.account.core.model.Account 实例对象,null 表示没有账号信息 拿到的账号信息里面有登录状态和类型信息: Account account = MachbirdKit.getInstance().getAccount(); if(account!=null) { if(account.mLoginType == Constant.LoginType.FACEBOOK) { //facebook登录状态 } else if(account.mLoginType == Constant.LoginType.GOOGLE) { //谷歌登录状态 } else if(account.mLoginType == Constant.LoginType.EMAIL) { //邮箱登录状态 } else if(account.mLoginType == Constant.LoginType.GUEST) { //游客登录状态 } } else { //未登录状态 }
5、MachbirdKit.getInstance().logout(final Activity activity, CGAccountCallBack callback) 参数为 Activity 和 CGAccountCallBack 接口实现
6、MachbirdKit.getInstance().startLoginPage(Activity activity, CGAccountCallBack callback) 参数为 Activity 和 CGAccountCallBack 接口实现
7、CGAccountCallBack 接口如下所示:
/**
* 对外回调接口
*/
public interface CGAccountCallBack {
//成功回调处理:loginType为登录类型
void onSuccess(int actionType);
//错误回调:loginType为登录类型,errorCode为错误码,msg为错误信息
void onFailed(int actionType, int errorCode, String msg);
}
参数actionType类型有以下几种:
Constant.LoginType.GUEST //游客登录
Constant.LoginType.FACEBOOK //facebook的登录
Constant.LoginType.GOOGLE //谷歌登录
Constant.LoginType.EMAIL //邮箱登录
MachbirdKit.LOGIN_TYPE_REGISTER; //注册
MachbirdKit.LOGIN_TYPE_LOGIN_OUT; //登出
MachbirdKit.AUTO_LOGIN_IN_TYPE; //自动登录
8、CGAccountBindInfoCallBack接口及获取账号绑定信息示例
/**
* 对外回调绑定信息接口
*/
public interface CGAccountBindInfoCallBack {
//成功回调处理
void onSuccess(Map<String, BindInfo> bindInfoMap);
//错误回调:errorCode为错误码,msg为错误信息
void onFailed(int errorCode, String msg);
}
//账号登录回调
final CGAccountCallBack callBack = new CGAccountCallBack() {
@Override
public void onSuccess(int loginType) {
}
@Override
public void onFailed(int loginType, int errorCode, String msg) {
}
};
//账号信息回调
CGAccountBindInfoCallBack BindInfoCallBack = new CGAccountBindInfoCallBack() {
@Override
public void onSuccess(Map<String, BindInfo> bindInfoMap) {
if(bindInfoMap!=null) {
if(bindInfoMap.size()==1 && bindInfoMap.get(Integer.toString(Constant.LoginType.GUEST)) != null) {
//单独游客,切换账号有损失账号的风险
//给与提示和后续操作
//popup toast or dialog
} else {
MachbirdKit.getInstance().startEasyLoginPage(MainActivity.this,callBack);//callback 为CGAccountCallBack
}
} else {
//popup toast or dialog
}
}
@Override
public void onFailed(int errorCode, String msg) {
//popup toast or dialog
}
};
MachbirdKit.getInstance().getAccountBindInfo(MainActivity.this,BindInfoCallBack);
# 打点接口
# 必调接口
/**
* 记录游戏进入主界面
*/
MachBirdSDK.logMainPageShow()
# 游戏关卡
/**
* 记录游戏关卡开始
*
* @param questIndex 关卡的索引号、大章节的编号。
* @param questId 小章节的编号。
* @param questType 当前的关卡的类型;例如主线任务[main]、新手任务[new]、支线任务[sub]
* @param roleId 角色Id。
* @param serverId 服务器Id。
* @param accountId 账户Id。
*/
MachBirdSDK.logQuestBegin(int questIndex, String questId, String questType,
String roleId, String serverId, String accountId)
/**
* 记录游戏关卡完成
*
* @param questIndex 关卡的索引号、大章节的编号。
* @param questId 小章节的编号。
* @param questType 当前的关卡的类型;例如主线任务[main]、新手任务[new]、支线任务[sub]。
* @param roleId 角色Id。
* @param serverId 服务器Id。
* @param accountId 账户Id。
*/
MachBirdSDK.logQuestCompleted(int questIndex, String questId, String questType,
String roleId, String serverId, String accountId)
/**
* 记录游戏关卡失败
*
* @param questIndex 关卡的索引号、大章节的编号。
* @param questId 小章节的编号。
* @param questType 当前的关卡的类型;例如新手任务[new]、主线任务[main]、支线任务[sub]。。
* @param roleId 角色Id。
* @param serverId 服务器Id。
* @param accountId 账户Id。
*/
MachBirdSDK.logQuestFailed(int questIndex, String questId, String questType,
String roleId, String serverId, String accountId)
# 游戏角色
/**
* 记录游戏角色升级
*
* @param roleId 角色Id。
* @param serverId 服务器Id。
* @param accountId 账户Id。
*/
MachBirdSDK.logRoleUpgrade(String roleId, String serverId, String accountId)
# 游戏奖励
/**
* 记录游戏奖励领取
*
* @param rewardName 奖励名称。
* @param roleId 角色Id。
* @param serverId 服务器Id。
* @param accountId 账户Id。
*/
MachBirdSDK.logRewardAcquire(String rewardName, String roleId, String serverId, String accountId)
# 游戏任务
/**
* 记录游戏任务开始
*
* @param taskName 任务名称。
* @param taskType 任务类型。
* @param roleId 角色Id。
* @param serverId 服务器Id。
* @param accountId 账户Id。
*/
MachBirdSDK.logTaskBegin(String taskName, String taskType, String roleId, String serverId, String accountId)
/**
* 记录游戏任务完成
*
* @param taskName 任务名称。
* @param taskType 任务类型。
* @param roleId 角色Id。
* @param serverId 服务器Id。
* @param accountId 账户Id。
*/
MachBirdSDK.logTaskCompleted(String taskName, String taskType, String roleId, String serverId, String accountId)
/**
* 记录游戏任务失败
*
* @param taskName 任务名称。
* @param taskType 任务类型。
* @param roleId 角色Id。
* @param serverId 服务器Id。
* @param accountId 账户Id。
*/
MachBirdSDK.logTaskFailed(String taskName, String taskType, String roleId, String serverId, String accountId)
# 游戏卡牌
/**
* 记录游戏卡牌获取
*
* @param cardName 卡牌名称。
* @param cardType 卡牌类型。
* @param cardLevel 卡牌等级。
* @param roleId 角色Id。
* @param serverId 服务器Id。
* @param accountId 账户Id。
*/
MachBirdSDK.logCardAcquire(String cardName, String cardType, String cardLevel, String roleId, String serverId, String accountId)
/**
* 记录游戏卡牌使用
*
* @param cardName 卡牌名称。
* @param cardType 卡牌类型。
* @param cardLevel 卡牌等级。
* @param roleId 角色Id。
* @param serverId 服务器Id。
* @param accountId 账户Id。
*/
MachBirdSDK.logCardWield(String cardName, String cardType, String cardLevel, String roleId, String serverId, String accountId)
/**
* 记录游戏卡牌卸下
*
* @param cardName 卡牌名称。
* @param cardType 卡牌类型。
* @param cardLevel 卡牌等级。
* @param roleId 角色Id。
* @param serverId 服务器Id。
* @param accountId 账户Id。
*/
MachBirdSDK.logCardUnwield(String cardName, String cardType, String cardLevel, String roleId, String serverId, String accountId)
/**
* 记录游戏卡牌升级
*
* @param cardName 卡牌名称。
* @param cardType 卡牌类型。
* @param cardLevel 卡牌等级。
* @param roleId 角色Id。
* @param serverId 服务器Id。
* @param accountId 账户Id。
*/
MachBirdSDK.logCardUpgrade(String cardName, String cardType, String cardLevel, String roleId, String serverId, String accountId)
# 游戏装备
/**
* 记录游戏装备获取
*
* @param equipName 装备名称。
* @param roleId 角色Id。
* @param serverId 服务器Id。
* @param accountId 账户Id。
*/
MachBirdSDK.logEquipAcquire(String equipName, String roleId, String serverId, String accountId)
/**
* 记录游戏装备使用
*
* @param equipName 装备名称。
* @param roleId 角色Id。
* @param serverId 服务器Id。
* @param accountId 账户Id。
*/
MachBirdSDK.logEquipWield(String equipName, String roleId, String serverId, String accountId)
/**
* 记录游戏装备卸下
*
* @param equipName 装备名称。
* @param roleId 角色Id。
* @param serverId 服务器Id。
* @param accountId 账户Id。
*/
MachBirdSDK.logEquipUnwield(String equipName, String roleId, String serverId, String accountId)
/**
* 记录游戏装备升级
*
* @param equipName 装备名称。
* @param roleId 角色Id。
* @param serverId 服务器Id。
* @param accountId 账户Id。
*/
MachBirdSDK.logEquipUpgrade(String equipName, String roleId, String serverId, String accountId)
# 游戏核心业务
/**
* 记录核心控件的点击,通常由用户操作触发,比如某些核心道具按钮
*
* @param name 核心控件的名称。
* @param roleId 角色Id。
* @param serverId 服务器Id。
* @param accountId 账户Id。
*/
MachBirdSDK.logCoreClick(String name, String roleId, String serverId, String accountId)
# 游戏虚拟交易
/**
* 记录游戏购买
*
* @param itemName 游戏内购买的虚拟物品的名称。
*/
MachBirdSDK.logBuy(String itemName)
/**
* 记录游戏购买
*
* @param itemName 游戏内购买的虚拟物品的名称。
* @param roleId 角色Id。
* @param serverId 服务器Id。
* @param accountId 账户Id。
*/
MachBirdSDK.logBuy(String itemName, String roleId, String serverId, String accountId)
/**
* 记录游戏出售
*
* @param itemName 游戏内出售的虚拟物品的名称。
*/
MachBirdSDK.logSell(String itemName)
/**
* 记录游戏出售
*
* @param itemName 游戏内出售的虚拟物品的名称。
* @param roleId 角色Id。
* @param serverId 服务器Id。
* @param accountId 账户Id。
*/
MachBirdSDK.logSell(String itemName, String roleId, String serverId, String accountId)
# 游戏内购
/**
* 记录游戏订阅
*
* @param subscriptionId 订阅的流水号。
* @param paymentType 支付类型;例如支付宝、银联、微信等,若为系统赠送,则传free。
* @param currencyType 货币类型;例如CNY人民币,USD美金等。
* @param realCoinNum 支付的真实货币的金额。
* @param roleId 角色Id。
* @param serverId 服务器Id。
* @param accountId 账户Id。
*/
MachBirdSDK.logSubscribe(String subscriptionId, String paymentType, String currencyType, double realCoinNum, String roleId, String serverId, String accountId)
# 游戏账号
/**
* 记录账户登录
*
* @param accountId 账户id,唯一标识一个账户。
* @param accountLevel 账户等级。
* @param serverId 服务器id。
* @param roleId 角色id。
*/
MachBirdSDK.logLogin(String accountId, String accountLevel, String serverId, String roleId)
# Adjust 打点
/**
* adjust打点
* @param eventToken 事件token
*/
MachBirdSDK.logByAdjust(String eventToken)
/**
* adjust打点
*
* @param eventToken 事件token
* @param callbackParameterKey 回调参数key
* @param callbackParameterValue 回调参数value
*/
MachBirdSDK.logByAdjust(String eventToken, String callbackParameterKey, String callbackParameterValue)
/**
* adjust打点
* @param eventToken 事件token
* @param revenue 收入
* @param currency 货币
*/
MachBirdSDK.logByAdjust(String eventToken, double revenue, String currency)
/**
* adjust打点
*
* @param eventToken 事件token
* @param revenue 收入
* @param currency 货币
* @param callbackParameterKey 回调参数key
* @param callbackParameterValue 回调参数value
*/
MachBirdSDK.logByAdjust(String eventToken, double revenue, String currency, String callbackParameterKey, String callbackParameterValue)
# 支付接口
# 初始化
必须调用初始化方法后才能使用后续功能 调用初始化时机尽量提前,参照其他 SDK 调用位置
import org.trade.billing.VegalSDK
import org.trade.billing.error.BillingError;
/**
* 初始化SDK
* @param context
* @param appKey APUS IAP 后台配置的AppKey
* @param privateKey APUS IAP 后台配置的产品私钥
* @param serverUrl APUS IAP 服务地址
*/
private void initBilling(Context context, String appKey,
String privateKey, String serverUrl) {
// IAP SDK单例对象,后续发起IAP操作均使用此对象
VegalSDK bp = VegalSDK.getInstance(context);
//设置初始化回调
bp.setInitListener(new VegalSDK.InitListener() {
/**
* 初始化成功回调
*/
@Override
public void onInitialized() {
}
/**
* 初始化失败回调
* @param error 错误信息
*/
@Override
public void onInitializeFail(BillingError error) {
}
/**
* 距离程序上次启动 未通过验证或未消费的商品 本次成功消费的回调
* @param transactionDetails 已成功消费的商品
*/
@Override
public void onConsumed(TransactionDetails transactionDetails) {
}
});
//初始化SDK
bp.init(appKey, privateKey, serverUrl);
}
# 获取商品
获取一次性商品接口
import org.trade.billing.error.BillingError;
import org.trade.billing.VegalSDK;
import org.trade.billing.model.Product;
import org.trade.billing.callback.SkuDetailCallback;
/**
* 获取一次性商品
* @param context
*/
private void getPurchaseListingDetails(Context context){
VegalSDK bp = VegalSDK.getInstance(context);
//获取一次性商品
bp.getPurchaseListingDetails(filter, new SkuDetailCallback() {
/**
* 成功回调
* @param productList 商品列表 包含Google 官方 及 APUS 后台配置信息
*/
@Override
public void onSuccess(List<Product> productList) {
}
/**
* 失败回调
* @param error 错误信息
*/
@Override
public void onFail(BillingError error) {
}
});
}
# 从缓存中获取商品
由于获取商品需要经过网络请求,请通过缓存获取商品列表进行购买。
此列表从SDK初始化后拉取了商品列表并进行了缓存
//从缓存获取商品列表
List<Product> purchaseList = ProductCacheManager.getInstance().getPurchaseList();
//从缓存获取订阅列表
List<Product> subscriptionList = ProductCacheManager.getInstance().getSubscriptionList();
# 发起应用内购买
/**
* 发起购买
* @param activity
* @param product 通过 {{@link VegalSDK#getPurchaseListingDetails(SkuDetailCallback)}} 获取
* @param purchaseUiData 界面打点数据
* @param payload 设置Payload 你想传给服务端的任意内容
* @param userNumber 设置UserNumber 取 org.n.account.core.model.Account.mSupaNo
*/
private void purchaseProduct(Activity activity,Product product,
PurchaseUiData purchaseUiData,
String payload, String userNumber) {
// 设置Payload
PurchasePayload.setPayload(payload);
// 设置UserNumber
PurchasePayload.setUserNo(userNumber);
VegalSDK bp = VegalSDK.getInstance(activity);
//发起购买
bp.purchase(activity, product, purchaseUiData, new PurchaseCallback() {
/**
* 成功回调
* @param productId 商品id
* @param details 内购事务
*/
@Override
public void onSuccess(@NonNull String productId, @Nullable TransactionDetails details) {
}
/**
* 失败回调
* @param error 错误信息
*/
@Override
public void onFail(BillingError error) {
}
});
}
# 可选 Google弹窗回调
VegalSDK.getInstance(context).setPurchaseLaunchListener(new VegalSDK.OnPurchaseLaunchListener() {
@Override
public void onLaunch() {
//即将调起GooglePlay支付页面
Log.d(TAG, "#onLaunch");
}
});
# 四. 附录
# 4.1.错误码
# 4.1.1. 客户端错误码
| 错误码 | 错误描述 |
|---|---|
| -1 | 购买商品返回数据为空 |
| -2 | 发起购买参数异常 |
| -3 | 恢复购买查询数据为空 |
| -4 | Google Play IAP服务未初始化 |
| -5 | 确认购买失败 |
| -6 | 获取服务端商品列表为空 |
# 4.1.2. 服务端错误码
| 错误码 | 错误描述 |
|---|---|
| 1 | 成功 |
| 0 | 失败 |
| 1000 | 系统异常 |
| 1101 | 系统异常 |
| 3102 | 参数错误 |
| 5001 | 请求appstore异常 |
| 5002 | 重复的订单 |
| 5003 | 写入数据库错误 |
| 5004 | 没有对应商品的价格信息,即productList中缺少商品信息 |
| 5004 | 没有对应产品的商品配置,即没在apollo中配置对应的产品的商品信息 |
| 5005 | 没有对应的商品配置,即在apollo配置中缺少对应的商品信息 |
| 5006 | 商品的配置信息不匹配,即在Apollo中配置商品为非连续订阅类型,在appstore配置的是连续订阅类型 |
| 5007 | 商品的配置没有持续时间,即在Apollo配置中针对非自动订阅类型的产品 |
# 4.1.3. Google错误码
# 4.1.4. 客户登录相关错误码
| 错误码 | 错误描述 |
|---|---|
| 101 | 未知错误 |
| 20002 | 验证码错误(邮箱注册支持验证码方式时) |
| 20005 | 用户未验证 |
| 40001 | 邮箱账号未注册 |
| 40004 | 用户已存在 |
| 40005 | Cookie校验失败 |
| 40012 | 没有权限 |
| 40014 | 用户已在黑名单 |
| 40016 | 重复绑定 |
| 40017 | 账号已绑定 |
| 40018 | 解绑了未绑定的账号类型 |
| 40019 | 当前账号只有唯一绑定账号,无法解绑 |
| 40020 | 账号或密码错误 |
| 40022 | 操作太频繁 |
| 40023 | 用户已注销 |
| 40024 | Session未被验证 |
| 40025 | 60秒以后再请求验证码 |
| 40602 | 获取第三方账号错误 |
| 40603 | 获取第三方账号错误 |
# 4.2. 相关链接
https://developer.android.com/google/play/billing/billing_library_overview
[https://developer.android.com/reference/com/android/billingclient/classes
# 4.3.SDK Reference
# Product
public class Product
com.apus.billing.model.Product
获取商品列表返回数据
# Summary
| Constants | |
|---|---|
String | productId商品id |
String | intro个性文案:商品描述 |
String | ERRORFatal error during the API action |
String | name个性文案:商品名字 |
ProductType | productType商品类型 |
ContentDisplayType | showStrategy文案显示类型 |
int | verifyType支付校验方式,0:服务端校验; 1:本地校验;默认值0,缺省值0 |
long | subsDuration订阅的持续时长 |
SkuDetails | skuDetails官方商品信息 |
ProductData | productDataAPUS IAP后台配置商品信息 |
# ProductType
public enum ProductType
com.apus.billing.enmus.ProductType
获取商品列表返回数据
# Summary
| Constants | |
|---|---|
int | Consumable可消耗 |
int | Permanent永久商品 |
int | Subscription订阅型 |
int | ContinuousSubscription连续订阅型 |
# ContentDisplayType
public enum ContentDisplayType
com.apus.billing.enmus.ContentDisplayType
显示文案类型
# Summary
| Constants | |
|---|---|
int | OFFICIAL显示官方文案 |
int | PERSONALITY显示个性文案 |
# ProductData
public class ProductData
com.apus.billing.protocol.product.ProductData
APUS IAP产品信息
# Summary
| Constants | |
|---|---|
String | productId产品id |
String | intro个性文案:商品描述 |
String | name个性文案:商品名字 |
ProductType | productType商品类型 |
ContentDisplayType | showStrategy文案显示类型 |
int | verifyType支付校验方式,0:服务端校验; 1:本地校验;默认值0,缺省值0 |
long | subsDuration订阅的持续时长 |
# TransactionDetails
public class TransactionDetails
com.apus.billing.model.TransactionDetails
内购事务
# Summary
| Constants | |
|---|---|
String | productId产品id |
String | orderId订单id |
String | purchaseToken内购token |
Date | purchaseTime购买时间 |
PurchaseInfo | purchaseInfoAPUS IAP产品信息 |
# PurchaseInfo
public class PurchaseInfo
com.apus.billing.model.PurchaseInfo
APUS IAP产品信息
# Summary
| Constants | |
|---|---|
Purchase | purchaseGoogle IAP 购买成功后返回的内购信息对象 |
String | signature签名 |
PurchaseData | purchaseData内购信息详细数据 |
String | responseData内购信息详细数据json格式数据 |
ProductData | productDataAPUS IAP产品信息 |
String | productJsonDataAPUS IAP产品信息Json格式数据 |
# PurchaseData
public class PurchaseData
com.apus.billing.protocol.product.ProductData
Google IA内购信息详细数据
# Summary
| Constants | |
|---|---|
String | orderIdGoogle IAP 购买成功后返回的内购信息对象 |
String | packageName包名 |
String | productId商品id |
Data | purchaseTime内购时间 |
PurchaseState | purchaseState内购状态 |
String | developerPayloadpayload信息 |
String | purchaseToken内购token |
boolean | autoRenewing是否自动续订 |
boolean | acknowledged是否被确认购买 |
# PurchaseState
public enum PurchaseState
com.apus.billing.enmus.PurchaseState
内购状态
# Summary
| Constants | |
|---|---|
int | PENDING待处理交易 |
int | PURCHASED已购买状态 |
int | UNSPECIFIED_STATE未定义状态 |
# PurchaseUiData
public class PurchaseUiData
org.trade.billing.model.PurchaseUiData
界面打点数据
# Summary
| Constants | |
|---|---|
String | orderType点击的付费页分类 |
String | payStyle展示的样式(样式名,Default/Style_A/Style_B...) |
String | windowType展示的窗口类型(popup/fullscreen/window) |
String | fromSource用来定义IAP 路径的唯一ID,“功能名_入口名” |
String | contentId用来标识模版ID的字段(多用在内容产品的模版付费上,) |
iOS →