【问题标题】:share videos to whats app without showing ActionSheet在不显示 ActionSheet 的情况下将视频分享到 whatsapp
【发布时间】:2016-07-28 03:09:57
【问题描述】:

我需要将视频从我的应用程序分享到 WhatsApp。 我目前可以使用UIActivityViewController 来做到这一点,但用户体验不好。

(用户按下“发送到 WhatsApp”按钮,然后必须在 UIActivityViewController 显示的操作表中选择 WhatsApp)。

我知道可以打开 WhatsApp 应用程序并分享视频。 例如,应用程序TuneMoji 做得很好:

  • 用户按下“发送到 WhatsApp”
  • WhatsApp 应用程序打开,询问目标用户。

我也想做同样的事情。

请不要告诉我查看 https://www.whatsapp.com/faq/en/iphone/23559013 或使用 UIDocumentInteractionController :我想避免向用户显示 ActionSheet。

【问题讨论】:

  • 粗鲁和否决所有答案无助于获得更多帮助。
  • 我对它们投了反对票,只是因为它们不符合问题的要求(有些不共享视频,有些显示操作表)。如果其他人来此线程寻找问题的答案,他会在尝试所有未投票的答案时感到失望。这不是粗鲁的:)
  • 很可能你应该在 WhatsApp 支持中问这个问题,他们是否为像 whatsapp://send?text=Hello World! 这样的媒体提供任何支持,因为所有当前的解决方案几乎都会导致 UIDocumentInteractionController`
  • @Drico 你找到解决办法了吗?
  • @Drico TuneMoji 可能不是共享视频而是被视为图像文件的 GIF 文件。

标签: ios share whatsapp


【解决方案1】:

在按钮操作上试试这个:

func sendVideo(videoName: String, senderView: UIView) {

       if UIApplication.sharedApplication().canOpenURL(NSURL(string: "whatsapp://app")!) {
        let savePath: String = NSBundle.mainBundle().pathForResource(videoName, ofType: "mov")!
       let documentInteractionController = UIDocumentInteractionController(URL: NSURL.fileURLWithPath(savePath))
        documentInteractionController.UTI = "net.whatsapp.movie"
        documentInteractionController.delegate = self
        documentInteractionController.presentOpenInMenuFromRect(CGRectMake(0, 0, 0, 0), inView: senderView, animated: true)
    }
    else {

        let alertController = UIAlertController(title: "Error occured", message: "WhatsApp is not installed on your device.", preferredStyle: .Alert)
        let defaultAction = UIAlertAction(title: "OK", style: .Default, handler: nil)
        alertController.addAction(defaultAction)
        presentViewController(alertController, animated: true, completion: nil)
    }
}

更多信息可以查看参考:https://www.whatsapp.com/faq/en/iphone/23559013

确保在您的应用程序中包含 WhatsApp URL 方案 如果要查询,则在 LSApplicationQueriesSchemes 键下的 Info.plist 使用“canOpenURL”在用户的 iPhone 上显示 WhatsApp

【讨论】:

  • 这段代码仍然显示一个操作表,这是我想要避免的。
【解决方案2】:

你可以这样打开whatsapp。

NSURL *urlOfWhatsApp = [NSURL URLWithString:@"whatsapp://"];

if ([[UIApplication sharedApplication] canOpenURL:urlOfWhatsApp]) { //check app can open whatsapp or not.

    [[UIApplication sharedApplication] openURL:urlOfWhatsApp];

} else {
    NSLog(@"You device do not have whatsapp.");
}

【讨论】:

  • 我想在不展示 ActionSheet 的情况下分享视频。您的解决方案与此用例无关。
  • 您是否尝试过此代码。此代码不显示操作表...您只需在按钮的操作方法中添加此代码...(如 sendToWhatsAppButtonTapped),您需要将视频传递给 whatsapp。
  • 您的代码将打开 WhatsApp,但不会复制视频。
  • 你有问题说你已经通过UIActivityViewController完成了,但是不打开UIActivityViewController你就不知道,所以我举了一个如何打开whatsapp的例子。
  • 好的,更准确地说,我想创建一个按钮来打开应用程序并分享视频,而不向用户显示 ActionSheet。
【解决方案3】:

您可以像这样使用 WhatsApp URL Scheme 发送短信:

NSURL *whatsappURL = [NSURL URLWithString:@"whatsapp://send?text=Hello%2C%20World!"];
if ([[UIApplication sharedApplication] canOpenURL: whatsappURL]) {
    [[UIApplication sharedApplication] openURL: whatsappURL];
}

这将打开应用程序并要求发送目的地Hello World!

要发送图像或视频,您可以使用您已经注意到的UIActivityViewController,或使用UIDocumentInteractionController,这可能更接近您的要求:

_documentController = [UIDocumentInteractionController interactionControllerWithURL:_imageFileURL];
_documentController.delegate = self;
_documentController.UTI = @"net.whatsapp.image";
[_documentController presentOpenInMenuFromRect:CGRectZero inView:self.view animated:YES];

要在应用程序列表中仅显示 whatsapp,请使用私有 whatsapp 文件扩展名或 UTI:

或者,如果您只想在应用程序中显示 WhatsApp 列出(而不是 WhatsApp 以及任何其他公共/*符合标准的应用程序)您 可以指定与保存的上述类型之一的文件 WhatsApp 独有的扩展:

  • 图像 - «.wai»,类型为 net.whatsapp.image
  • 视频 - «.wam»,类型为 net.whatsapp.movi​​e
  • 音频文件 - «.waa» 输入 net.whatsapp.audio

当触发时,WhatsApp 会立即 向用户展示联系人/组选择器屏幕。媒体将 自动发送到选定的联系人/组。

this WhatsApp FAQ 中的更多信息。

【讨论】:

  • 这个解决方案提供了一个 ActionSheet,这是我想要避免的。
【解决方案4】:

这里有你需要的一切:

https://www.whatsapp.com/faq/en/iphone/23559013

编辑:您可以在这个 SO 上看到将文本/图像直接发送到 whats 应用程序的示例 -

Share image/text through WhatsApp in an iOS app

(参见 Wagner Sales 的回答)

【讨论】:

  • 这个解决方案提供了一个 ActionSheet,这是我想要避免的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-17
  • 2015-11-28
  • 1970-01-01
  • 2016-01-29
  • 1970-01-01
  • 2019-07-17
相关资源
最近更新 更多