# 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活动发奖