2010-08-26 7 views
8

Desidero inviare un messaggio con dati immagine. Quindi ho usato MFMessageComposeViewController. Ma quel controller fornisce solo il servizio SMS. Quindi ho utilizzato UIPasteBoard in allegato dati immagine. Ma non funziona, neanche. Non ci sono pulsanti "Incolla" creati durante la digitazione dei messaggi. Allegare l'immagine allo UIPasteBoard era chiaramente un successo. Penso che usare MFMessageComposeViewController non risolva il mio problema. Come posso raggiungere il mio obiettivo?Come allegare un'immagine con un messaggio tramite l'applicazione iPhone?

+0

Crea URL di Sms e quindi utilizza [[Applicazione condivisa UIA] openURL: url]; Per inviare l'immagine è necessario incollare manualmente l'immagine usando UIPasteBoard. – Jasmit

risposta

6

Questo non è possibile con l'API MessageUI corrente: il MSMessageComposeViewController non accetta gli allegati come fa il MFMailComposeViewController.

L'unico modo per farlo al momento è utilizzare un servizio esterno che consente di inviare mms tramite una chiamata REST, ad esempio.

GSMA definisce una specifica REST proprio per questo scopo: http://www.gsmworld.com/oneapi/reference_documentation-version_1.html (multipli PDF in questa pagina)

Prova a trovare un fornitore di servizi locale che implementa questa specifica e siete a posto.

Solo per aggiungere il collegamento diretto wiki alle specifiche OneAPI MMS: http://gsma.securespsite.com/access/Access%20API%20Wiki/MMS%20RESTful%20API.aspx e un collegamento alla sandbox Java/Java https://github.com/OneAPI/GSMA-OneAPI dove MMS può essere testato localmente. Saluti.

4

ho avuto la stessa domanda che ho postato here. C'è un bug in MFMessageComposeViewController e se si utilizza il codice qui sotto che lancerà un messaggio che è possibile inserire le immagini in

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

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

ancora più semplice, almeno su un iPhone 4S, è possibile rimuovere il numero di telefono falso e la codifica - tutto ciò che serve è questo: 'NSURL * url = [[NSURL alloc] initWithString: @" sms: "];' then ' [[UIApplication sharedApplication] openURL: url]; ' – toblerpwn

4

Ecco il corretto funzionamento codice e funziona perfettamente sul mio dispositivo.

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

cosa sono kUTTypeUTF8PlainText e kUTTypePNG? – Rick

+0

@Rick Vedere questo [collegamento] (https://developer.apple.com/library/mac/documentation/MobileCoreServices/Reference/UTTypeRef/Reference/reference.html) –

+0

Non funziona da iOS 7 –

4

Questo metodo è stato testato e verificato. L'ho usato nel mio codice.

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

È possibile utilizzare qualsiasi formato jpeg jpg e png.

+0

nel mio codice non entra mai in se ([MFMessageComposeViewController canSendAttachments]) { NSLog (@ "ok"); } Devo impostare qualche altra impostazione? – Niharika

0

Perché non condividere l'immagine e testo tramite l'API Condividi (selezionando Message, e se si vuole esclusa la Facebook, Twitter, ecc ..)

+0

Per avere un aspetto diverso – jgvb

1

modo Swift. Funziona su 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) 
}