IOS中 SSO授權進行應用之間跳轉(URL Schemes)

OAuth 授權 ?和 SSO 授權區別:

OAuth 授權 是彈出一個 網頁. ? ? ? ? ?

? ? ? ? ? ? ? 缺點: 需要用戶輸入用戶名 和密碼 ,相對于SSO 不安全

? ? ? ? ? ? ?優點:(例如要分享到新浪 )用戶不需要按鈕新浪客戶端,只要有網頁就行.

SSO 授權: (產品經理最愛,用戶體驗好) ?

? ? ? ? ? ? ? 缺點: 需要用戶安裝了對應的APP,并且需要提前在對應的APP端是登錄狀態

? ? ? ? ? ? ?優點: 相對于OAuth授權安全,不需要在配置賬號 和 密碼.更加快捷. 深受廣大產品經理喜歡,因為用戶體驗好.(當沒有對應客戶端,就會調用OAuth授權,如果沒有設置OAuth授權.就會授權失敗,分享失敗)

為了方便,我們給程序起個別名: ? ? ?微信應用程序 叫做 WA. ? ? ?新聞應用程序 ?叫做 XB

1> 現在新聞應用程序 XB 想要跳轉到 WA 應用程序里,進行分享

? ? ? 我們需要在 WA 的 “工程”-> “info” ->”URL Types” -> URL Schemes :“weixin” ? (或者其他,讓別人跳轉的字符串).

? ? ? ? 這是一個協議:應用之間的跳轉是通過協議來完成的. ?一般的有: http:// ? ?https:// ? ?ftp:// ?sms:// ? tel:// ?等等. ?

? ? ?這里其實也是一個協議,但是我們在xcode里.xcode系統會我們設置了后面的:// ,我們只需要寫一個 自定義的字符串就行. ? ? ?

? ? 就好比我們在瀏覽器里輸入一個 www.baidu.com 也能跳轉到百度一樣.是瀏覽器內部替我們在前面增加了 http:// ?或者 https://

? ? ? 我們需要在 XB 程序里 進行跳轉,跳轉是應用之間的跳轉,我們應改使用 應用程序 單例對象,進行操作對應的事情.

在新聞程序 XB,設置:

//跳轉APP應用,是需要遵守協議的.協議頭,是根據要跳轉到的應用來寫的.

//跳轉APP應用是應用級別的跳轉,需要用UIApplication來跳轉

//正常的邏輯判斷(方法一)

//蘋果在 ios9 的時候,對app安全又做了進一步的提升,將http:// 協議,改為 https://協議,需要我們配置plist文件.ATS.你可以打開 info.plist文件,進行添加 key 和 Value ,但是我一般都是 打開 info.plist ->右鍵 Open as ->Source Code -> 將下面代碼塊 賦值到 xml里進行.

對應的ATS :

IOS 9.0 之后 對應的 ATS 安全代碼


思路一的代碼

注意: 在模擬測試的時候,需要同時打開 兩個應用才能進行測試.現象我們同時打開兩個應用.在XB應用點擊就能跳轉到WA了.

2 > 但是現在新的需求出現了.我們需要跳到 (分享到) 微信WA 不同的界面.例如 朋友列表session 或者說是 朋友圈 timeline

一個字改:

在 新聞XB 程序里 添加兩個按鈕,

增加兩個按鈕

//實現兩個按鈕的跳轉不同界面.但是怎么能實現跳轉不同界面呢? 首先要搞清楚這是誰能 讓其跳轉到微信的不同的界面? 根據OC面向對象思想,誰的事情誰來干,當然是微信跳轉到不同界面, 微信根據什么區分調到那個界面?需要外界(跳轉到微信的app)來傳遞參數,然后根據傳遞的參數來跳轉不同的界面

//---->我們需要借助協議URL Schemes來傳遞參數

//跳到 微信 session

-(void)jumetoWeixinSessionBtnClick{

? ? ? if(![[UIApplicationsharedApplication]openURL:[NSURLURLWithString:@"weixin://session? abcdefg"]]){

? ? ?NSLog(@"不能跳轉到微信,請配置名稱和密碼");

? ?}

}

//跳轉到微信 timeline

-(void)jumetoWeixinTimelineBtnClick{

//這里和上面一樣的.

if(![[UIApplicationsharedApplication]openURL:[NSURLURLWithString:@"weixin://timeline?mmmmmmm"]]){

NSLog(@"請配置密碼等信息,不能跳轉到timeline界面");

? }

}

//在微信 WA 程序里.我們設置借助導航控制器,設置兩個子控制器.這里用 storyboard嵌入,這里就不贅述了.大致效果如下:上面是seeeion.下面是timeline,設置了跳轉不同的控制器的Segue 標識為session 和 timeline 進行跳轉時候的區分.


然后我們在微信的 APPDelegate.m設置響應的代碼來接受從 新聞XB App跳轉過來時候傳遞的參數,然后我們根據參數來判斷到底跳到到那個控制器

- (BOOL)application:(UIApplication*)application handleOpenURL:(NSURL*)urlNS_DEPRECATED_IOS(2_0,9_0,"Please use application:openURL:options:")__TVOS_PROHIBITED;

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(nullableNSString *)sourceApplication annotation:(id)annotationNS_DEPRECATED_IOS(4_2,9_0,"Please use application:openURL:options:")__TVOS_PROHIBITED;

//上面兩個方法過期了所以我們用這個方法.這里接受從外界傳遞的URL Schemes.判斷跳轉到那個界面


//我現在就可以進行跳轉到微信不同的界面 session 或者 是 timeline了

//但是出現了BUG;在新聞程序如果多次跳轉 微信.比如說跳轉了5次,那么在微信WA在返回的時候,就會連續返回5次之后,才能回到微信主界面

//解決BUG:因為 是利用導航控制器進行跳轉的,所以就是一直 進棧 push,沒有出棧pop. 所以我們的解決方法,就是在 跳轉到微信對應的界面在跳轉到子控制器session或者timeline之前,先回到微信APP的主界面

我們修改 微信WA 的方法,增加下面的代碼

[navpopToRootViewControllerAnimated:NO];

3 > 新的需要: 我們需要在微信進行分享后 直接跳回 對應原來的App/例如本例中的 新聞XB程序

//思路分析:直接跳回怎么跳回?也能根據 新聞XB 跳轉到 微信 WA 一樣.我們直接在 微信WA里填寫

在 微信WA 里添加一個按鈕,在按鈕的點擊方法里這樣寫: (在跳轉過來的APP 設置 URL Schemes 為:xinwei)

if(![[UIApplicationsharedApplication]openURL:[NSURLURLWithString:@“xinwen”//"]]){

NSLog(@"不能回跳到原來的app,哪里出錯了?檢查一下吧");

}

? ? ? ?//這樣是能跳回去,但是, app這么多,在微信段總不能對每一個app都寫一個 scheme吧.這顯然也不顯示.那么我們該怎么辦?既然其他應用跳轉到 微信WA 是根據 scheme 的,那么能不能規定,讓其根據一定的規范寫法,把跳轉回去的參數也寫進 scheme里傳遞過來. 那么我們在從 新聞XB app跳轉到 微信WA 的時候,就不能寫死,需要我們從 bundl額里去取.

//那么我們修改 新聞XB 里代碼

//跳轉到timeline不變

//在微信 WA APP里寫直接跳會到原來 APP,本例中指 新聞XB 程序的設置.我們這里只寫一個跳回去的方法

//我的github賬號,可以下載源碼,看一看. ?

https://github.com/HHQBOOK/-SSO-/tree/master

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,106評論 6 542
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,441評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,211評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,736評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,475評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,834評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,829評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,009評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,559評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,306評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,516評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,038評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,728評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,132評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,443評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,249評論 3 399
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,484評論 2 379

推薦閱讀更多精彩內容