10
votes

Comment joindre une image avec un message via une application iPhone?

Je veux envoyer un message avec des données d'image. Donc, j'ai utilisé mfmessagecomposeviewController . Mais ce contrôleur fournit uniquement un service SMS. J'ai donc utilisé uipasteboard ci-joint une donnée d'image. Mais cela ne fonctionne pas non plus. Il n'y a pas de bouton "Coller" créé lors de la frappe des messages. Fixation de l'image au Uipasteboard était clairement réussie. Je pense qu'utiliser mfmessagecomposeviewController ne résout pas mon problème. Comment puis-je accomplir mon objectif?


1 commentaires

Créez une URL SMS, puis utilisez [[UIAPPLication SharedApplication] Openurl: URL]; Pour l'envoi de l'image, vous devez coller manuellement l'image en utilisant Uipasteboard.


6 Réponses :


6
votes

Ceci n'est pas possible avec l'API actuel MessageUI: Le MSMESSAGECOMPOSEVIEWNONTROLLER n'accepte pas les pièces jointes telles que le MFMailCommentViewController.

Le seul moyen de faire cela est actuellement d'utiliser un service externe qui vous permet d'envoyer des MMS via un appel de repos par exemple.

GSMA définit une spécification de repos pour exactement cet objectif: http://www.gsmworld.com/oneapi/reference_documentation-verse_1.html (plusieurs PDF sur cette page)

Essayez de trouver un fournisseur de services local qui implémente cette spécification et que vous êtes prêt à partir.

Juste pour ajouter le lien de wiki direct à l'ONAPI MMS Spec: http: //gsma.securespsite.com/access/access%20api%20wiki/mms%20Restful%20api.aspx et un lien vers la boîte à sable PHP / Java HTTTPS://github.com/oneapi/gsma-oneapi où MMS peut être testé localement. Bravo.


0 commentaires

4
votes

J'ai eu la même question que j'ai posté ici. Il y a un bogue dans MfMessagecomposeviewController Code> Et si vous utilisez simplement le code ci-dessous, il lancera un message que vous pouvez insérer des images dans

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

    [[UIApplication sharedApplication] openURL:url];


1 commentaires

Même plus simple, au moins sur un iPhone 4S, vous pouvez supprimer le faux numéro de téléphone et le codage - tout ce dont vous avez besoin est celui-ci: nsurl * url = [[[Nsurl alloc] Initwithstring: @ "SMS:"]; alors [[uiapplication SharedApplication] openURL: URL];



4
votes

Voici le code de travail correct et fonctionnent parfaitement sur mon appareil.

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


2 commentaires

Qu'est-ce que kuttypeutf8plaintext et kuttypepng?


@Rick Voir cette Link



4
votes

Cette méthode est testée et vérifiée. Je l'ai utilisé dans mon code.

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


1 commentaires

Dans mon code, il ne va jamais dans si ([MfMessagecomposeViewController Cansendatchembles]) {nslog (@ "OK"); } Dois-je définir des paramètres d'autre chose?



0
votes

Pourquoi ne partagez-vous pas l'image et le texte via l'API de Share (Sélection du message, et si vous souhaitez supprimer Facebook, Twitter, etc.)


1 commentaires

Avoir un look différent



3
votes

Swift Way. Fonctionne dans 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)
}


0 commentaires