HfaxSDK集成说明
概述
HfaxSDK采用了快速集的方式,让用户集成更简便、更高效,极大提升了平台的对接效率,由于采用原生与JS桥接的方式,可以有效提升用户体验并且减少了依赖包的体积,并且HfaxSDK提供相应的API接口支持第三方使用平台与后台数据交互。
使用eclipse集成请访问:https://github.com/lsyz0021/hfaxsdk-eclipse
下载地址
Eclipse 下载链接:https://eyun.baidu.com/s/3i5A4vIl 密码:hfaxsdk
AndroidStudio 下载链接:https://eyun.baidu.com/s/3pLsbrSn 密码:hfaxsdk
AndroidStudio Gradle依赖:
compile 'com.hfax.hfaxsdk:hfaxsdk:20170629'
文档目录(点击快速导航)
HFaxSDK所需申请权限
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.CALL_PHONE"/>
<uses-permission android:name="android.permission.SEND_SMS"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE">
1 . AndroidStudio集成
1.1 集成方式 一
在build.gradle中添加依赖即可(推荐)
compile 'com.hfax.hfaxsdk:hfaxsdk:20170629'
1.2 集成方式 二
可以使用下面的方式集成,下载依赖包后,复制到module的libs目录内
1.2.1 下载HfaxSDK
AndroidStudio 下载链接:https://eyun.baidu.com/s/3pLsbrSn 密码:hfaxsdk
1.2.2 修改app/build.gradle 配置文件引入aar
1.2.3 添加libs目录指向
repositories {
flatDir {
dirs 'libs'
}
dependencies {
compile(name: hfaxsdk_v20170629', ext:'aar')
}
1.2.4 在manifest文件里中配置HfaxActivity
记得在manifest节点下添加 xmlns:tools=”http://schemas.android.com/tools”
<manifest
xmlns:tools="http://schemas.android.com/tools">
……
<activity
android:name="com.hfax.hfaxsdk.view.HfaxActivity"
android:exported="false"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Light.NoTitleBar"
android:windowSoftInputMode="stateAlwaysHidden|adjustResize"
tools:replace="exported"/>
</manifest>
2 . Eclipse集成
2.1 下载eclipse集成的library
Eclipse github版:https://github.com/lsyz0021/hfaxsdk-eclipse
Eclipse 下载链接:https://eyun.baidu.com/s/3i5A4vIl 密码:hfaxsdk
2.2 下载完成后导入到项目中,然后依赖到项目中
2.3 在manifest文件里中配置HfaxActivity
记得在manifest节点下添加 xmlns:tools=”http://schemas.android.com/tools”
<manifest
xmlns:tools="http://schemas.android.com/tools">
……
<activity
android:name="com.hfax.hfaxsdk.view.HfaxActivity"
android:exported="false"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Light.NoTitleBar"
android:windowSoftInputMode="stateAlwaysHidden|adjustResize"
tools:replace="exported"/>
</manifest>
3 . 微信分享
Hfaxsdk含有微信分享功能,但是没有将微信分享的依赖库打包到Hfaxsdk中,所以如果要使用微信分享功能,请将demo里提供的libammsdk.jar复制的项目的libs目录下,若项目中存在微信分享jar包,强烈建议使用我们提供微信分享jar包。
3.1 配置WXAPPID
在清单文件中增加如下配置
<meta-data
android:name="WXAPPID"
android:value="wxe************"/>
检查“WXEntryActivity”中是否配置获取的“WXAPPID”方法,否则会分享失败
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
try {
// 在清单文件里配置 WXAPPID,然后再通过下面的方式获取
ApplicationInfo info = this.getPackageManager().getApplicationInfo(
getPackageName(), PackageManager.GET_META_DATA);
String ID = info.metaData.getString("WXAPPID");
IWXAPI wxApi = WXAPIFactory.createWXAPI(this, ID, true);
wxApi.handleIntent(getIntent(), this);
} catch (Exception e) {
e.printStackTrace();
}
}
3.2 导入微信分享的jar包到libs目录
3.3 新建WXEntryActivity
在你的包名相应目录下新建一个wxapi包,并在该wxapi目录下新建一个WXEntryActivity(已存在就不用新建了),该类继承自Activity(例如应用程序的包名为com.hfax.hfaxsdkdemo,则新添加的类如下图所示)
3.4 实现IWXAPIEventHandler接口
实现IWXAPIEventHandler接口,微信发送的请求将回调到onReq方法,发送到微信请求的响应结果将回调到onResp方法
3.5 接收回调数据
在WXEntryActivity中将接收到的intent及实现了IWXAPIEventHandler接口的对象传递给IWXAPI接口的handleIntent方法,示例如下图:
当微信发送请求到你的应用,将通过IWXAPIEventHandler接口的onReq方法进行回调,类似的,应用请求微信的响应结果将通过onResp回调。
上面的详细配置可以参考demo
4 . 混淆配置
如果你的项目中开启了混淆,请在proguard-project.txt中添加下面的混淆规则
-keepclassmembers class fqcn.of.javascript.interface.for.webview {
public *;
}
-keep public class com.hfax.hfaxsdk.tools.**{ *;}
-keep public class com.hfax.hfaxsdk.view.**{ *;}
-keep public class com.hfax.hfaxsdk.jsbridge.** { *;}
# HfaxSDK含有微信分享功能,所以要配置微信混淆
-keep class com.tencent.mm.opensdk.** { *;}
-keep class com.tencent.wxop.** { *;}
-keep class com.tencent.mm.sdk.** { *;}
# 如果使用eclipse开发项目,请再添加下面的依赖
-keep class org.apache.http.** { *; }
-dontwarn org.apache.http.**
-dontwarn android.net.**
5 . HfaxSDK接口调用
HfaxSDK总共含有三个入口,分别为钱包入口、理财入口、支付入口,下面分别对这个三个入口的使用进行说明(详细使用请参考提供的demo)
5.1 . 钱包入口
将要求的传入的数据放入到一个HashMap集合中,然后进行如下操作
// 创建含有数据的hashMap
HashMap<String, Object> wallatHashMap = getMapData(
userName, userId, userMobile, userAuthKey, WXAPI, channelKey,
HfaxConstant.HFAX_VersionCode, merchantId);
HfaxSerializableMap wallatTmpMap = new HfaxSerializableMap();
wallatTmpMap.setMap(wallatHashMap);
Bundle wallatBundle = new Bundle();
wallatBundle.putSerializable(HfaxConstant.HFAX_MAP, wallatTmpMap);
Intent wallatIntent = new Intent(MainActivity.this, HfaxActivity.class);
wallatIntent.putExtra(HfaxConstant.HFAX_STATE, HfaxConstant.HFAX_ENTRY_WALLET);
wallatIntent.putExtras(wallatBundle);
startActivity(wallatIntent);
5.2 . 理财入口
理财入口传入的参数和钱包入口传入的参数是一样的
// 创建含有数据的hashMap
HashMap<String, Object> listHashMap = getMapData(
userName, userId, userMobile, userAuthKey, WXAPI, channelKey,
HfaxConstant.HFAX_VersionCode, merchantId);
HfaxSerializableMap listTmpMap = new HfaxSerializableMap();
listTmpMap.setMap(listHashMap);
Bundle listBundle = new Bundle();
listBundle.putSerializable(HfaxConstant.HFAX_MAP, listTmpMap);
Intent listIntent = new Intent(MainActivity.this, HfaxActivity.class);
listIntent.putExtra(HfaxConstant.HFAX_STATE, HfaxConstant.HFAX_ENTRY_LIST);
listIntent.putExtras(listBundle);
startActivity(listIntent);
5.3 . 支付入口
如果调用支付口入,并且想获取支付结果的回调,请在进入支付入口时使用startActivityForResult( )开启HfaxActivity,然后在当前的activity中重写onActivityResult方法(详细请参考的demo)
// 创建含有数据的hashMap
HashMap<String, Object> hashMap = getMapData(
userName, userId, userMobile, userAuthKey, WXAPI, channelKey,
HfaxConstant.HFAX_VersionCode, merchantId, ordrNO, consumeAmount, consumeRemark,
consumeTime, syncCallbackUrl, asyncCallbackUrl, extraField);
HfaxSerializableMap tmpMap = new HfaxSerializableMap();
tmpMap.setMap(hashMap);
Bundle bundle = new Bundle();
bundle.putSerializable(HfaxConstant.HFAX_MAP, tmpMap);
Intent intent = new Intent(MainActivity.this, HfaxActivity.class);
intent.putExtra(HfaxConstant.HFAX_STATE, HfaxConstant.HFAX_ENTRY_PURCHASE);
intent.putExtras(bundle);
startActivityForResult(intent, HfaxConstant.HFAX_REQUESTCODE_PURCHASE);
获取回调必须重写onActivityResult方法
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == HfaxConstant.HFAX_REQUESTCODE_PURCHASE) {
// 这里获取的result是json字符串,数据格式为 {"orderId":"123465"}
String result = data == null ? null : data.getStringExtra(HfaxConstant.HFAX_PAYCALLBACKDATA);
String orderId = "";
try {
if (!TextUtils.isEmpty(result)) {
JSONObject jsonObject = new JSONObject(result);
if (jsonObject.has(HfaxConstant.HFAX_ORDER_ID_KEY)) {
orderId = jsonObject.getString(HfaxConstant.HFAX_ORDER_ID_KEY);
}
}
} catch (JSONException e) {
e.printStackTrace();
}
switch (resultCode) {
case HfaxConstant.HFAX_PAY_SUCCESS_RESULTCODE: // 支付成功
Log.i("hfaxsdk", "支付成功,订单号 :" + orderId);
break;
case HfaxConstant.HFAX_PAY_FAIL_RESULTCODE: // 支付失败
Log.i("hfaxsdk", "支付失败,订单号 :" + orderId);
break;
default: // 没进入支付结果页就退出了
Log.i("hfaxsdk", "未操作");
break;
}
}
}
6 . 接口字段使用说明
关键字段:(所有字段在HfaxConstant类中)
key | 说明 | 描述 |
---|---|---|
HFAX_STATE | 控制需要跳到到的hfax界面 | HFAX_ENTRY_WALLET 钱包界面 HFAX_ENTRY_LIST 产品列表界面 HFAX_ENTRY_PURCHASE 支付界面 |
HFAX_MAP | 需要传递的map,包括所有用户请求的参数信息等 | 必须使用HashMap<String, Object>
|
HFAX_EXIT_RESULT | 获取退出hfaxSDK回调状态 | 返回的是Boolean类型(默认为false) |
注:以下内容需要放在HfaxSerializableMap中进行序列化传递 | 注:以下内容需要放在HfaxSerializableMap中进行序列化传递 | |
HFAX_WXID | 设置微信分享APPID | 必填,否则微信无法分享 |
HFAX_MERCHANTID | 商户号id | 所有请求必填 |
HFAX_CHANNELKEY | 渠道key | 所有请求必填 |
HFAX_AUTHKEY | SDK用户authkey | 非必填 |
HFAX_USERNAME | 第三方平台用户名 | 非必填 |
HFAX_MOBILE | 用户手机号 | 所有请求必填 |
HFAX_ORDERNO | 订单号 | 消费时必填 |
HFAX_CONSUME_AMOUNT | 消费金额:1200.23 | 消费时必填 |
HFAX_CONSUME_REMARK | 消费备注 | 消费时必填 |
HFAX_CONSUME_TIME | 消费时间:2017-04-01 15:25:35
|
消费时必填 |
HFAX_SYNCCALLBACKURL | 消费结果前台回调地址 | 消费时必填 |
HFAX_ASYNCCALLBACKURL | 消费结果后台回调地址 | 消费时必填 |
HFAX_EXTRAFIELD | 消费回调扩展字段,否则消费前台后台回调会原样返回 | 非必填 |
HFAX_BASEURL | 修改sdk服务器环境 | 开发时添加,上线app时必须删除 |
7 . 修改测试环境
HFaxSDK默认的是指向生产环境服务器,但是对于刚要接入的用户,难免需要在测试环境测试sdk,所以为了方便用户测试,可以参考下面的方式动态修改测试环境。(注意:setData()这个方法有两个)