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"]];
}