IOS中 SSO授權(quán)進(jìn)行應(yīng)用之間跳轉(zhuǎn)(URL Schemes)

OAuth 授權(quán) ?和 SSO 授權(quán)區(qū)別:

OAuth 授權(quán) 是彈出一個 網(wǎng)頁. ? ? ? ? ?

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

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

SSO 授權(quán): (產(chǎn)品經(jīng)理最愛,用戶體驗好) ?

? ? ? ? ? ? ? 缺點: 需要用戶安裝了對應(yīng)的APP,并且需要提前在對應(yīng)的APP端是登錄狀態(tài)

? ? ? ? ? ? ?優(yōu)點: 相對于OAuth授權(quán)安全,不需要在配置賬號 和 密碼.更加快捷. 深受廣大產(chǎn)品經(jīng)理喜歡,因為用戶體驗好.(當(dāng)沒有對應(yīng)客戶端,就會調(diào)用OAuth授權(quán),如果沒有設(shè)置OAuth授權(quán).就會授權(quán)失敗,分享失敗)

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

1> 現(xiàn)在新聞應(yīng)用程序 XB 想要跳轉(zhuǎn)到 WA 應(yīng)用程序里,進(jìn)行分享

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

? ? ? ? 這是一個協(xié)議:應(yīng)用之間的跳轉(zhuǎn)是通過協(xié)議來完成的. ?一般的有: http:// ? ?https:// ? ?ftp:// ?sms:// ? tel:// ?等等. ?

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

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

? ? ? 我們需要在 XB 程序里 進(jìn)行跳轉(zhuǎn),跳轉(zhuǎn)是應(yīng)用之間的跳轉(zhuǎn),我們應(yīng)改使用 應(yīng)用程序 單例對象,進(jìn)行操作對應(yīng)的事情.

在新聞程序 XB,設(shè)置:

//跳轉(zhuǎn)APP應(yīng)用,是需要遵守協(xié)議的.協(xié)議頭,是根據(jù)要跳轉(zhuǎn)到的應(yīng)用來寫的.

//跳轉(zhuǎn)APP應(yīng)用是應(yīng)用級別的跳轉(zhuǎn),需要用UIApplication來跳轉(zhuǎn)

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

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

對應(yīng)的ATS :

IOS 9.0 之后 對應(yīng)的 ATS 安全代碼


思路一的代碼

注意: 在模擬測試的時候,需要同時打開 兩個應(yīng)用才能進(jìn)行測試.現(xiàn)象我們同時打開兩個應(yīng)用.在XB應(yīng)用點擊就能跳轉(zhuǎn)到WA了.

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

一個字改:

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

增加兩個按鈕

//實現(xiàn)兩個按鈕的跳轉(zhuǎn)不同界面.但是怎么能實現(xiàn)跳轉(zhuǎn)不同界面呢? 首先要搞清楚這是誰能 讓其跳轉(zhuǎn)到微信的不同的界面? 根據(jù)OC面向?qū)ο笏枷?誰的事情誰來干,當(dāng)然是微信跳轉(zhuǎn)到不同界面, 微信根據(jù)什么區(qū)分調(diào)到那個界面?需要外界(跳轉(zhuǎn)到微信的app)來傳遞參數(shù),然后根據(jù)傳遞的參數(shù)來跳轉(zhuǎn)不同的界面

//---->我們需要借助協(xié)議URL Schemes來傳遞參數(shù)

//跳到 微信 session

-(void)jumetoWeixinSessionBtnClick{

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

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

? ?}

}

//跳轉(zhuǎn)到微信 timeline

-(void)jumetoWeixinTimelineBtnClick{

//這里和上面一樣的.

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

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

? }

}

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


然后我們在微信的 APPDelegate.m設(shè)置響應(yīng)的代碼來接受從 新聞XB App跳轉(zhuǎn)過來時候傳遞的參數(shù),然后我們根據(jù)參數(shù)來判斷到底跳到到那個控制器

- (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.判斷跳轉(zhuǎn)到那個界面


//我現(xiàn)在就可以進(jìn)行跳轉(zhuǎn)到微信不同的界面 session 或者 是 timeline了

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

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

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

[navpopToRootViewControllerAnimated:NO];

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

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

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

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

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

}

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

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

//跳轉(zhuǎn)到timeline不變

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

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

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容