# 6、列表API+详情页H5
# 接入流程
因为H5与原生有交互,所以需要原生实现部分方法
# Android
1.导入SDK,请求列表接口展示, 点击游戏时调用 请求token接口,将获取到的token值放在gameDetailUrl后,例:gameDetailUrl?token=XXXX。
2.获取到详情页 XXX,需在指定生命周期,触发指定方法,以实现完整详情页功能,参考下方代码
3.加载详情页 url
webView.getSettings().setJavaScriptEnabled(true);
com.aiyingli.ibxmodule.MyJavascript jsApi = new com.aiyingli.ibxmodule.MyJavascript(webView,context);
webView.addJavascriptInterface(jsApi, "aibianxian");
webView.loadUrl(url)
@Override
protected void onResume() {
super.onResume();
jsApi.backAppUsageData(); // H5处理游戏玩的时间
}
@Override
protected void onDestroy() {
DownFileService.finishService(this); // 停止下载服务
super.onDestroy();
jsApi.onDestroy();//回收对象
jsApi = null;
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
webView.loadUrl("javascript:backPre()");//H5自己处理返回及结束界面
return true;
}
return super.onKeyDown(keyCode, event);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(myJavascript != null) {
jsApi.onActivityResult(requestCode,data);
}
}
# IOS
1.请求列表接口展示, 点击游戏时调用 请求token接口将获取到的token值放在gameDetailUrl后,例:gameDetailUrl?token=XXXX。
2.获取到详情页 XXX,需在指定生命周期,触发指定方法,以实现完整详情页功能,参考下方代码
3.加载详情页 url
# 描述
开发者APP需要支持H5触发APP打开用户默认浏览器(safari)并跳转到指定链接
备注:方法功能描述:在safari浏览器中打开 “下载链接”。
# 需要实现H5与ios原生交互的方法
1.监听H5方法,方法名为 ibx_openUrl
WKUserContentController *userContentController = [[WKUserContentController alloc] init];
[userContentController addScriptMessageHandler:self name:@"ibx_openUrl"];
WKWebViewConfiguration *configuration = [[WKWebViewConfiguration alloc] init];
configuration.userContentController = userContentController;
WKWebView *wkWebView = [[WKWebView alloc] initWithFrame:UIScreen.mainScreen.bounds configuration:configuration];
2.收到H5发出的消息时解析出Url,并自定义处理
// WKScriptMessageHandler
- (void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message{
if ( [message.name isEqualToString:@"ibx_openUrl"]){
// 解析出url
NSDictionary *body = message.body;
NSString *urlString = (NSString *)body[@"body"];
// 获取到url,并进行完全自定义的处理
// 例如直接通过Safari打开
NSURL *theUrl = [NSURL URLWithString:urlString];
if ([UIApplication.sharedApplication canOpenURL:theUrl]){
[UIApplication.sharedApplication openURL:theUrl];
}
}
}
请求列表接口展示, 点击游戏时调用 请求token接口讲获取到的token值放在gameDetailUrl后。
# 详情地址格式例:
https://api.aibianxian.net/igameh5/#/detail/97?token=djdjdjdkslkdlsldjajjk (注意:token过期时间2天)
# 游戏列表
# 请求链接
url地址:https://api.aibianxian.net/igame/api/v1.0/cplApi/listGameByTargetId
# 请求方式
get
# 请求参数
| 字段名 | 变量名 | 必填 | 类型 | 示例值 | 描述 |
|---|---|---|---|---|---|
| 页码 | pageNum | 是 | int | 1 | 第几页 |
| 展示数量 | pageSize | 否 | int | 10 | 每页展示数量 |
| 应用id | appKey | 是 | int | 142792789 | 媒体后台的应用appkey |
| 类型 | type | 否 | string | 捕鱼 | 目前只有:战斗,捕鱼,休闲,不传显示全部 |
| 渠道用户标示 | targetId | 是 | string | 43458 | 接入平台的用户唯一标示 |
# 返回结果
| 字段名 | 变量名 | 必填 | 类型 | 示例值 | 描述 |
|---|---|---|---|---|---|
| 返回状态码 | code | 是 | String(16) | 200 | 200/300 此字段是通信标识,非交易标识 |
| 返回信息 | message | 是 | String(128) | 请求成功 | 当code不为200时返回信息为错误原因 ,例如 签名失败 参数格式校验错误 |
| 返回数据 | data | 是 | String(256) | 当code为200时返回的信息,为将要跳转的地址 |
| 字段名 | 变量名 |
|---|---|
| 图标 | iconLink |
| 完成所有任务的奖励 | allPrice |
| 详情页地址 | gameDetailUrl |
| orderId | orderId |
| 游戏名 | name |
| 开始时间 | startTime |
| id | id |
| 结束时间 | endTime |
| 第几期 | version |
| 推荐描述 | recommend |
# 请求token
# 请求链接
url地址:https://api.aibianxian.net/igame/api/v1.0/cplApi/access
# 请求方式
post
# 请求参数
| 字段名 | 变量名 | 必填 | 类型 | 示例值 | 描述 |
|---|---|---|---|---|---|
| 应用id | app_key | 是 | String(32) | 142792745 | 平台的应用id |
| 设备 | device | 是 | String(32) | ios | ios,android |
| 设备号 | device_info | 是 | String(32) | 013467007045764 | 安卓传imei,ios传参idfa值 |
| 用户标识 | target_id | 是 | String(128) | 13457 | 接入平台的用户唯一标示(接入平台用户id) |
# 返回结果
| 字段名 | 变量名 | 必填 | 类型 | 示例值 | 描述 |
|---|---|---|---|---|---|
| 返回状态码 | code | 是 | String(16) | 200 | 200/300 此字段是通信标识,非交易标识 |
| 返回信息 | message | 是 | String(128) | 请求成功 | 当code不为200时返回信息为错误原因 ,例如 签名失败 参数格式校验错误 |
| 返回数据 | data | 是 | String(256) | dsa3odhshbey4clfmdj1537 | 当code为200时返回的信息,为将要跳转的地址,token过期时间2天 |
# 错误码
| 名称 | 原因 | 解决方案 |
|---|---|---|
| 301 | 参数格式有误或者未按规则上传 | 按要求填写参数,请确认参数问题 |
# 领取结果通知
# 请求方式:
# post
# 应用场景
用户领取完成后,平台会把相关领取结果及用户信息通过数据流的形式发送给媒体,媒体需要接收处理,并按文档规范返回应答。
# 特别提醒:
1.同样的通知可能会多次发送给媒体系统。媒体系统必须能够正确处理重复的通知。
2.媒体系统对于领取结果通知的内容一定要做签名验证,防止数据泄漏导致出现“假通知”,造成资金损失。
3.当收到通知进行处理时,首先检查对应业务数据的状态,判断该通知是否已经处理过,如果没有处理过再进行处理,如果处理过直接返回结果成功(返回值为 {"code":200})。在对业务数据进行状态检查和处理之前,要采用数据锁进行并发控制,以避免函数重入造成的数据混乱。
4.回调处理成功后返回值为 {"code":200}。无返回值或者非200,则认为回调出现异常,会再次进行回调。
# 接口链接
该链接需要自行在媒体后台进行配置(应用-->编辑-->CPL配置),如果链接无法访问,媒体将无法接收到平台通知。
通知url必须为直接可访问的url,不能携带参数。示例:notify_url:"https://pay.xxxxx.com/xxxxx/pay.action"
当接口调用失败后,平台会在5秒,10秒 ,30秒,1分,2分,3分,4分, 5分, 6分,7分,8分,9分,10分, 20分,30分,1小时,2小时分别请求回调接口一直到接口请求成功。
# 通知参数(formData)
| 字段名 | 变量名 | 必填 | 类型 | 示例值 | 描述 |
|---|---|---|---|---|---|
| 应用id | app_key | 是 | String(32) | 142792745 | 平台的应用id |
| 设备 | device | 是 | String(32) | ios | ios,安卓 |
| 设备号 | device_info | 是 | String(32) | 013467007045764 | 安卓传imei,ios传参idfa值 |
| 用户标识 | target_id | 是 | String(128) | 13457 | 接入平台的用户唯一标示 |
| 奖励单位 | unit | 是 | String(32) | 金币 | 接入平台的奖励单位 |
| 领取时间 | time_end | 是 | String(14) | 20141030133525 | 领取完成时间,格式为yyyyMMddHHmmss,如2009年12月25日9点10分10秒表示为20091225091010 |
| 应用方给予用户奖励 | user_reward | 是 | float(10, 2) | 100.00 | 应用方应当给予用户奖励(应用平台币计价) |
| 平台给予应用奖励 | app_reward | 是 | float(10, 2) | 200.00 | 平台给予应用奖励 |
| 游戏名字 | game_name | 否 | String(32) | 奇奇乐捕鱼 | 游戏名(活动时本字段为空) |
| 游戏编号 | game_id | 是 | int(32) | 324 | 领取奖励的游戏编号 |
| 签名 | sign | 是 | String(32) | C380BEC2BFD727A4B684 | 通过签名算法计算得出的签名值,通过签名算法计算得出的签名值,详见签名规则MD5(app_key+device+device_info+target_id+app_secret) .toUpperCase |
| 奖励说明 | content | 是 | String(64) | 累计红包0.9元 | 奖励说明 |
| 订单号 | order_id | 是 | int(32) | 23974895 | 订单号 |
| 游戏期号 | game_order_id | 是 | int(32) | 324 | 游戏期号 |
| 奖励类型 | type | 是 | int(32) | 1 | 1试玩赢金,2充值返利,3冲榜福利,4高额试玩,5活动发奖 |
← 5、H5方式接入 7、详情页API接口 →