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

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

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

? ? ? ? ? ? ? 缺點(diǎn): 需要用戶輸入用戶名 和密碼 ,相對(duì)于SSO 不安全

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

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

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

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

為了方便,我們給程序起個(gè)別名: ? ? ?微信應(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)的字符串).

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

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

? ? 就好比我們?cè)跒g覽器里輸入一個(gè) www.baidu.com 也能跳轉(zhuǎn)到百度一樣.是瀏覽器內(nèi)部替我們?cè)谇懊嬖黾恿?http:// ?或者 https://

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

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

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

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

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

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

對(duì)應(yīng)的ATS :

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


思路一的代碼

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

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

一個(gè)字改:

在 新聞XB 程序里 添加兩個(gè)按鈕,

增加兩個(gè)按鈕

//實(shí)現(xiàn)兩個(gè)按鈕的跳轉(zhuǎn)不同界面.但是怎么能實(shí)現(xiàn)跳轉(zhuǎn)不同界面呢? 首先要搞清楚這是誰(shuí)能 讓其跳轉(zhuǎn)到微信的不同的界面? 根據(jù)OC面向?qū)ο笏枷?誰(shuí)的事情誰(shuí)來干,當(dāng)然是微信跳轉(zhuǎn)到不同界面, 微信根據(jù)什么區(qū)分調(diào)到那個(gè)界面?需要外界(跳轉(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)到微信,請(qǐng)配置名稱和密碼");

? ?}

}

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

-(void)jumetoWeixinTimelineBtnClick{

//這里和上面一樣的.

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

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

? }

}

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


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

- (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;

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


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

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

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

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

[navpopToRootViewControllerAnimated:NO];

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

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

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

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

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

}

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

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

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

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

//我的github賬號(hào),可以下載源碼,看一看. ?

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市前域,隨后出現(xiàn)的幾起案子牧愁,更是在濱河造成了極大的恐慌吧秕,老刑警劉巖刮吧,帶你破解...
    沈念sama閱讀 216,470評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蝌焚,死亡現(xiàn)場(chǎng)離奇詭異泛源,居然都是意外死亡篙挽,警方通過查閱死者的電腦和手機(jī)冲秽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門舍咖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人锉桑,你說我怎么就攤上這事排霉。” “怎么了民轴?”我有些...
    開封第一講書人閱讀 162,577評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵郑诺,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我杉武,道長(zhǎng)辙诞,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,176評(píng)論 1 292
  • 正文 為了忘掉前任轻抱,我火速辦了婚禮飞涂,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘祈搜。我一直安慰自己较店,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,189評(píng)論 6 388
  • 文/花漫 我一把揭開白布容燕。 她就那樣靜靜地躺著梁呈,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蘸秘。 梳的紋絲不亂的頭發(fā)上官卡,一...
    開封第一講書人閱讀 51,155評(píng)論 1 299
  • 那天蝗茁,我揣著相機(jī)與錄音,去河邊找鬼寻咒。 笑死哮翘,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的毛秘。 我是一名探鬼主播饭寺,決...
    沈念sama閱讀 40,041評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼叫挟!你這毒婦竟也來了艰匙?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,903評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤抹恳,失蹤者是張志新(化名)和其女友劉穎员凝,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體适秩,經(jīng)...
    沈念sama閱讀 45,319評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡绊序,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,539評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了秽荞。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片骤公。...
    茶點(diǎn)故事閱讀 39,703評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖扬跋,靈堂內(nèi)的尸體忽然破棺而出阶捆,到底是詐尸還是另有隱情,我是刑警寧澤钦听,帶...
    沈念sama閱讀 35,417評(píng)論 5 343
  • 正文 年R本政府宣布洒试,位于F島的核電站,受9級(jí)特大地震影響朴上,放射性物質(zhì)發(fā)生泄漏垒棋。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,013評(píng)論 3 325
  • 文/蒙蒙 一痪宰、第九天 我趴在偏房一處隱蔽的房頂上張望叼架。 院中可真熱鬧,春花似錦衣撬、人聲如沸乖订。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)乍构。三九已至,卻和暖如春扛点,著一層夾襖步出監(jiān)牢的瞬間哥遮,已是汗流浹背岂丘。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留昔善,地道東北人元潘。 一個(gè)月前我還...
    沈念sama閱讀 47,711評(píng)論 2 368
  • 正文 我出身青樓畔乙,卻偏偏與公主長(zhǎng)得像君仆,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子牲距,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,601評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容