在SDK中打開其餘接入應用的解決方案程序員
一直以來,在iOS的開發中,在程序中打開另一個應用是不容許。後來有正義之士用class-dump在私有API中找到了這樣的功能。那就是使用UIApplication的launchApplicationWithIdentifier:suspended:來打開。瀏覽器
使用的辦法以下:app
NSString *identifier = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleIdentifier"];ide [[UIApplication sharedApplication] launchApplicationWithIdentifier:identifier suspended:NO];oop |
畢竟是私有API不是一個好的辦法,至少你永遠都得不到App Store的承認。網站
在某些時候是其實咱們可能仍是須要這樣的功能。做爲一個SDK,其實仍是有一種比較好的解決方案的。那就是使用UIApplication的openURL:的方法。this
咱們先來了解一下openURL和實現的方案。OpenURL實際上是有很豐富的功能,除了簡單的調用safari打開網站,還可有google地圖搜索,Mail,撥打電話,發送短信,打開AppStore。google
-(IBAction)openMaps {//打開地圖 |
那怎樣來製做從一個應用打開其餘應用,這其實很簡單,打開info.plist,添加一項URL types,展開URL types,再展開Item1,將Item1下的URL identifier修改成URL Scheme,展開URL Scheme,將Item1的內容修改成myapp其餘程序可經過myapp://訪問此自定義URL。spa
其實就是相似下面的樣式。
這樣就只要open這個應用的自定義url,系統就能夠幫咱們找到並打開這個程序。
NSURL *url = [NSURL URLWithString:@" myapp:"]; [[UIApplication sharedApplication] openURL:url]; |
做爲SDK比普通應用的優點在於,每個接入的應用都有一個AppId用於區分,咱們就能夠充分利用這個AppId來製做。
咱們能夠要求第三方開發者須要在他們Info.Plist中配置這樣的字段,這樣咱們就能夠在咱們的SDK界面中打開對應AppId的應用,固然,這須要設備中真的有安裝這個程序。
例如某應用分配AppId爲111122223333,咱們要求其再Info.plist定義URL Schemes爲NDSDK111122223333,這樣,咱們在內部代碼就能夠準確識別是否有這樣的程序。
更有甚者,咱們能夠經過canOpenURL這個方法來判斷這臺設備是否安裝了這個應用,若是能夠打開,返回YES,那應該是有安裝這樣的程序,無論是ipa仍是Pxl的程序,應該都是沒有問題的。
若是咱們真的選擇這樣子作,那就須要在文檔中說明清楚。可是須要注意的是,也許做爲程序員,可能不是很喜歡看文檔,也許你費盡心思寫的文檔他並無看到。這時咱們應該來一點強硬的手段,因而有了下面這段代碼的功能。
1:檢查用戶是否配置了AppId
2:有沒有準確配置Info的CFBundleURLSchemes字段
3:是否是能夠正確打開。