文档列表
iOS SDK 集成文档
(XCode 集成环境,SDK版本2.2.5以及之上版本)
1、客户端SDK接入需要的准备工作
1) 入驻开普勒,创建应用;
2) 下载客户端SDK;
注意事项:下载的SDK中,有一张安全图片文件safe.jpg ,在指定路径 Kepler.bundle 下,「安全图片」是开普勒SDK安全机制的一部分,安全图片位于下载的SDK包中,为了使SDK正常工作,需要开发者确保正确的使用安全图片,请勿修改和移动。
2、客户端SDK加入工程
将SDK文件夹(包含JDKeplerSDK.framework和Kepler.bundle)导入到工程中,并把Framework同时添加到(Build Phases->Link Binary With Libraries)中,如图。
依赖导入系统类库:如图
设置Link Flags
在Target->Build Setting->Linking->Other Linker Flags中添加-ObjC
支持系统版本ios7.0及以上版本
3、外部调用url参数配置
在"Info.plist"中将要在外部调用的URL scheme(jdlogin)列为白名单,并且添加注册的URL Scheme,CFBundleURLSchemes的内容为 sdkback+对应使用方的appKey
内容如下图所示:
具体代码:
<key>LSApplicationQueriesSchemes</key>
<array>
<string>jdlogin</string>
<string>openapp.jdmobile</string>
<string>weixin</string>
</array>
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleTypeRole</key><string>Editor</string>
<key>CFBundleURLName</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleURLSchemes</key>
<array>
<string>sdkback2cfd6d990a0a4fbd846ca25f1c028134</string>
</array>
</dict>
</array>
4、权限配置
在部分京东页面需要访问相机和相册 因此需要在info.plist文件中配置权限. 代码如下.String中可自定义提示文字.
<key>NSPhotoLibraryUsageDescription</key>
<string></string>
<key>NSCameraUsageDescription</key>
<string></string>
5、示例demo下载使用
使用说明:demo下载后导入Xcode中;
6、在AppDelegate中添加代码
1)必须添加部分
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[[KeplerApiManager sharedKPService]asyncInitSdk:Value_AppKey secretKey:Value_AppSecret sucessCallback:^(){
}failedCallback:^(NSError *error){
}];
return YES;
}
其中appKey ,appSecret, 在开普勒第三方app申请中获取。如果初始化失败,请检查参数是否与申请时获取的参数是否一致,
修改Kepler.bundle中安全图片的内容或者名称也会导致注册失败。
2)SSO授权登录回调场景使用(必须调用,如果SDK接收不到授权回调信息会造成重复授权的问题).
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)
sourceApplication annotation:(id)annotation NS_AVAILABLE_IOS(4_2){
return [[KeplerApiManager sharedKPService] handleOpenURL:url];
}
同时实现iOS9+新的系统API
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString*, id> *)options{
return [[KeplerApiManager sharedKPService] handleOpenURL:url];
}
3)后台检查更新模板(可选)
需要开启服务:如图:
//iOS7以后会根据获取的结果适当的调整唤醒的时间策略 (可选)
- (void)application:(UIApplication *)application performFetchWithCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
BOOL haveJDKeplerServiceNewContent = NO;
[self fetchJDKeplerService:&haveJDKeplerServiceNewContent];
if (haveJDKeplerServiceNewContent){
completionHandler(UIBackgroundFetchResultNewData);
} else {
completionHandler(UIBackgroundFetchResultNoData);
}
}
(可选)
- (void)fetchJDKeplerService:(BOOL *)paramFetchedJDKeplerNewContent {
[[KeplerApiManager sharedKPService] checkUpdate]; //检测更新
}
7、实际功能开发
/**
* 通过URL打开任意商品页面
* @param url 页面url
* @param sourceController 当前显示的UIViewController
* @param jumpType 跳转类型(默认 push) 1代表present 2代表push
* @param userInfo 不需要可以传nil 传参数据为第三方应用自定义,可以为页面,频道标识;也可以标识分成信息;该数据只做统计需求。
传参长度,使用URL encode之后长度必须小于256字节(不建议传入中文以及特殊字符)
* 禁止传参带入以下符号: =#%&+?<{}
*/
- (void)openKeplerPageWithURL:(NSString *)url sourceController:(UIViewController *)
sourceController jumpType:(NSInteger)jumpType userInfo:(NSDictionary *)userInfo;
/**
* 打开导航页
*/
- (void)openNavigationPage:(UIViewController *)sourceController jumpType:(NSInteger)jumpType userInfo:(NSDictionary *)userInfo;
/**
* 通过SKU打开Kepler单品页
* @param sku 商品SKU
*/
- (void)openItemDetailWithSKU:(NSString *)sku sourceController:(UIViewController *)
sourceController jumpType:(NSInteger)jumpType userInfo:(NSDictionary *)userInfo;
/**
* 打开订单列表
*/
- (void)openOrderList:(UIViewController *)sourceController jumpType:(NSInteger)jumpType userInfo:(NSDictionary *)userInfo;
/**
* 根据搜索关键字打开搜索结果页
* @param searchKey 搜索关键字
*/
- (void)openSearchResult:(NSString *)searchKey sourceController:(UIViewController *)
sourceController jumpType:(NSInteger)jumpType userInfo:(NSDictionary *)userInfo;
/**
* 根据传入的名称打开对应的分类列表
* 名称必须是京东支持的分类:
@"热门分类","手机",@"家用电器",@"电脑办公","摄影数码",@"女装服饰",@"男装服饰",@"时尚鞋靴",@"内衣配件",@"运动户外",
@"珠宝饰品",@"钟表",@"母婴用品",@"童装童鞋",@"玩具乐器",@"护肤美妆",@"清洁洗护",@"皮具箱包",@"家居家纺",@"生活用品",
@"食品生鲜",@"酒水饮料",@"奢品礼品",@"家具建材",@"热卖品牌",@"营养保健",@"汽车用品",@"宠物专区",@"图书音像"@"情趣用品";
也可打开导航页实时查看所支持的分类.
*/
- (void)openCategoryListWithName:(NSString *)categoryName sourceController:(UIViewController *)
sourceController jumpType:(NSInteger)jumpType userInfo:(NSDictionary *)userInfo;
/**
* 打开购物车界面
*/
- (void)openShoppingCart:(UIViewController *)sourceController jumpType:(NSInteger)jumpType userInfo:(NSDictionary *)userInfo;
/**
* 添加到购物车
*
* @param skuList 添加到购物车中的商品id
* @param numList 添加到购物车中商品数量,多个商品必须与skuList一一对应
* @param success 添加成功回调
* @param failure 添加失败回调
*/
- (void)addToCartWithSkuList:(NSArray *)skuList numList:(NSArray *)numList sourceController:(UIViewController *)
sourceController success:(void(^)(void))success failure:(void(^)(NSError *))failure;
/**
* 静态化检测更新
*/
- (void)checkUpdate;
/**
* 取消授权,清除登录态
*/
- (void)cancelAuth;
/**
* 直接唤起登录授权界面
* 用户登录授权成功后会返回用户token,登录授权失败会返回对应错误信息
*/
- (void)keplerLoginWithViewController:(UIViewController *)viewController
success:(keplerLoginSuccessCallback)successCallback
failure:(keplerLoginFailureCallback)failureCallback;
/**
* 设置加载进度条颜色, 可在初始化SDK成功后进行设置
*/
- (void)setKeplerProgressBarColor:(UIColor *)progressBarColor;
/**
* 标识曾经登录完成过,因为服务端安全逻辑,可能这个用户登录态已经失效
*/
- (BOOL)isKeplerLogin;
/**
是否强制使用H5打开界面 默认为YES;设置为NO时,调用商品详情页,订单列表,购物车等方法时将跳转到京东app并打开对应的界面.
*/
@property (nonatomic, assign)BOOL isOpenByH5;
/**
* 打开京东后显示的返回按钮的tagID
**/
@property (nonatomic, copy) NSString *JDappBackTagID;
//设置打开APP返回的ID(打开jd APP之后 ,可以设置显示直接返回到第三方应用标签),需邮件提供appkey、返回键名称、bundleId申请,kepler-support@jd.com
添加到购物车范例:
NSArray *skuListArray = @[];
NSArray *numListArray = @[];
[[KeplerApiManager sharedKPService] addToCartWithSkuList:skuListArray numList:numListArray sourceController:self success:^{
NSLog(@"添加成功");
} failure:^(NSError *error) {
NSInteger code = error.code;
switch (code) {
case 1003: //token不存在
case 1004: //token过期
case 1022: //缺少token参数
//需先调用登录授权接口,成功后再调用该添加购物车方法.
break;
case 8969: //购物车商品达到最上限
break;
case 500: //添加失败
break;
case 1005: //app_key不存在
case 1020: //缺少app_key参数
break;
case 3038: //系统错误
break;
default:
break;
}
}];
主要返回code列表:
联盟一键加购
/**
联盟一键加购
@param unionID 联盟ID
@param webId AppID 查看位置:我的推广-推广管理-APP管理
@param skuID 商品SKU
@param refer refer (原生页面传域名+文章编号)
@param viewController 当前的视图控制器
@param completionHandler 返回
*/
- (void)keplerFastPurchaseWith:(NSString *)unionID
appID:(NSString *)appId
skuID:(NSString *)skuID
refer:(NSString *)refer
controller:(UIViewController *)viewController
completion:(keplerCompletionHandler)completionHandler;
例子:
批量加车,支持分佣功能
/**
批量一键加购
@param unionID
@param appID AppID 查看位置:我的推广-推广管理-APP管理
@param skuIDs 商品SKU数组
@param skuCounts 商品SKU对应的数量
@param refer refer (原生页面传域名+文章编号)
@param viewController 当前的视图控制器
@param completionHandler 返回
*/
- (void)keplerFastPurchaseWith:(NSString *)unionID
appID:(NSString *)appID
skuIDs:(NSString *)skuIDs skuCounts:(NSString *)skuCounts
refer:(NSString *)refer
controller:(UIViewController *)viewController
completion:(keplerCompletionHandler)completionHandler
实例
NSString *unionID = @"1000604965"; //unionid:1000604965 联盟ID:1000072052
NSString *webid = @"1000876888";//webId 1000876888 webId1431588414 webId1483899001
NSString *skuIDs = @"44492363307,8179408,35337221431";
NSString *skuCounts = @"1,2,3";
NSString *refer = @"https://item.m.jd.com/product/3195185.html";//referer 传当前调用加车接口的页面地址
[[KeplerApiManager sharedKPService] keplerFastPurchaseWith:unionID appID:webid skuIDs:skuIDs skuCounts:skuCounts refer:refer controller:self completion:^(BOOL result, id _Nullable responseObject, NSError * _Nullable error) {
NSLog(@"response = %@",responseObject);
}];
// 打开京喜商详接口,3.2.0版本新增,使用了3.0.0版本打开京喜商详功能的需替换成以下方法
- (void)openJXItemDetailWithSKU:(NSString *)sku
sourceController:(UIViewController *)sourceController
jumpType:(NSInteger)jumpType
userInfo:(NSDictionary *)userInfo;
示例:
返回键信息通过配置userInfo参数,对应参数如上图
基础API
可自由调用的数据接口