如果你想要你的app能跳转淘宝,京东,拼多多的商品详情页,或者优惠券,或者活动页(这个我没试过),个人在实现的过程中,淘宝和拼多多可直接根据url scheme打开url链接,就能唤起他们的app并打开对应链接的页面,看来他们对第三方开发是比较友好的,而京东,虽然能通过url scheme打开app。但是你要想打开一些商品详情,或者优惠券页面。你可能需要设置好一些参数,网上有几篇文章提到过,你们如果没特殊要求,可以用这种方式,而我这边后台给我的链接,是不能上面那种方式打开的,则必须通过接入sdk。
下面我就跟大家分享一下sdk接入的几个注意事项。
参考文档:https://union.jd.com/helpcenter/12188-13088-46117
这里面android和ios版的。
这里我放出ios端实际操作流程:
一、在你的app在appstore中上线后,才能去京东联盟申请应用,审核通过才能进行下一步接入操作
这里非常之坑:你的ios端应用必须先上线,很恶心吧,如果你还只是个测试版,我建议就用前面的方式打开京东,或者还有一个方法,用safari浏览器打开链接,safari会自动弹出跳转到京东的弹框,也算是暂时的解决方案。
当然,我没试过填写android下载地址或者其他下载地址能否审核通过,你可以尝试一下。
京东联盟地址:https://union.jd.com/
登录进入后,创建ios端应用
可以看到,这都是必填的选项,最后一个就是要求AppStore下载地址。
好了,审核通过后就可以查看应用信息
最后下载sdk,准备嵌入到项目中
二、xcode项目集成京东SDK
1.将 JDSDK.framework 和 JDSDK.bundle导入到工程中(文档说将文件夹导入进去,也可以的,只是引用的时候注意路径问题)
导入这两个东西的要注意一些细节:1⃣️:先添加jdsdk.bundle,是在targets->build phases->copy bundle resource中添加的,添加的时候要勾选copy items if needed,要不然会导致找不到文件的。如下图所示
2⃣️:导入jdsdk.framework,我是直接拖拉到项目里面,上面那种方式我试过,但是不知道为啥有问题,你可以自己尝试一下。导入之后在项目的目录里面就会有这个文件夹,第3⃣️步会用到。
3⃣️:在1⃣️中的那个copy bundle resource上面有个link binary with libraries,在这里添加jdsdk.framework的引用,要注意的时候,选择的时候要选择第2⃣️步导入到项目中的framework,而不是你下载的那个文件中那个。添加好后,顺便把他依赖的框架一起添加进去。弄完之后是下图这样。
2.将sdk导入进去后,看到接入文档还写了这样一句话:
因为我的xcode是最新版的,other linker flags里面已经添加好了-objc,还有一堆其他的,你检查就好了,没有就去添加。
3.配置urlscheme,权限配置
这个就直接参考文档就好了,没什么需要注意的地方。
4.在AppDelegate注册和使用
首先,导入.h文件
在didFinishLaunchingWithOptions方法中注册应用
[[KeplerApiManager sharedKPService]asyncInitSdk:@"你的appkey" secretKey:@"你的secretkey" sucessCallback:^{} failedCallback:^(NSError *error) {}];
在下面方法中添加回调函数:
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary*)options{
return [[KeplerApiManager sharedKPService] handleOpenURL:url];
}
注意,这里你写完后很有可能提示错误,我发现是在KeplerApiManager.h文件中没有定义handleOpenURL方法,这里我修改了他的源码。添加了下面这句代码
- (BOOL)handleOpenURL:(NSURL*)url;
参考图:
5.最后就是使用了,在你需要使用的地方做如下操作
先导入文件头
#import <JDSDK/KeplerApiManager.h>
在写调用唤起京东app打开url的方法
// jdlink是京东链接
[[KeplerApiManager sharedKPService] openKeplerPageWithURL:jdlink userInfo:nil failedCallback:^(NSInteger code ,NSString *description) {
NSLog(@"%ld@",(long)code);
NSLog(@"%@",description);
}];
好了,这就可以了,去测试吧。