# 5、H5方式接入

因为H5与原生有交互,所以需要原生实现部分方法

# 5.1 Android需要做

开发者APP需提供个入口位置,当用户点击后直接跳转到H5链接即可(注意:token过期时间2天)

开发者APP需要支持H5触发APP进行APK文件的下载或打开用户默认浏览器并跳转到指定链接  需支持以下方法

# 1.APP是否已安装

​ ibx_CheckInstall(包名)

​ 客户端回调 appInstalled(1 or 0) 1为已安装 0为未安装

# 2.安装包下载【必须】

​ ibx_InstallAPP(下载地址) 自行实现,下载安装

​ 下载过程中,将下载进度返回给 H5

​ 客户端回调 setProgress(包名,进度),进度为 -1代表下载失败 进度在 (1至100)代表下载进度

# 3.浏览器打开链接【必须】

​ ibx_Browser(链接)

# 4.打开APP

​ ibx_OpenAPP(包名)

# 5.打开图片选择器

​ ibx_ImagePick()

​ 客户端回调 imagePicked(图片Base64数据),将图片数据返回给 H5

# 6.采集对应游戏的使用时长(适配安卓5.0及以上)

​ ibx_StartCollect(包名)

​ 在返回到接入方 APP 后,客户端回调 appRunTime (包名,使用时间(单位秒)),将app使用时间返回给 H5

# 7.检查权限

​ ibx_CheckPermission(权限名称)

​ 客户端回调 permissionState(1 or 0) 1为已授权 0为未授权

# 8.打开微信小程序

​ ibx_OpenWXMiniProgram(微信appId, 要跳转页面路径)

# 9.路由跳转

​ ibx_push(链接,类型) 链接是目标地址,类型 1代表接入方处理顶部标题,0代表H5处理顶部标题

# 10.页面关闭

​ ibx_close()

# 示例代码

String appkey       = "xxx";			// 平台的应用 appkey
String targetId     = "xxx";			// 接入平台的用户唯一标志 最长18位,纯数字
String secret       = "xxx"; 			// 平台的应用 secret
String notifyUrl    = "https://xxx"; 	//异步接收领取奖励结果通知的回调地址,通知url必须为外网可访问的url,不能携带参数。
String deviceInfo   = "imeiOrOAID" ;	//Android10以下使用 imei; Android10及以上使用OAID

IBXSdk.getInstance().init(getApplication(), appkey, targetId, deviceInfo, secret, notifyUrl);
IBXSdk.getInstance().post(new IBXListener() {
    @Override
    public void success(String url) {
       // 主页链接地址,使用 WebView 自行加载(主线程)
    }

    @Override
    public void failed(Object errorMsg) {

    }
  });

WebSettings settings = webView.getSettings();
settings.setJavaScriptEnabled(true);

webView.addJavascriptInterface(你自己的JavaScript, "aibianxian");

@JavascriptInterface
public void ibx_CheckInstall(final String packName){
    this.packageName = packName;
    boolean isInstalled = IBXAppUtils.isApkInstalled(mContext.get(), packName);
	webView.post(new Runnable(){
        public void run() {
            if (webView != null) {
                webView.loadUrl("javascript:appInstalled(" + (isInstalled ? "1)" : "0)"));
            }
        }
    })
}

@JavascriptInterface
public void ibx_InstallAPP(String url){
	//自行实现下载安装
    //下载失败、下载进度如果需要就返回给H5
    webView.post(new Runnable(){
        public void run() {
            if (webView != null) {
                webView.loadUrl("javascript:setProgress('" + packageName + "'," + progress + ")");
            }
        }
    })
}

@JavascriptInterface
public void ibx_Browser(String url){
    //自行实现,打开浏览器
}

@JavascriptInterface
public void ibx_OpenAPP(String packageName){
    //自行实现,打开APP
}

@JavascriptInterface
public void ibx_ImagePick(){
    //自行实现,打开相册
    //拿到图片后,转为 base64 ,返回给 H5
    webView.post(new Runnable(){
        public void run() {
            if (webView != null) {
                // base64数据需以字符串  "data:image/png;base64," 开头
                webView.loadUrl("javascript:imagePicked('" + bmBase64 + "')");
            }
        }
    })
}

@JavascriptInterface
public void ibx_StartCollect(String packageName) {
    //自行实现,实现采集对应APP的使用时间
}

@JavascriptInterface
public void ibx_CheckPermission(final String permission) {
    //自行实现,检查某项权限
    webView.post(new Runnable(){
        public void run() {
            if (webView != null) {
                int permissionState = 1;//有权限
                int permissionState = 0;//没权限
                webView.loadUrl("javascript:permissionState('" + permissionState + "')");
            }
        }
    })
}

@JavascriptInterface
public void ibx_OpenWXMiniProgram(final String appId, final String path) {
    //自行实现,打开微信小程序
}

@JavascriptInterface
public void ibx_push(final String url, int type) {
    //自行实现,路由跳转
}

@JavascriptInterface
public void ibx_close () {
	//自行实现,页面关闭
}

# 5.2 IOS需要做

开发者APP需提供个入口位置,当用户点击后直接跳转到H5链接即可,如需隐藏首页返回键,在链接后拼接"&is_tab=1"

开发者APP需要支持H5触发APP打开用户默认浏览器(safari)并跳转到指定链接

备注:方法功能描述:在safari浏览器中打开 “下载链接”。

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];
         }
  }
  
}

# 5.3 H5接入认证接口

# 请求链接

​ url地址:https://api.aibianxian.net/igame/h5/v1.0/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 int(10) 13457 接入平台的用户唯一标示(接入平台的用户id)

# 返回结果

字段名 变量名 必填 类型 示例值 描述
返回状态码 code String(16) 200 200/300 此字段是通信标识,非交易标识
返回信息 message String(128) 请求成功 当code不为200时返回信息为错误原因 ,例如 签名失败 参数格式校验错误
返回数据 data String(256) http://www.xxxx.com?token=eyJ0eXAiOiJKV1QiLC (注意:token过期时间2天) 当code为200时返回的信息,为将要跳转的地址,token过期时间2天

# 错误码

名称 原因 解决方案
301 参数格式有误或者未按规则上传 按要求填写参数,请确认参数问题

# 5.4 领取结果通知

详见CPL领奖回调