Android SDK
集成
(android studio 集成环境,SDK版本2.2.5及以上版本)
1
、客户端SDK接入需要的准备工作
1)
入驻开普勒,创建应用。
2) 下载客户端SDK( 此步骤需要上传您的apk包,通过apk获取到包名,签名等信息,这些信息将生成安全图片)
安全图片:
「安全图片」是开普勒SDK安全机制的一部分,安全图片位于下载的SDK包中,为了是SDK正常工作,需要开发者确保正确的使用安全图片。需要注意以下几点:
· 安全图片的文件名为「safe.jpg」,**请勿修改**。
· 安全图片位于res/raw目录中,通过模块依赖的方式集成SDK
,支持移动到第三方应用的res/raw目录
。
· 安全图片与开发者编译构建APK所用的keystore对应,如果修改了keystore(比如从debug切换为正式的keystore),则需要替换成对应的安全图片。
2
、客户端SDK加入工程
针对不同的IDE有不同的添加方式。本接入文档以Android Studio为例,通过Import Module的方式接入开普勒sdk,如下图。
其中,sdk需要从开普勒官网下载、解压。引入kepler sdk到开发工程后,会在settings.gradle中自动添加include ':KeplerSDK2.2.5'
在apk打包主工程的build.gradle 中添加依赖,即添加dependencies子节点:compile project(':
KeplerSDK2.2.5
')
3
、配置
配置activity
<activity android:name="com.kepler.jd.login.AuthSuccessActivity"
android:exported="true"
android:screenOrientation="portrait" >
</activity>
<activity
android:name="com.kepler.jd.sdk.KeplerMidActivity"
android:screenOrientation="portrait" android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen" android:windowSoftInputMode="adjustPan|stateHidden"></activity>
<activity android:name="com.kepler.jd.sdk.WebViewActivity" android:screenOrientation="portrait" />
配置权限
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
配置混淆
-keep class com.kepler.**{*;}
-dontwarn com.kepler.**
4
、native功能
1
)SDK初始化
使用KeplerApiManager.asyncInitSdk方法来初始化SDK,建议将KeplerApiManager.asyncInitSdk方法的调用放在Application的onCreate中,
在应用启动时就初始化。(SDK中的所有方法都要在主线程中调用)
(
上传APK下载SDK ,
这里需要校验,您的证书(shh),还有包名(package name),签名与否,
请保证这些信息和上传APK一致,否则校验不能通过
)
KeplerApiManager.asyncInitSdk(Application.this, appKey, keySecret,
new AsyncInitListener() {
@Override
public void onSuccess() {
Log.e("kepler", "Kepler asyncInitSdk onSuccess ");
}
@Override
public void onFailure() {
Log.e("kepler",
"Kepler asyncInitSdk
授权失败,请检查
lib
工程资源引用;包名
,
签名证书是否和注册一致
");
}
});
2
)直接授权登录
final LoginListener mLoginListener = new LoginListener() {
@Override public void authSuccess() {
//
授权登录成功回调方法
}
@Override public void authFailed(int errorCode) {
//
授权登录失败回调方法
}
};
KeplerApiManager.getWebViewService().login(mContext,mLoginListener);
错误码
|
描述
|
解决方法
|
-3001;
|
//
初始化失败
|
检查安全图片
|
-3002;
|
//
初始化没有完成
|
检查安全图片,把初始化提前
|
-3003;
|
//
跳转url为null
|
检查url
|
3004;
|
//
打开授权页面失败forJD
|
|
-1;
|
//
获取失败(授权之后,获取过程出错)
|
程序出错
|
2;
|
//
用户取消授权
|
|
1;
|
//
授权失败
|
服务器端失败,重试
|
176;
|
//
授权登录未确认返回错误码
|
服务端返回错误码
|
19;
|
//Token
无效,请退出重试
|
服务端返回错误码
|
31;
|
//
短信已经发送,请勿重复提交
|
服务端返回错误码
|
20;
|
//token
过期
|
服务端返回错误码
|
21;
|
//token不存在
|
服务端返回错误码
|
31;
|
//
短信已经发送,请勿重复提交
|
服务端返回错误码
|
257;
|
//cgi
验证图片验证码错误;
|
服务端返回错误码
|
258
;
|
//cgi sid,guid
过期或不存在错误
|
服务端返回错误码
|
259;
|
//cgi DTC
存储错误
|
服务端返回错误码
|
260;
|
//cgi
后台服务执行错误
|
服务端返回错误码
|
261;
|
// cgi
验证token错误
|
服务端返回错误码
|
262;
|
//cgi
验证短信验证码错误
|
服务端返回错误码
|
263;
|
//cgi TPL
文件读取错误
|
服务端返回错误码
|
264;
|
//cgi参数缺失或格式错误,解密失败
|
服务端返回错误码
|
**
注意**
登录方法登录成功,如果是通过京东APP授权登录,登录态有效时长6个月,如果是M站登录有效时长1个月。
3
)验证登录态(验证是否登录)
KeplerApiManager.getWebViewService().checkLoginState(new ActionCallBck() {
@Override
public boolean onDateCall(int key, String info) {
mHandler.post(new Runnable() {
@Override
public void run() {
Toast.makeText(mContext, "
已登录
", Toast.LENGTH_SHORT).show();
}
});
return false;
}
@Override
public boolean onErrCall(int key, String error) {
mHandler.post(new Runnable() {
@Override
public void run() {
Toast.makeText(mContext, "
未登录
", Toast.LENGTH_SHORT).show();
}
});
return false;
}
});
4
)一键添加购物车
在2.2.3版本增加了一键加购功能,接入方调用此方法实现将一个商品添加到购物车。
KeplerApiManager.getWebViewService().addToCart(BaseStartActivityForSDK.this,
unionId,
webId,
skuId,
refer,
subUnionId,
new ActionCallBck() {
@Override
public boolean onDateCall(int key, final String info) {
mHandler.post(new Runnable() {
@Override
public void run() {
Toast.makeText(mContext, info, Toast.LENGTH_SHORT).show();
}
});
return false;
}
@Override
public boolean onErrCall(final int key, final String error) {
mHandler.post(new Runnable() {
@Override
public void run() {
Toast.makeText(mContext, "
加入购物车失败
, code:" +key + "errorMessage:" + error, Toast.LENGTH_SHORT).show();
}
});
return false;
}
});
参数说明:
1
)unionId:联盟ID,必须传入真实的联盟ID;
2
)webId:APPID(查看位置:联盟后台-我的推广-推广管理-APP管理);
3
)skuId:加车商品的skuId;
4
)refer:H5文章页面传url,原生页面传域名+文章编号。
5)
subUnionId
:
此参数是
3.0.0
版本新增参数。
参数含义:子联盟ID,第三方自定义信息,支持数字,字母,下划线,不支持中文及其他符号(需要向运营人员申请后才可使用)。
参数作用:可用于区分媒体自身的用户ID。
**
注意:以上字段需保证真实性,否则会被判为无效订单。**
加车失败,接口返回错误码和错误提示信息如下图。
表
1-
单个商品加车接口返回错误码和错误提示
序号
|
错误码
|
提示信息
|
1
|
0
|
加入购物车成功
|
2
|
30001
|
sku
类型无效
|
3
|
30002
|
未找到sku
|
4
|
30003
|
加入购物车失败
|
5
|
30004
|
绑定用户参数有误
|
6
|
30008
|
加车参数有误
|
7
|
30009
|
查询所有sku失败
|
8
|
30010
|
请求接口参数缺失
|
9
|
30012
|
ip
参数格式有误
|
10
|
30013
|
deviceType
参数格式有误
|
11
|
30014
|
unionId
有误
|
5
)批量商品一键添加购物车(此处只是接口操作,无页面打开,2.2.5及以上版本支持)
此方法支持一次添加多个商品到购物车
,
实例代码如下:
KeplerApiManager.getWebViewService().addSkusToCar(BaseStartActivityForSDK.this,
unionId,
webId,
skuIds,
skuCounts,
refer,
subUnionId,
new ActionCallBck() {
@Override
public boolean onDateCall(int key, final String info) {
mHandler.post(new Runnable() {
@Override
public void run() {
Toast.makeText(mContext, info, Toast.LENGTH_SHORT).show();
checkLoginStatus();
}
});
return false;
}
@Override
public boolean onErrCall(final int key, final String error) {
mHandler.post(new Runnable() {
@Override
public void run() {
Toast.makeText(mContext, "
加入购物车失败
, code:" + key + "errorMessage:" + error, Toast.LENGTH_SHORT).show();
}
});
return false;
}
});
方法及参数说明:
public void addSkusToCar(final Activity activity, final String unionId, final String webId, final String skuIDs, final String skuCounts,final String refer, final ActionCallBck mNetCallBck);
参数说明:
1
)unionId:联盟ID,必须传入真实的联盟ID;
2
)webId:APPID(查看位置:联盟后台-我的推广-推广管理-APP管理);
3
)skuIds:加车商品的skuId,以逗号分隔;
4
)skuCounts:加车商品的数量,以逗号分隔;
5
)refer:H5文章页面传url,原生页面传域名+文章编号;
6
)
subUnionId
:此参数是3.0.0版本新增参数。
参数含义:子联盟ID,第三方自定义信息,支持数字,字母,下划线,不支持中文及其他符号(需要向运营人员申请后才可使用)。
参数作用:可用于区分媒体自身的用户ID。
7
)加车接口回调方法,包括加车成功onDateCall(int key, final String info)、加车失败onErrCall(final int key, final String error)。其中,加车失败回调方法的key和error可作为排查加车失败原因,可参考单个商品加车失败错误码对照表1。
**
注意:以上字段需保证真实性,否则会被判为无效订单。**
5
、参数
1
、KeplerAttachParameter
从2.2.0版本,该对象作为入口参数,承载以下字段功能:
setCustomerInfo(String kepler_customer_Info)
// 该参数据为第三方应用自定义参数,可以为页面,频道标示,实现统计,打点等需求,在订单维度会存储此字段。
//
传参长度,使用
URL encode
之后长度必须小于
256
字节,否则会抛出异常
//
严禁
传入中文以及以下特殊字符 (
=#%&+?< {}
)
setPositionId(int positionId)
// 该参数据为计费参数
2
、KeplerGlobalParameter
//为全局参数设置项,使用单例
KeplerGlobalParameter.getSingleton().setVirtualAppkey(appkey2);
//计费到另外一个账号体系
(注意:必须是多个不同的登录账号下不同app的Appkey
(相同账号体系下,不同的App,使用的是一个分佣体系,所以必须申请多个账号))
setJDappBackTagID(String JDappBackTagID)
//设置打开APP返回的ID(打开jd APP之后 ,可以设置显示直接返回到第三方应用标签)
setActId(String actId)
//设置ActId 内容ID
setExt(String ext)
//设置Ext 内容渠道扩展字段
setGoBackIgnoredUrl(String[] goBackIgnoredUrl)
// 如果使用H5页面,但是第三方传入地址非jd地址,在返回动作,需要跳过的url(防止302导致的无法退出)
6
、h5打开页面功能
1
)H5功能:打开商品详情
SKU
KeplerApiManager.getWebViewService().openItemDetailsWebViewPage("1726755899", mKeplerAttachParameter);
2
)H5功能:打开任意页面url
//
也是商品详情 理论上type4 可以打开jd.com 包括pc ,m站 ,手Q,微信手Q,甚至包括金融,钱包等团队的h5页面,但是会有可能出现不可预知的错误,在没有得到我们明确的使用指导下,请详细测试
//
不再建议使用以下
union url
地址,直接使用jd的原生地址也可以完成计费流程
public final static String oneDealUrl = "http://union.click.jd.com/jdc?p=AyIOZRprFQoSAlcZWCVGTV8LRGtMR1dGXgVFSR1JUkpJBUkcU0QLTh"
+ "9HRwwHXRteFwARGAxeB0gMVQsQDAFBSkVEC0dXZUNTcRFFBEFaakIBR2tOX1RkHUU5XWFuVyIYC00AZFsJXidlDh43VhleHAYSB1UfaxUFF"
+ "jdlfSYlVHwHVBpaFAMTBFASaxQyEgJRHV4cBBoFVBNfEjIVNwpPHkFSUFMdRR9AUkw3ZRo%3D&t=W1dCFBBFC14NXAAECUteDEYWRQ5RUFc"
+ "ZVRNbEAAQBEpCHklfHEBZXkxPVlpQFkUHGXJTRiNfBUpWSn8QTwc%3D&e=25840255236224";
KeplerApiManager.getWebViewService().openJDUrlWebViewPage(oneDealUrl ,
mKeplerAttachParameter
);
4
)H5功能:
打开导航页面
KeplerApiManager.getWebViewService().openNavigationWebViewPage(
mKeplerAttachParameter
);
5
)H5功能:打开购物车页面
KeplerApiManager.getWebViewService().openCartWebViewPage(
mKeplerAttachParameter
);
6
)H5功能:用户订单页面
KeplerApiManager.getWebViewService().openOrderListWebViewPage(
mKeplerAttachParameter
);
7
)H5功能:取消用户登录
KeplerApiManager.getWebViewService().cancelAuth(Activity.this);
8
)H5功能:打开搜索关键词页面
KeplerApiManager.getWebViewService().openSearchWebViewPage("
小米",
mKeplerAttachParameter
);
7
、呼起京东 APP 进行相关操作
设置打开APP的事件回调:
OpenAppAction mOpenAppAction = new OpenAppAction() {
@Override
public void onStatus(final int status) {
mHandler.post(new Runnable() {
@Override
public void run() {
if (status == OpenAppAction.OpenAppAction_start) {//开始状态未必一定执行,
dialogShow();
} else {
mKelperTask=null;
dialogDiss();
}
}
});
}
};
打开主APP会产生一个KelperTask
任务可以取消
:
mKelperTask.setCancel(true);
timeOut
:(打开APP之前,向服务端同步计费信息,这个过程超时,或者出错,H5页面会被打开)
呼起APP 任意URL
mKelperTask= KeplerApiManager.getWebViewService().openJDUrlPage(url, customerInfo,mContext,mOpenAppAction,timeOut);
呼起APP 单品SKU
此方法是唤起京东APP的商品详情页。
mKelperTask= KeplerApiManager.getWebViewService()
.openItemDetailsPage(sku,
customerInfo,mContext,mOpenAppAction,timeOut);
唤起京喜APP或京东APP单品详情页(3.0.0版本新增)
mKelperTask = KeplerApiManager
.getWebViewService()
. openProductDetailPage (skuId,
customerInfo, this, mOpenAppAction, timeOut);
此方法依据商品类型,按照不同优先级唤起APP。具体如下:
一、如果商品是京喜优选商品或者京东商品,按照1)~3)依次判断:
1)
安装京东APP前提下,唤京东APP。
2)
如果未安装京东APP,安装京喜APP,唤起京喜APP。
3)
如果既未安装京东APP,也未安装京喜APP,则通过WebView方式打开。
二、京喜非优选商品:
安装京喜APP前提下,唤起京喜APP,未安装京喜,WebView方式打开。
如果希望唤起京喜APP展示返回键,需要您配置返回键参数,若不设置,则唤起京喜不展示返回键。
京喜APP配置返回键(3.0.0版本新增)
配置方法可通过KeplerAttachParameter提供的putKeplerAttachParameter方法传递键值对的方式传递。
需要对key为appName,appSchema和appBundleId分别配置key-value键值对。
配置的key保证字母拼写正确、区分大小写、不能有空格等,否则可能出现配置了返回键不生效。
其中,参数含义如下:
appName
是返回键名称;
appSchema
是返回协议,默认为“sdkback”+用户的appKey组成;
appBundleId
是应用包名。
呼起APP导航页面
mKelperTask= KeplerApiManager.getWebViewService().openNavigationPage(
customerInfo,mContext,mOpenAppAction,timeOut);
呼起APP 打开购物车
mKelperTask=KeplerApiManager.getWebViewService().openCartPage(
customerInfo,mContext,mOpenAppAction,timeOut);
呼起APP 用户订单页面
mKelperTask= KeplerApiManager.getWebViewService().openOrderListPage(
customerInfo,mContext,mOpenAppAction,timeOut);
呼起APP 打开搜索关键词页面
mKelperTask=KeplerApiManager.getWebViewService().openSearchPage(
searchkey, customerInfo,mContext,mOpenAppAction,timeOut);
传递返回 JDappBackTagID
KeplerGlobalParameter.getSingleton().setJDappBackTagID(id);
8
、查看开普勒版本号
查看开普勒版本号
KeplerApiManager.getKeplerVersion()
***
注意事项***
请不要删除sdk相关cookie,缓存文件,否则可能导致展示、跟单分佣等异常。
详细使用方法请查询
demo. URL:
Android demo