iOS:URL Scheme(17-12-20更)

来源:http://www.cnblogs.com/leonlincq/archive/2017/12/19/8067013.html
-Advertisement-
Play Games

1、APP跳轉 2、APP功能跳轉 3、系統功能調用 1、APP跳轉 1、被打開方 設置APP的URL Types(設置位置在 “項目 - TARGETS - APP icon - info - (拉到最下)URL Types ”)。 URL Schemes:填上,你要給其他應用調用的URL地址(自 ...


1、APP跳轉

2、APP功能跳轉

3、系統功能跳轉

 

1、APP跳轉

  1、被打開方

    設置APP的URL Types(設置位置在 “項目 - TARGETS - APP icon - info - (拉到最下)URL Types ”)。

      URL Schemes:填上,你要給其他應用調用的URL地址(自定義)。並讓其他調用者知道。

               如果是第三方分享,需要向 第三方開發者平臺 申請(讓其定義)。

               所以,一個APP有多個URL Schemes,可能會和別的APP重名情況。

 

  2、打開方

    比如打開微信:

      1)、設置微信白名單

        info.plist

          LSApplicationQueriesSchemes :

            item : weixin

 

      2)、打開APP

    // 判斷是否能打開(有安裝)
    if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"weixin://"]]) {
        // 再打開
        [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"weixin://"] options:@{} completionHandler:nil];
    }else{
        // 提示:請先安裝 xx 客戶端。
    }

    

      同理,如果,在“1、”設置了URL Schemes,別人要打開你的APP,1)需要知道你APP的URL Schemes;2)對方設置了你APP白名單。

 

2、APP功能跳轉

  比如,打開微信掃描二維碼功能(17-12-20測試,還可用):

    // 判斷是否能打開(有安裝)
    if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"weixin://"]]) {
        // 再打開
        [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"weixin://scanqrcode"] options:@{} completionHandler:nil];
    }else{
        // 提示:請先安裝 xx 客戶端。
    }

  

  被打開方:

    1、要在 AppDelegate.m 實現代理方法,並對 url 合法性、對方APP Bundle ID(可選),進行判斷。

// 已廢棄(適配),NS_DEPRECATED_IOS(4_2, 9_0)
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
    NSLog(@"Wait Open Url = %@",url);
    NSLog(@"Form APP Bundle ID = %@",sourceApplication);

    return YES;
}

// 新方法,NS_AVAILABLE_IOS(9_0);
-(BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options{
    
}

 

    2、傳值:如類似分享到朋友圈,用支付寶APP登錄淘寶APP功能。

        可自定義 URL Schemes 傳值通信格式,如:cnblogs_leonlincq://login:username=leonlincq&password=leonlincq 。

 

    3、功能使用完,如需進行回調,同理,用“1、APP跳轉”。

      因為,被打開,只知道對方的Bundle ID,不知道對方的URL Schemes。

        1)、被打開方,可制定規則,如每次打開,可類似“2、傳值”把打開方的 URL Schemes 傳過來。

        2)、不過上面還是無法解決URL Schemes重名情況,所以這就是需要向微信申請開發者的原因。讓其給你設置不重名的 URL Schemes 。

 

    備註:

    1、曲線方法:如知道“微信朋友圈”URL Schemes,不用安裝SDK,不用向微信申請開發者。也可以直接打開調用。像上面打開“掃一掃”例子。

            不過,無法回調,用戶體驗差一點,且因為對方URL Schemes是私有的,隨時可能會更改。

  

      

3、系統功能跳轉

  1、通用,沒被蘋果不斷修改:

    1)、撥打電話:

      @"tel://xxxx-xxxxxxxx"(區號-座機號)

      @"tel://xxxxxxxxxxxx"(區號座機號)

      @"tel://13xxxxxxxxx"(手機電話)

    2)、發送短息

      @"sms://13xxxxxxxxx"(收方手機號)

    3)、用Safari打開頁面

      @"http://google.com"(直接給網址)

 

  2、不通用,不斷被蘋果修改:

    iOS 11 ,只能打開

      1、手機設置(@"App-Prefs:"),無法跳到子頁面。

      2、APP隱私設置(UIApplicationOpenSettingsURLString),如曾經用戶拒絕 蜂窩網路、定位 ,可直接跳到當頁,讓用戶再設置。

 

    iOS 10,能打開(是否iOS 10都能打開,還是只支持前面10.x的幾個版本,沒去試)

      通過(@"App-Prefs:root=General&path=About" )格式打開。

      @"App-Prefs:root=xxx&path=xxx"這類url,網上有很多,如要做適配低版本,提高用戶體驗,再去網上搜,這裡不做記錄。

      畢竟,是被淘汰掉的,隨著新機iOS版本越高,就不需要再適配了。

 

    再早(只做瞭解)

      通過(@"prefs:root=General&path=About")格式打開

 

  3、url打開方法:

    比如,下麵寫法,

      iOS 11,只能跳到 系統設置 頁面。

      iOS 10,可以跳到 通用 - 關於本機 頁面

    NSURL *url = [NSURL URLWithString:@"App-Prefs:root=General&path=About"];
    
    if ([[UIApplication sharedApplication] canOpenURL:url]){
        
        if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 10.0) {
            // iOS 10後的方法
            [[UIApplication sharedApplication] openURL:url options:@{}completionHandler:nil];
        }else {
            // iOS 10前的方法
            [[UIApplication sharedApplication] openURL:url];
        }
    }

  


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • bounds/frame/center/transform的解釋以及相對關係 ...
  • 代碼已經分享至github:https://github.com/YanYoJun/NavigationDemo 轉載請註明原文鏈接:http://www.cnblogs.com/yanyojun/p/8076015.html 一、直接看佈局 額,其實就這麼點東西,其他也沒有什麼,在DrawerLa ...
  • Request經常都要攜帶Cookie,上面說過request創建時可以通過header設置參數,Cookie也是參數之一。就像下麵這樣: 然後可以從返回的response里得到新的Cookie,你可能得想辦法把Cookie保存起來。但是OkHttp可以不用我們管理Cookie,自動攜帶,保存和更新 ...
  • Try this, it fixed it for me. Open Terminal and run: cd ~ mv .itmstransporter/ .old_itmstransporter/ "/Applications/Xcode.app/Contents/Applications/Ap... ...
  • 引言 Service服務是Android四大組件之一,在Android中有著舉足重輕的作用。Service服務是工作的UI線程中,當你的應用需要下載一個文件或者播放音樂等長期處於後臺工作而有沒有UI界面的時候,你肯定要用到Service+Thread來實現。因此你需要自己在Service服務裡面實現 ...
  • 1、ADB是什麼? ADB,即Android Debug Bridge,它是Android提供的一個通用的調試工具。藉助這個工具可以很好的調試開發程式。它是客戶端/服務端架構的命令工具,主要分三個部分: (1)adb客戶端:運行在我們的開發機器上 (2)adb 伺服器:在開發機器後臺運行的進程 (3 ...
  • 框架依舊在快速更新著:在重構、簡化代碼,統一標準的過程中。中間也遇到各種坑,不過好在一步一腳印的解決了。雖然還有些功能還在思考,不過教程,還是得補上:這篇就寫寫StartController,實現的代碼雖少,但原理很精彩!!! ...
  • private String isRoot(){ String bool = "Root:false"; try{ if ((!new File("/system/bin/su").exists()) && (!new File("/system/xbin/su").exists())){ bool ...
一周排行
    -Advertisement-
    Play Games
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...