A. iOS 喚起APP
在iOS 9之前,我們從外部啟動App都是通過URL scheme的方式進行跳轉,開發者通過配置info.plist文件中的 URL Types 可以輕松實現跳轉,而且現在蘋果還對這種跳轉的方式加了一個提示框:「是否打開XXX」,跳轉過程也顯得不流暢。
每一個項目裡面都會有一個info.plist配置文件。找到info.plist,右鍵選擇Add Row,然後選擇URL types。添加URL Schemes
既然已經配置好URL Schemes,那麼我們可以來款速測試一下,我們設置的URL Schemes是否有效。打開Safari,在地址欄里輸入:iOSDevTip:// 即可喚起app
打開注冊iOSDevTip的APP格式為: URL Scheme://URL identifier,直接調用URL Scheme也可打開程序, URL identifier是可選的。
而UniversalLink跳轉方式可以實現無縫跳轉,當瀏覽器識別到預先指定好的URL,就可以直接喚醒App,不需要在瀏覽器中打開侍閉再去點擊其他按鈕。只支持iOS 9以上
1.1 蘋果開發者賬號開啟Associated Domains服務
1.2 在xcode工程的Capabilities -> Associated Domains中添加跳轉域名彎談拿
當我們的App在設備上第一次運行時,如果支持Associated Domains功埋搭能,那麼iOS會自動去GET定義的Domain下的apple-app-site-association文件。
需要留意iOS會先請求 https://domain.com/.well-known/apple-app-site-association
如果此文件請求不到,再去請求 https://domain.com/apple-app-site-association 。 所以如果想要避免伺服器接收過多GET請求,可以直接把apple-app-site-association放在./well-known/目錄下。
出現在iMessage的死亡代碼又名「EffectivePower」,iMessage用戶在受到一串阿拉伯字元的時候就非常有可能崩潰,因為這個代碼可以使得iPhone內存負荷超載,並引起崩潰。
蘋果在更新文件中表示:لُلُصّبُلُلصّبُررًॣॣhॣॣ冗
閃退,多指在移動設備(如iOS、Android設備)中,在打開應用程序時出現的突然退出中斷的情況(類似於Windows的應用程序崩潰)。多表現為:應用程序畫面一閃而過,隨即退回到主屏幕。應用程序出現閃退,可能是自身漏洞,也有可能是設備問題。下面,就來看看蘋果手機閃退修復教程。
方法一:appleID不同導致閃退的解決辦法
1、判斷安裝的app是哪個賬戶下載的。(在「iphone閃退修復工具」的應用程序列表中可以查看)
2、使用「iphone閃退修復工具」的「修復閃退」功能進行修復處理。點擊「iphone閃退修復工具」左側「站點資源」的正版應用,然後選擇右側出現的「修復閃退」按鈕。
3、點擊修復設備閃退功能依然出現閃退及輸入AppleID問題,請檢查是PP助手(PC)版是否提示修復成功。
4、這種方法的原理是排除app本身bug,唯一原因就是appstor帳號授權失效了,這台iphone5沒那個閃退軟體的帳號授權是打開不了的,一打開就閃退,點閃退修復就等於用的帳號授權一下設備,就能繼續用了。
方法二:因iphone越獄後未授權導致閃退的
1、如果IOS設備剛越獄,重啟試試。
2、在IOS的appstore下載一個免費的軟體,這樣可以輕松解決授權問題!閃退的問題也就不存在了。在此友情提醒大家,蘋果越獄有風險,因為有一些插件的影響,可能會導致一些應用程序不兼容,從而導致不能正常打開的情況。
注意事項
方法一如果修復後還是出現閃退問題。
方法二:把原有的app軟體刪除,然後在appstore中重新安裝app軟體。刪除iphone應用軟體:在主屏上按住要刪除的應用程序圖標保持3秒以上,然後圖標會出現抖動,點擊要刪除應用程序圖標上左上角的「X」即可刪除應用。
C. 如何實現通過URL超鏈接打開IOS的APP
最近要在IOS中實現一個應用啟動另外一個應用的功能,搜了一些資料,使用UIApplication的openURL:的方法就能實現,現在整理和大家分享一下!
注冊自定義URL協議
首先被啟動的應用需要向iPhone注冊一個自定義URL協議。這是在你的項目文件夾的info.plist文件進行的(就是你改變應用程序圖標的同一個文件)。
Step1. 右鍵,選擇「Add Row」Step2. Key值選擇「URL types」
Step3. 打開「Item 0″,然後為該key增加一個URL identifier。可以是任何值,但建議用「反域名」(例如 「com.fcplayer.testHello」)。
Step4. 在「Item 0」下再加一行。
Step5. 選擇「URL Schemes」 作為Key。
Step6. 輸入你的URL協議名 (例如「testHello://」 應寫做「testHello」)。如果有必要,你可以在這里加入多個協議。
操作截圖如下:
訪問自定義URL
在主應用程序中通過訪問自定義URL啟動另外一個應用:
[csharp] view plain
NSURL * myURL_APP_A = [NSURL URLWithString:@"testHello://"];
if ([[UIApplication sharedApplication] canOpenURL:myURL_APP_A]) {
NSLog(@"canOpenURL");
[[UIApplication sharedApplication] openURL:myURL_APP_A];
}
自定義處理URL
有些時候我們除了啟動還需向另外一個應用發送參數,這是也可以通過自定義的URL來實現,如:
testHello://
testHello://com.fcplayer.testHello
testHello://config=1&abar=2
這時我們在被啟動應用中就必須進行自定義處理,在delegate中實現該消息(Cocos2d加在AppDelegate中),例如:
- (BOOL)application:(UIApplication *)applicationhandleOpenURL:(NSURL*)url { // Do something withthe url here }
通常,我們會從參數中解析出URL以便在視圖中顯示或者存儲到UserPreference。下面的例子把URL存儲為User Preference的url變數中或者列印出來:
[csharp] view plain
-(BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
{
if (!url) { return NO; }
NSString *URLString = [url absoluteString];
NSLog(@"%@",URLString);
//[[NSUserDefaults standardUserDefaults] setObject:URLString forKey:@"url"];
//[[NSUserDefaults standardUserDefaults] synchronize];
return YES;
}
其他
基本上至此我們就已經實現一個應用程序中啟動另外一個應用的功能,但是為了是我們的代碼更加強壯,我在網上又找了一段訪問代碼,如下:
[csharp] view plain
// 檢查用戶是否配置了AppId
// 有沒有準確配置Info的CFBundleURLSchemes欄位
// 是不是可以正確打開
if (!kAppId) {
UIAlertView *alertView = [[UIAlertView alloc]
initWithTitle:@"Setup Error"
message:@"Missing app ID. You cannot run the app until you provide this in the code."
delegate:self
cancelButtonTitle:@"OK"
otherButtonTitles:nil,
nil];
[alertView show];
[alertView release];
} else {
// Now check that the URL scheme fb[app_id]://authorize is in the .plist and can
// be opened, doing a simple check without local app id factored in here
NSString *url = [NSString stringWithFormat:@"fb%@://authorize",kAppId];
BOOL bSchemeInPlist = NO; // find out if the sceme is in the plist file.
NSArray* aBundleURLTypes = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleURLTypes"];
if ([aBundleURLTypes isKindOfClass:[NSArray class]] &&
([aBundleURLTypes count] > 0)) {
NSDictionary* aBundleURLTypes0 = [aBundleURLTypes objectAtIndex:0];
if ([aBundleURLTypes0 isKindOfClass:[NSDictionary class]]) {
NSArray* aBundleURLSchemes = [aBundleURLTypes0 objectForKey:@"CFBundleURLSchemes"];
if ([aBundleURLSchemes isKindOfClass:[NSArray class]] &&
([aBundleURLSchemes count] > 0)) {
NSString *scheme = [aBundleURLSchemes objectAtIndex:0];
if ([scheme isKindOfClass:[NSString class]] &&
[url hasPrefix:scheme]) {
bSchemeInPlist = YES;
}
}
}
}
// Check if the authorization callback will work
BOOL bCanOpenUrl = [[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString: url]];
if (!bSchemeInPlist || !bCanOpenUrl) {
UIAlertView *alertView = [[UIAlertView alloc]
initWithTitle:@"Setup Error"
message:@"Invalid or missing URL scheme. You cannot run the app until you set up a valid URL scheme in your .plist."
delegate:self
cancelButtonTitle:@"OK"
otherButtonTitles:nil,
nil];
[alertView show];
[alertView release];
}
}
另外還有一段啟動其他應用的代碼:
[csharp] view plain
-(IBAction)openMaps {//打開地圖
// Where is Apple on the map anyway?
NSString* addressText = @」1 Infinite Loop, Cupertino, CA 95014″;
// URL encode the spaces
addressText = [addressText : NSASCIIStringEncoding];
NSString* urlText = [NSString stringWithFormat:@"http://maps.google.com/maps?q=%@", addressText];
// lets throw this text on the log so we can view the url in the event we have an issue
NSLog(urlText);
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:urlText]];
}
-(IBAction)openEmail {//打開mail
// Fire off an email to apple support
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"mailto://[email protected]"]];
}
-(IBAction)openPhone {//撥打電話
// Call Google 411
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"tel://8004664411"]];
}
-(IBAction)openSms {//打開簡訊
// Text to Google SMS
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"sms://466453"]];
}
-(IBAction)openBrowser {//打開瀏覽器
// Lanuch any iPhone developers fav site
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://itunesconnect.apple.com"]];
}