国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > iOS > 正文

deepLink iOS 應用到自己APP 記錄

2019-11-08 00:06:08
字體:
來源:轉載
供稿:網友
詳細的介紹可以在網上查詢,這里簡單說一下.這項技術主要是為了方便廣告跳轉而產生的.最大的例子就是淘寶,天貓,京東等購物APP.在第三方APP中點擊廣告鏈接直接跳轉到對應的客戶端的商品的詳情中,節省用戶的時間,一步到位.

2.自己APP實現deeplink需要的準備工作

通過Xcode添加URL Scheme跳轉,操作步驟如下:
第一步找到URL Types的添加處:TARGETS-info-Url types.第二步點擊加號 添加Url Schemes 添加為當前APP的標識(bundle ID),為了第三方APP跳轉

3.iOS端具體的實現過程

在Appdelegate.m中找到如下方法
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
此方法的作用就是在當前APP是其他APP通過URL打開時便會調用.在此處解析URL便可實現跳轉到指定頁面的需求 也就是deeplink技術
以下為淘寶給出的URL規范,用來調用淘寶客戶端的
寶貝詳情 taobao://item.taobao.com/item.htm?id=12688928896 寶貝搜索 taobao://s.taobao.com/?q=iphone 店鋪搜索 taobao://shopsearch.taobao.com/browse/shop_search.htm?q=iphone
首先,需要定制好跳轉協議的格式 當前我們就是使用最簡單的跳轉協議.
com.deeplink://deeplink.htm?id=123456com.deeplink 代表就是我們第2步時設置的 Url Schemesdeeplink.htm 可以設置為區別當前要跳轉的頁面的一個字符串id=123456 一般代表頁面的ID 用來請求數據
其次,便是在打開APP時獲取到這個跳轉協議,取出其中的值
NSString *scheme = [url scheme]; NSString *host = [url host]; NSString *query = [url query];
之后便是判斷,拿出需要的id進行跳轉
if (scheme && [scheme isEqualToString:@"com.deeplink"]) { NSString *typeStr = [host componentsSeparatedByString:@"."].firstObject; if (typeStr && [typeStr isEqualToString:@"deeplink"]) {//判斷了當前要跳轉的頁面是和我們設置的 deeplink 標識有關的頁面 NSString *idStr = [query componentsSeparatedByString:@"="].lastObject; NSDictionary *dict = @{@"type":@"1",@"id":idStr};
說明:如果當前APP架構 window的rootController為Navigationcontroller的話變在此處取得window的rootcontroller進行跳轉,由于我司項目根控制器是Tabbar所以無法直接實現push
可以參考我使用發送通知給主頁控制器,然后通過主頁控制器進行跳轉.
值得注意的是 關于這個GCD延遲1秒執行的必要性.實驗證明,如果不加,如需要被打開的APP不是處于后臺活躍狀態,那么將無法進行跳轉,原因是因為并沒有發送通知.
解決方法也是參考淘寶的跳轉,在打開淘寶客戶端后會有一定延遲才跳轉到對應的商品頁面.
關于接收到通知之后的跳轉邏輯這里就不貼出代碼了.
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ [[NSNotificationCenter defaultCenter] postNotificationName:@"DEEPLINK" object:nil userInfo:dict]; });

4.怎么使用協議跳轉

NSString *urlString = @"com.deeplink://deeplink.htm?id=123456";if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:urlString]]) { //若安裝了需要跳轉的app->跳轉到APP NSURL * url = [NSURL URLWithString:[urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]; [[UIApplication sharedApplication] openURL:url];}else{ //若未安裝需要跳轉的app->跳轉到APP的下載界面 [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"itms-apps://itunes.apple.com/cn/app/appname/id1070087534?mt=8"]]; //或者直接顯示web端的頁面}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 岳池县| 青河县| 射洪县| 阿坝| 乌拉特中旗| 临泉县| 海安县| 延川县| 兖州市| 定日县| 攀枝花市| 兰西县| 泾阳县| 贵定县| 司法| 原平市| 定远县| 和顺县| 和硕县| 色达县| 三亚市| 鸡西市| 湟源县| 灵宝市| 秦皇岛市| 疏附县| 繁昌县| 贵州省| 思茅市| 陆河县| 工布江达县| 府谷县| 克拉玛依市| 山东省| 广水市| 渑池县| 保山市| 彭水| 常熟市| 株洲市| 海南省|