如何在 iOS 8 中直接启动活动而不显示共享表?

Posted

技术标签:

【中文标题】如何在 iOS 8 中直接启动活动而不显示共享表?【英文标题】:How to launch activity directly without showing share sheet in iOS 8? 【发布时间】:2015-09-19 11:38:56 【问题描述】:

目前,我的应用可以选择使用 SLComposeViewController 在 Facebook 和 Twitter 上分享。

SLComposeViewController *fbComposeViewController = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeFacebook];
[fbComposeViewController setInitialText:text_short];
[fbComposeViewController addURL:url];
[self.navigationController presentViewController:fbComposeViewController
                                            animated:YES
                                          completion:^
                                              NSLog(@"fb activity completed");
                                          ];

我可以使用

分享到其他网站,例如 Gmail、Whatsapp、Message 和 Mail
UIActivityViewController *controller = [[UIActivityViewController alloc] initWithActivityItems:@[text, url]
                                                                             applicationActivities:nil];

controller.excludedActivityTypes = @[UIActivityTypePostToWeibo,
                                         UIActivityTypePrint,
                                         UIActivityTypeCopyToPasteboard,
                                         UIActivityTypeAssignToContact,
                                         UIActivityTypeSaveToCameraRoll,
                                         UIActivityTypeAddToReadingList,
                                         UIActivityTypePostToFlickr,
                                         UIActivityTypePostToVimeo,
                                         UIActivityTypePostToTencentWeibo,
                                         UIActivityTypeAirDrop,
                                         UIActivityTypePostToFacebook,
                                         UIActivityTypePostToTwitter
                                         ];
[self presentViewController:controller animated:YES completion:nil];

但是,这会启动一个共享表,用户必须在其中选择他必须启动的应用程序。有没有办法通过指定活动名称直接启动共享对话框?例如,Uber 中的 Whatsapp、电子邮件和文本邀请。

【问题讨论】:

我部分理解您的问题,但您不需要在活动控制器中显示 facebook 和 twiter UIactivitycontroller 提供共享事件,无论您的应用程序安装在应用程序中,如果您想共享特定应用程序使用自定义视图,否则使用 CanopenURL 方法 我不希望用户再次选择要启动的应用程序。所以一旦他点击说分享到whatsapp,我想分享 你能分享一个canOpenURL的例子吗?? 但用户必须安装应用程序并且用户必须经过身份验证。您还应该有一个备份计划,以防 canOpenURL 方法出现问题 【参考方案1】:

例如,如果你想分享whatsapp

// this is your share content message
NSString * msg = @"ApplNSString YOUR MSG";


NSString * urlWhats = [NSString stringWithFormat:@"whatsapp://send?text=%@",msg];
NSURL * whatsappURL = [NSURL URLWithString:[urlWhats stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];

// this is identify if whatsapp is already install your device , if yes it open the whatsapp and share the content 
if ([[UIApplication sharedApplication] canOpenURL: whatsappURL]) 
[[UIApplication sharedApplication] openURL: whatsappURL];
 else 

// it shows the alert for no application found
UIAlertView * alert = [[UIAlertView alloc] initWithTitle:@"WhatsApp not installed." message:@"Your device has no WhatsApp installed." delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alert show];

其他reference

【讨论】:

例如我在这里添加的目的,如果你需要什么我修改我的答案 谢谢!那行得通。看起来我应该能够以类似的方式启动电子邮件和文本应用程序。只是一个补充,您需要对您发送的消息进行 urlencode。你知道我在哪里可以找到应用程序网址的文档吗?尤其是电子邮件和短信 @Ajax - 在第三方应用程序/else 中导航到外部应用程序,您可以像 whatsapp:// 一样获得回调 URL,如果您想打开本机函数,使用委托方法就可以了 @Ajax - 你需要任何关于此的其他信息吗

以上是关于如何在 iOS 8 中直接启动活动而不显示共享表?的主要内容,如果未能解决你的问题,请参考以下文章

显示 iOS 共享表后未调用 viewWillDisappear

如何在android Q os中从后台服务启动活动,而不从开发人员选项的设置中单击“允许后台活动启动”?

如何使用Swift在iOS 8上显示带有文本的活动指示器?

直接在推送 iOS 上启动 App

如何使复选框确定是否应显示活动

如何在一个活动中添加多个 onActivityResult() 而不去其他活动? [复制]