iOS 无法使用 UIDocumentInteractionController 将视频分享到 Whatsapp

Posted

技术标签:

【中文标题】iOS 无法使用 UIDocumentInteractionController 将视频分享到 Whatsapp【英文标题】:iOS Could not share video to Whatsapp using UIDocumentInteractionController 【发布时间】:2016-01-29 02:48:32 【问题描述】:

它成功重定向到Whatsapp应用程序。没有预览框架,点击发送时弹出错误消息“无法发送此视频。请选择其他视频。

这是我的代码。

- (void)shareVideo 
NSLog(@"[WhatsAppShare] sharing video");
//NSString *nativePath = [[NSString alloc] initWithCString:path encoding:NSASCIIStringEncoding];
NSString *nativePath=[[NSBundle mainBundle] pathForResource:@"video" ofType:@"mp4"];

// Save video to path in documents directory
NSString *savePath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/whatsAppTmp.wam"];

if([[NSFileManager defaultManager] fileExistsAtPath:savePath])
    if([[NSFileManager defaultManager] removeItemAtPath:savePath error:nil])
        [self shareVideoAtNativePath:nativePath SavePath:savePath];
    
 else 
    [self shareVideoAtNativePath:nativePath SavePath:savePath];


- (void)shareVideoAtNativePath:(NSString*)nativePath SavePath:(NSString*)savePath
NSError*error;
BOOL isSuccess=[[NSFileManager defaultManager] copyItemAtPath:nativePath toPath:savePath error:&error];
if(isSuccess)
    // Create interaction controller
    self.documentInteractionController          = [UIDocumentInteractionController interactionControllerWithURL:[NSURL fileURLWithPath:savePath]];
    self.documentInteractionController.UTI      = @"net.whatsapp.movie";
    self.documentInteractionController.delegate = self;

    [self.documentInteractionController presentOpenInMenuFromRect:CGRectMake(0, 0, 1, 1)
                                                           inView:[self view]
                                                         animated:YES];
 else
    NSLog(@"error %@", error);


【问题讨论】:

虽然阿里的回答是正确的(.wam 分享在最新版本的 WhatsApp 中被破坏)你可以将视频分享为.m4v,它会正常工作。 【参考方案1】:

我们观察到了完全相同的问题。在最近更新 WhatsApp 之前,一切正常。这可能是 WhatsApp 方面的错误。

以下是解决此问题的方法:

不要使用wam文件,直接使用mp4文件。所以在你的情况下,只需调用

[self shareVideoAtNativePath:nativePath SavePath:nativePath];

将 UTI 更改为公共 Mpeg4:

self.documentInteractionController.UTI = @"public.mpeg-4";

这似乎解决了我们的问题。但是,有一个缺点是,共享对话框现在包含许多其他可以打开 mp4 文件的应用程序/服务。

【讨论】:

手机没有安装Whatsapp就不行?【参考方案2】:

我们遇到了完全相同的问题。

官方.wam格式在分享对话框中只显示WhatsApp,但无法转发视频。

使用.m4v 格式对我们有用。与 WhatsApp 一起显示了更多选项(Open in WhatsApp 是我们想要的选项)。在将用户发送到共享对话框之前,我们会显示一条警告“请在下一个屏幕上选择 Whatsapp”。

文件格式:m4v

UTI:net.whatsapp.movie

请参考下面的工作代码:

 UIDocumentInteractionController *documentInteractionController;
    -----
    -----
 - (void)shareVideoViaWhatsApp:(NSURL*)url    
        // Creating temp video to share specifically on whatsapp.   
        NSString *cachesFolder = [NSTemporaryDirectory() stringByAppendingPathComponent: [NSString stringWithFormat:@"video.m4v"]];
        NSURL *file = [NSURL fileURLWithPath:cachesFolder];
        [[NSData dataWithContentsOfURL:url] writeToURL:file options:NSDataWritingAtomic error:nil];

        documentInteractionController = [UIDocumentInteractionController interactionControllerWithURL: file ];
        documentInteractionController.UTI = @"net.whatsapp.movie";

        documentInteractionController.delegate = self;
        [documentInteractionController presentOpenInMenuFromRect:CGRectZero inView:self.view animated:YES];
 

【讨论】:

【参考方案3】:
// In code Use share GIF and Video for WhatsApp....

  NSString    *savePath  = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/whatsAppTmp.wam"];
savePath = [[NSBundle mainBundle] pathForResource:@"Movie" ofType:@"m4v"];
_documentInteractionController = [UIDocumentInteractionController interactionControllerWithURL:_videourl];
_documentInteractionController.UTI = @"net.whatsapp.movie";
_documentInteractionController.delegate = (id)self;
[_documentInteractionController presentOpenInMenuFromRect:CGRectMake(0, 0, 0, 0) inView:self.view animated: YES];

【讨论】:

以上是关于iOS 无法使用 UIDocumentInteractionController 将视频分享到 Whatsapp的主要内容,如果未能解决你的问题,请参考以下文章

Xamarin 应用程序无法在 iOS <= 10 上启动:“无法使用 bundleID 引导进程...”

iOS推送通知无法使用PHP

无法使用 iOS6 启动仪器

iOS - 我无法使用 MPMoviePlayerController 重现视频

无法使用 Firebase 在 iOS 中接收自定义通知

无法使用Web Audio API与iOS 11 Safari配合使用