在iOS 10中的WhatsApp集成和openURL问题

我在我的iOS应用程序中集成了whastapp。 当我在iOS 10设备上testing它时 它崩溃了一个问题。

对未呈现的视图进行快照会产生空的快照。 确保您的视图在屏幕更新后的快照或快照之前至less已呈现一次。

NSURL *whatsappURL = [NSURL URLWithString:[NSString stringWithFormat: @"whatsapp://send?abid=%@&text=WelcomeToChatBought",[abidArray objectAtIndex:buttonclicked.tag-1000]]]; if ([[UIApplication sharedApplication] canOpenURL: whatsappURL]) { [[UIApplication sharedApplication] openURL: whatsappURL]; } 

可能是什么问题。 任何帮助,将不胜感激。

如果未设置,则需要在plist中设置LSApplicationQueriesSchemes

喜欢,

 <key>LSApplicationQueriesSchemes</key> <array> <string>urlscheme1</string> <string>urlscheme2</string> </array> 

另外,请注意openURL(_ :)在iOS 10中已被弃用。

新的UIApplication方法openURL:options:completionHandler:,它是asynchronous执行的,并在主队列上调用指定的完成处理程序(此方法replaceopenURL :)。

iOS 10新方法:

 - (void)openURL:(NSURL*)url options:(NSDictionary<NSString *, id> *)options completionHandler:(void (^ __nullable)(BOOL success))completion 

参数:

  • 要打开的URL

  • 一个选项字典(见下面的有效条目)。 使用空的字典与openURL:相同的行为openURL:

  • 完成处理程序在主队列中调用成功。 如果你对状态不感兴趣,可以为Nullable

喜欢,

 UIApplication *application = [UIApplication sharedApplication]; [application openURL:URL options:@{} completionHandler:nil]; 

例:

 NSString *scheme=[NSString stringWithFormat: @"whatsapp://send?abid=%@&text=WelcomeToChatBought",[abidArray objectAtIndex:buttonclicked.tag-1000]]]; UIApplication *application = [UIApplication sharedApplication]; NSURL *URL = [NSURL URLWithString:scheme]; if ([application respondsToSelector:@selector(openURL:options:completionHandler:)]) { [application openURL:URL options:@{} completionHandler:^(BOOL success) { NSLog(@"Open %@: %d",scheme,success); }]; } else { BOOL success = [application openURL:URL]; NSLog(@"Open %@: %d",scheme,success); } 

在这里阅读更多:

http://useyourloaf.com/blog/openurl-deprecated-in-ios10/

编辑:(基于iOS版本的代码)

 NSURL *URL = [NSURL URLWithString:strUrl]; if([[UIDevice currentDevice].systemVersion floatValue] >= 10.0){ if ([application respondsToSelector:@selector(openURL:options:completionHandler:)]) { [application openURL:URL options:@{} completionHandler:^(BOOL success) { NSLog(@"Open %@: %d",scheme,success); }]; } else { BOOL success = [application openURL:URL]; NSLog(@"Open %@: %d",scheme,success); } } else{ bool can = [[UIApplication sharedApplication] canOpenURL:URL]; if(can){ [[UIApplication sharedApplication] openURL:URL]; } }