前言:如何从自己的App跳转到相应的淘宝、天猫、京东等第三方App中相应的商品或店铺

1.配置环境

需要在Info.plist 里面建立一个叫 LSApplicationQueriesSchemes 的 Array类型,将相应的app Scheme添加进LSApplicationQueriesSchemes字段

该字段并不是所谓的白名单,而是在iOS9后,如果想要使用canOpenURL方法检查是否可以打这个URL或可以处理该URL的的App
需要在info.plist里添LSApplicationQueriesSchemes字段来预设url,否则是否安装都会返回NO。如果想要打开其他App,直接使用openURL即可

常见的第三方App Scheme

<key>LSApplicationQueriesSchemes</key><array><!-- 微信 URL Scheme 白名单--><string>wechat</string><string>weixin</string><!-- 新浪微博 URL Scheme 白名单--><string>sinaweibohd</string><string>sinaweibo</string><string>sinaweibosso</string><string>weibosdk</string><string>weibosdk2.5</string><!-- 京东 URL Scheme 白名单--><string>openapp.jdmobile</string><!-- 淘宝 URL Scheme 白名单--><string>taobao</string><!-- 天猫 URL Scheme 白名单--><string>tmall</string><!-- 支付宝  URL Scheme 白名单--><string>alipay</string><string>alipayshare</string>
</array>

2.编写跳转方法

ps:以下方法参数均是使用pc端网页url,即可跳转至相对应App的页面

1.跳转至淘宝店铺

传入的url必须带有shopId参数,如:https://shop561496733.taobao.com/?spm=a230r.7195193.1997079397.2.1b8a264cZChmYE

///跳转至淘宝店铺页public func turnToTaobaoShop(urlStr: String) {let url = URL(string: urlStr)!let host = url.host!let startIndex = host.index(host.startIndex, offsetBy: 4)let endIndex = host.firstIndex(of: ".") ?? host.endIndexif endIndex == host.endIndex { return }let shopId = host[startIndex..<endIndex]guard let appURL = URL(string: "taobao://shop.m.taobao.com/shop/shop_index.htm?shop_id="+shopId+"") else {return}/// 判断手机是否安装了淘宝Appif UIApplication.shared.canOpenURL(appURL) {UIApplication.shared.open(appURL, options: [:], completionHandler: nil)} else {/// 没安装淘宝,使用浏览器打开相对应页面UIApplication.shared.open(url, options: [:], completionHandler: nil)}}
2.跳转至淘宝商品

传入的url必须带有商品id,与店铺Id类似,不再举例

///跳转至淘宝商品详情页public func turnToTaobaoItem(urlStr: String) {let url = URL(string: urlStr)!let itemDict:[String:String] = url.urlParameters ?? [:]let itemId = itemDict["id"]!guard let appURL = URL(string: "taobao://item.taobao.com/item.htm?id="+itemId+"") else {return}/// 判断手机是否安装了淘宝Appif UIApplication.shared.canOpenURL(appURL) {UIApplication.shared.open(appURL, options: [:], completionHandler: nil)} else {/// 手机没有安装App,使用浏览器打开相对应页面UIApplication.shared.open(url, options: [:], completionHandler: nil)}}
3.跳转至天猫店铺

因为天猫店铺的url中不带店铺Id,所以需要通过在店铺页面上打开网页检查器,取出店铺Id并与url一起传入参数

///跳转至天猫店铺页public func turnToTmallShop(urlStr: String, shopId: String) {guard let url = URL(string: "tmall://page.tm/shop?shopId="+shopId+"") else {return}if UIApplication.shared.canOpenURL(url) {UIApplication.shared.open(url, options: [:], completionHandler: nil)} else {UIApplication.shared.open(URL(string: urlStr)!, options: [:], completionHandler: nil)}}
4.跳转至天猫商品
///跳转至天猫商品详情页public func turnToTmallItem(urlStr: String) {let url = URL(string: urlStr)!let itemDict:[String:String] = url.urlParameters ?? [:]let itemId = itemDict["id"]!guard let appURL = URL(string: "tmall://tmallclient/?action:item:id="+itemId+"") else {return}if UIApplication.shared.canOpenURL(appURL) {UIApplication.shared.open(appURL, options: [:], completionHandler: nil)} else {UIApplication.shared.open(url, options: [:], completionHandler: nil)}}
5.跳转至京东商品详情或商品店铺
///跳转至京东商品详情页或店铺页func TurnToJD(urlStr: String){let jdDict = ["category":"jump", "des":"getCoupon", "url":urlStr]guard let jdStr = jdDict.formatJSON() else { return }let url = "openApp.jdmobile://virtual?params=\(jdStr)"let utf8Str = url.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)guard let appURL = URL(string: utf8Str ?? "") else {return}if UIApplication.shared.canOpenURL(appURL) {UIApplication.shared.open(appURL, options: [:], completionHandler: nil)} else {UIApplication.shared.open(URL(string: urlStr)!, options: [:], completionHandler: nil)}}

6.添加扩展方法
因为以上方法使用到了url参数分解和序列化字典到JSON字符串,所以需要添加一下扩展方法

// MARK: - Extension
extension URL {var urlParameters: [String: String]? {guard let components = URLComponents(url: self, resolvingAgainstBaseURL: true),let queryItems = components.queryItems else { return nil }return queryItems.reduce(into: [String: String]()) { (result, item) inresult[item.name] = item.value}}
}extension Dictionary {/// 将JSON字符串反序列化到字典中public static func constructFromJSON (json: String) -> Dictionary? {if let data = (try? JSONSerialization.jsonObject(with: json.data(using: String.Encoding.utf8,allowLossyConversion: true)!,options: JSONSerialization.ReadingOptions.mutableContainers)) as? Dictionary {return data} else {return nil}}/// 序列化字典到JSON字符串public func formatJSON() -> String? {if let jsonData = try? JSONSerialization.data(withJSONObject: self, options: JSONSerialization.WritingOptions()) {let jsonStr = String(data: jsonData, encoding: String.Encoding(rawValue: String.Encoding.utf8.rawValue))return String(jsonStr ?? "")}return nil}
}

注:给大家排除一个网上大多数文章所传输的误解
网上大多数跳转至第三方App的文章都要求大家配置URL types,其实这个配置文件不是用来跳转至外部App,而是用来从外部App跳转至自己的App中使用的,如自己设置了一个URL Scheme,举个

「Swift」跳转至第三方App|淘宝、天猫、京东相关推荐

  1. 经纬张颖「炮轰」扫码点餐;淘宝特价版给拼多多送芒果;Firefox 87.0 发布|极客头条...

    「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极客头条」来啦,快来看今天都有哪些值得我们技术人关注的重要新闻吧. 整理 | 丁恩华 出品 | CSDN(ID:CSDNnews ...

  2. 极客日报第89期:经纬张颖「炮轰」扫码点餐;淘宝特价版给拼多多送芒果;Firefox 87.0 发布

    一分钟速览新闻点! 经纬张颖「炮轰」扫码点餐,网友犀利评论:都注重隐私,你投的公司靠什么增长? 新浪宣布完成私有化合并,从纳斯达克退市 腾讯将对虎牙和斗鱼的合并做出让步 淘宝特价版喊话拼多多,要给拼多 ...

  3. 草柴返利APP:淘宝天猫满减店铺优惠券领取入口怎么免费领淘宝天猫粉丝福利购大额内部隐藏优惠券?

    草柴APP淘宝天猫大额隐藏内部优惠券领取平台,免费领取淘宝天猫店铺优惠券,让您与他人购买相同的商品,不求比别人花的少,但求不比别人花的多. 淘宝天猫满减店铺优惠券领取入口怎么免费领淘宝天猫粉丝福利购大 ...

  4. 个人淘客推广App — 支持淘宝、京东、唯品会、拼多多、美团推广

    这是一个个人领取优惠券拿推广佣金的App,仅支持 Android. 介绍 相信大家在网上各种地方都遇到过有人推广商品,通过他们推广的链接购买商品可能会有一些优惠,有的还有返佣.我看到这些就想:既然你能 ...

  5. 淘宝/天猫/淘特/京东/拼多多/唯品会/苏宁易购/考拉海购内部隐藏优惠券。饿了么/美团外卖/美团优选/美团酒店/大众点评/口碑红包。抖音/快手直播带货。优惠券APP源码怎么写?分享给大家。

    下载地址:喵惠应用宝https://a.app.qq.com/o/simple.jsp?pkgname=com.miaohui.xin 淘宝/天猫/淘特/京东/拼多多/唯品会/苏宁易购/考拉海购内部隐 ...

  6. 淘宝天猫商品详情API接口(app、h5端)

    淘宝天猫商品详情接口(app.h5端)代码对接可获取到淘宝详情页面数据包括PC端,APP端,H5端,参数包括商品标题,商品价格,商品图片,SKU属性,SKU信息,SKU详情图,库存,数量,销量,评论总 ...

  7. 淘宝/天猫获得淘宝app商品详情原数据

    淘宝/天猫获得淘宝app商品详情原数据 API 返回值说明      立即测试 item_get_app-获得淘宝app商品详情原数据 获取Key和secret 请求参数 请求参数:num_iid=5 ...

  8. 淘宝/天猫获得淘宝app商品详情原数据API,电商数据分析

    万邦淘宝/天猫获得淘宝app商品详情原数据 API 返回值说明 item_get_app-获得淘宝app商品详情原数据 onebound.taobao.item_get_app 公共参数 请求地址:  ...

  9. API测试接口,淘宝天猫、1688、京东、拼多多商品页面APP端原数据,API返回值说明

    以下是行业内了解到的一些情况,本帖只展示部分代码,需要更多API调试请移步注册API账号 console.open.onebound.cn/console/?i=- 淘宝/天猫获得淘宝app商品详情原 ...

最新文章

  1. 【Teradata】grouping和rollup窗口函数
  2. am335x LCD参数更改
  3. Go的string/int/int64转化
  4. ECshop 快捷登录插件 支持QQ 支付宝 微博
  5. PHP服务Fcgi进程及PHP解析优化
  6. 计算几何 —— 欧拉公式
  7. 高级JAVA - 动态代理的实现原理和源码分析
  8. TokenInsight:反映区块链行业整体表现的TI指数较昨日同期上涨0.56%
  9. HDU 4442 Physical Examination(关于贪心排序)
  10. 远程下载pdf文件 java代码
  11. 解锁小众网站 站在巨人的肩膀上
  12. 微信小游戏马甲包过审策略
  13. pdf照片显示正常打印时被翻转_2020年二级建造师打印须知
  14. 10 Java基础笔记-封装
  15. 可追踪评估模型TAM的评估
  16. MC服务器角色背包文件,可穿戴背包配置文件说明 - 可穿戴背包 (Wearable Backpacks) - MC百科|最大的Minecraft中文MOD百科...
  17. 移动端开发的兼容适配与性能优化干货分享
  18. pssh, pscp的用法
  19. Mac OS 系统用不了Origin怎么办?
  20. 计算机多媒体对语文教学的提高,运用多媒体进行语文教学,有效提高学习效率...

热门文章

  1. Redis命令时间复杂度(redis的命令也要慎用啊)
  2. 2.pygame安装
  3. php json emoji问号,json_encode转码emoji等特殊表情报错
  4. 用Python计算两图像的峰值信噪比PSNR
  5. 南邮软件设计matlab,通信软件设计基础,南邮,实验报告(共10篇).doc
  6. 【软件测试】功能测试的测试工作流程
  7. Android调用JNI的实现方法
  8. 设置elementui表格的上下左右滚动条
  9. 选择恐惧症的福音之轮盘小程序展示
  10. 什么是冰山模型,冰山模型的三层结构