我想发送带有图片数据的消息。所以我使用了MFMessageComposeViewController
。
但该控制器仅提供SMS服务。所以我用UIPasteBoard
附加了一个图像数据。
但它也不起作用。键入消息时没有创建“粘贴”按钮。在UIPasteBoard
附加图像显然是成功的。
我认为使用MFMessageComposeViewController
并不能解决我的问题。
我怎样才能实现目标?
答案 0 :(得分:6)
当前的MessageUI API无法做到这一点:MSMessageComposeViewController不接受MFMailComposeViewController之类的附件。
目前执行此操作的唯一方法是使用允许您通过REST调用发送mms的外部服务。
GSMA正是为此目的定义了一个REST规范: http://www.gsmworld.com/oneapi/reference_documentation-version_1.html(本页有多个pdf)
尝试找到一个实现此规范的本地服务提供商,你就可以了。
只需添加指向OneAPI MMS规范的直接wiki链接:http://gsma.securespsite.com/access/Access%20API%20Wiki/MMS%20RESTful%20API.aspx以及指向可在本地测试MMS的PHP / Java沙箱https://github.com/OneAPI/GSMA-OneAPI的链接。欢呼声。
答案 1 :(得分:4)
我发布了同样的问题here. MFMessageComposeViewController
中存在错误,如果您只是使用下面的代码,则会启动一条消息,您可以将图像插入
NSString *phoneToCall = @"sms: 123-456-7890";
NSString *phoneToCallEncoded = [phoneToCall stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding];
NSURL *url = [[NSURL alloc] initWithString:phoneToCallEncoded];
[[UIApplication sharedApplication] openURL:url];
答案 2 :(得分:4)
这是正确的工作代码,它在我的设备上完美运行。
UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];
pasteboard.persistent = NO;
NSMutableDictionary *text = [NSMutableDictionary dictionaryWithCapacity:1];
[text setValue:label.text forKey:(NSString *)kUTTypeUTF8PlainText];
NSMutableDictionary *image = [NSMutableDictionary dictionaryWithCapacity:1];
[image setValue:imageView.image forKey:(NSString *)kUTTypePNG];
pasteboard.items = [NSArray arrayWithObjects:image,text, nil];
NSString *phoneToCall = @"sms:";
NSString *phoneToCallEncoded = [phoneToCall stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding];
NSURL *url = [[NSURL alloc] initWithString:phoneToCallEncoded];
[[UIApplication sharedApplication] openURL:url];
答案 3 :(得分:4)
此方法已经过测试和验证。我在我的代码中使用它。
if (![MFMessageComposeViewController canSendText]) {
UIAlertView *alertV = [[UIAlertView alloc] initWithTitle:@"Error" message:@"Your device not support SMS \nOr you hadn't login your iMessage" delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil];
[alertV show];
return;
}
MFMessageComposeViewController *mVC = [[MFMessageComposeViewController alloc] init];
mVC.body = @"jjjj";
mVC.recipients = @[@"00XXXXXXXXXX"];
mVC.messageComposeDelegate = self;
if ([MFMessageComposeViewController canSendAttachments]) {
NSLog(@"ok");
}
[mVC addAttachmentData: UIImageJPEGRepresentation([UIImage imageNamed:@"test.jpg"], 1.0) typeIdentifier:@"public.data" filename:@"image.jpeg"];
[self presentViewController:mVC animated:YES completion:nil];
您可以使用任何jpeg jpg和png格式。
答案 4 :(得分:3)
func shareViaMessage() {
if !MFMessageComposeViewController.canSendText() {
showAlert("Text services are not available")
return
}
let textComposer = MFMessageComposeViewController()
textComposer.messageComposeDelegate = self
textComposer.body = "Try my #app"
if MFMessageComposeViewController.canSendSubject() {
textComposer.subject = "AppName"
}
if MFMessageComposeViewController.canSendAttachments() {
let imageData = UIImageJPEGRepresentation(imageView.image!, 1.0)
textComposer.addAttachmentData(imageData!, typeIdentifier: "image/jpg", filename: "photo.jpg")
}
present(textComposer, animated: true)
}
答案 5 :(得分:0)
为什么不通过共享API分享图像和文本(选择消息,如果你想要排除Facebook,Twitter等...)