如何通过 iMessage 在 iOS 8 发送音频文件

5

众所周知,在发布iOS 8后,苹果允许自定义键盘扩展。在键盘扩展中,我们可以通过将图像复制到剪贴板来发送短信中的图像、gif等代码。

 UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];
 NSData *data= UIImagePNGRepresentation([UIImage imageNamed:@"so_close_disappointed_meme.png"]);
 [pasteboard setData:data forPasteboardType:@"public.png"];

我现在想要像这个功能(参考链接)一样,在iMessage中发送音频文件。不知道苹果是否允许我们在iMessage中发送音频?因此,我尝试了上述方法,但在短信窗口中没有显示任何粘贴选项。

 UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];
 NSString *path = [[NSBundle mainBundle] pathForResource:@"tune"ofType:@"mp3"];
 NSURL *url = [[NSURL alloc] initWithString:path];
 NSData *data = [NSData dataWithContentsOfURL:url];
 [pasteboard setData:data forPasteboardType:@"public.mp3"];

有人能否建议一下如何使用自定义键盘扩展发送音频文件呢?这是否可行?

我从未想到在iOS设备上也能实现这个,但听起来真的很酷! - PMARINA
2个回答

9
我认为您可以直接将文件附加到MFMessageComposeViewController上。这是如何实现的文档链接
以下是实现步骤:
  1. 使用+(BOOL)isSupportedAttachmentUTI:(NSString *)uti检查是否可以使用文件UTI发送文件。
  2. 找到文件UTI。即文件的路径。
  3. 使用- (BOOL)addAttachmentData:(NSData *)attachmentData typeIdentifier:(NSString *)uti filename:(NSString *)filename将文件附加到MFMessageComposeViewController上。
正如该方法的描述所说:

当要添加到消息中的附件没有文件系统表示时,此方法特别有用。例如,对于以编程方式组合的音频视觉内容,就可能会出现这种情况。

注意:您需要将音频文件转换为NSData格式。

我已经尝试了以上的方法来通过短信直接发送音频文件,但仍然没有达到期望的结果,但它帮助了我很多,我希望经过一点研究我能够得到期望的结果。 - jamil
请确保您已打开iMessage并与AppleID相关联。如果时间允许,我可能会尝试创建一个示例 :)。祝好运! - Ganesh Somani

0

在这种情况下,MFMessageComposeViewController不是解决方案。自定义键盘扩展不应该呈现新的视图控制器,而只需将音频文件粘贴到剪贴板即可。以下是一些对我有效的Swift代码:

let path = NSBundle.mainBundle().pathForResource("audio", ofType:"wav")
let fileURL = NSURL(fileURLWithPath: path!)
let data = NSData(contentsOfURL: fileURL)
let wavUTI = "com.microsoft.waveform-audio"
UIPasteboard.generalPasteboard().setData(data!, forPasteboardType: wavUTI)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接