国产探花免费观看_亚洲丰满少妇自慰呻吟_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端的頁面}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 阜新市| 江华| 桓台县| 宁武县| 叙永县| 民丰县| 海丰县| 洪雅县| 武邑县| 吉木萨尔县| 平山县| 东辽县| 长宁县| 昭平县| 遵义市| 南漳县| 江阴市| 广河县| 兰坪| 米脂县| 罗平县| 乳山市| 安达市| 蕲春县| 禄丰县| 哈尔滨市| 宝坻区| 巴彦县| 盐边县| 藁城市| 酉阳| 都安| 黑水县| 乐安县| 贞丰县| 农安县| 日照市| 洪江市| 赤水市| 凤山县| 成武县|