2010-08-26 24 views
8

Tôi muốn gửi tin nhắn với dữ liệu hình ảnh. Vì vậy, tôi đã sử dụng MFMessageComposeViewController. Nhưng bộ điều khiển đó chỉ cung cấp dịch vụ SMS. Vì vậy, tôi đã sử dụng UIPasteBoard đính kèm dữ liệu hình ảnh. Nhưng nó cũng không hoạt động. Không có nút "Dán" được tạo khi nhập tin nhắn. Việc đính kèm hình ảnh tại UIPasteBoard rõ ràng là thành công. Tôi nghĩ việc sử dụng MFMessageComposeViewController không giải quyết được sự cố của mình. Làm cách nào để hoàn thành mục tiêu của mình?Cách đính kèm hình ảnh với tin nhắn qua ứng dụng iPhone?

+0

Tạo url Sms và sau đó sử dụng [[UIApplication sharedApplication] openURL: url]; Để gửi hình ảnh, bạn cần phải dán hình ảnh bằng cách sử dụng UIPasteBoard theo cách thủ công. – Jasmit

Trả lời

6

Điều này là không thể với API MessageUI hiện tại: MSMessageComposeViewController không chấp nhận các tệp đính kèm như MFMailComposeViewController.

Cách duy nhất để thực hiện điều này hiện nay là sử dụng dịch vụ bên ngoài cho phép bạn gửi mms qua cuộc gọi REST chẳng hạn.

GSMA định nghĩa một đặc điểm kỹ thuật REST cho mục đích này chính xác: http://www.gsmworld.com/oneapi/reference_documentation-version_1.html (nhiều pdf trên trang này)

Cố gắng tìm một nhà cung cấp dịch vụ địa phương mà thực hiện kỹ thuật này và bạn tốt để đi.

Chỉ cần thêm liên kết wiki trực tiếp vào thông số MMS OneAPI: http://gsma.securespsite.com/access/Access%20API%20Wiki/MMS%20RESTful%20API.aspx và liên kết đến hộp cát PHP/Java https://github.com/OneAPI/GSMA-OneAPI nơi MMS có thể được kiểm tra cục bộ. Chúc mừng.

4

Tôi có cùng một câu hỏi mà tôi được đăng here. Có một lỗi trong MFMessageComposeViewController và nếu bạn chỉ cần sử dụng mã bên dưới nó sẽ khởi động một thông điệp rằng bạn có thể chèn hình ảnh vào

NSString *phoneToCall = @"sms: 123-456-7890"; 
    NSString *phoneToCallEncoded = [phoneToCall stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding]; 
    NSURL *url = [[NSURL alloc] initWithString:phoneToCallEncoded]; 

    [[UIApplication sharedApplication] openURL:url]; 
+1

thậm chí đơn giản hơn, ít nhất là trên iPhone 4S, bạn có thể xóa số điện thoại giả và mã hóa - tất cả những gì bạn cần là: 'NSURL * url = [[NSURL alloc] initWithString: @" sms: "];' then ' [[UIApplication sharedApplication] openURL: url]; ' – toblerpwn

4

Đây là làm việc đúng và nó hoạt động hoàn hảo trên thiết bị của tôi.

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]; 
+0

kUTTypeUTF8PlainText và kUTTypePNG là gì? – Rick

+0

@Rick Xem [link] này (https://developer.apple.com/library/mac/documentation/MobileCoreServices/Reference/UTTypeRef/Reference/reference.html) –

+0

Không hoạt động như iOS 7 –

4

Phương pháp này được kiểm tra và xác minh. Tôi đã sử dụng nó trong mã của tôi.

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]; 

Bạn có thể sử dụng bất kỳ định dạng jpg và png jpeg nào.

+0

trong mã của tôi nó không bao giờ đi vào nếu ([MFMessageComposeViewController canSendAttachments]) { NSLog (@ "ok"); } Tôi có cần thiết lập bất kỳ cài đặt nào khác không? – Niharika

0

Tại sao bạn không chia sẻ hình ảnh và văn bản thông qua Share API (chọn tin nhắn, và nếu bạn muốn exluding Facebook, twitter vv ..)

+0

Để có giao diện khác – jgvb

1

Swift cách. Hoạt động trong iOS11

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) 
} 
Các vấn đề liên quan