- 概念:
(1)URL Schemes,是 H5 或者别的 app 打开自己 app 的一种方式,常用 bundleID 作为 URL Schemes 的标识(避免取的名字与别的 app 重复,打开了别的 app ),这个标识需要在 Targets/Info/URL Types 中设置。
一、流程:
Safari 打开 H5 链接,H5 给 Safari 发送重定向,由 Safari 打开 app(或者打开 app 内部详情页),两种重定向类型(下面的代码是H5页上重定向的代码):
(1)直接打开 app :
window.location.href ='com.English.AJ://';
(2)打开 app 内部详情页:
- 注释:可以在 H5 的重定向链接后面拼接参数,app 获取后进行解析,推至内部详情页
window.location.href ='com.English.AJ://?extra={"type":"3","h5_url":"[https://reading.talcloud.com/app/apppages/shareclass.html?act_id=18&raz_role=teacher&razflag=hideTitle](https://reading.talcloud.com/app/apppages/shareclass.html?act_id=18&raz_role=teacher&razflag=hideTitle)"}';
二、 app 端的代码:
(1)AppDelegate.m:
//拦截H5跳转app时的链接地址
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
//短信 -> H5 -> app内部详情页
let urlStr = url.absoluteString
let array = urlStr.components(separatedBy: "extra=")
guard array.count >= 1 else {
return true
}
let dictString = array.last!
let extraDict = (dictString as NSString).removingPercentEncoding
let extraDict2 = self.getDictionaryFromJSONString(jsonString: extraDict!)
let jsonData = JSON(extraDict2)
//内部跳转
let model = HomeEntranceModel.deserialize(from: jsonData.dictionaryObject!)
JumpDetailVCTool.share.jumpDetailVCWithModel(model: model)
return true
}
//JSONString转换为字典
func getDictionaryFromJSONString(jsonString:String) ->NSDictionary{
let jsonData:Data = jsonString.data(using: .utf8)!
let dict = try? JSONSerialization.jsonObject(with: jsonData, options: .mutableContainers)
if dict != nil {
return dict as! NSDictionary
}
return NSDictionary()
}
网友评论