# 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 | 参数格式有误或者未按规则上传 | 按要求填写参数,请确认参数问题 |