2016-06-21 4 views
12

Ich sehe via Teilen von Inhalten aus anderen Apps, dass es möglich ist, ein anderes Thema und einen anderen Text festzulegen, wenn ich das Freigabeblatt für die Google Mail App verwende. Ich habe es implementiert und es funktioniert gut mit der nativen Mail-App, aber nicht mit Gmail.UIActivityViewController kann den Betreff nicht festlegen, wenn er mit der Google Mail-App geteilt wird

Gehen Sie auf Yelp und teilen ein Geschäft, dann gmail aus dem Aktienblatt wählen, sehe ich, dass das Thema und der Körper sind unterschiedlich. Das Thema enthält die Adresse des Unternehmens, während der Körper die Adresse enthält + einen Link zum Geschäft auf Yelp.

Ich habe versucht, diese Logik mit Erfolg auf der nativen Mail App, aber nicht in der Google Mail App zu replizieren.

Ich habe versucht, die folgenden:

Implementierung UIActivityItemSource Methoden

UIActivityViewController *activityViewController = [[UIActivityViewController alloc] initWithActivityItems:@[self] applicationActivities:nil]; 

- (id)activityViewControllerPlaceholderItem:(UIActivityViewController *)activityViewController { 
    return @""; 
} 

- (id)activityViewController:(UIActivityViewController *)activityViewController itemForActivityType:(NSString *)activityType { 
    return @"body"; 
} 

- (NSString *)activityViewController:(UIActivityViewController *)activityViewController subjectForActivityType:(NSString *)activityType { 
    return @"subject"; 
} 

Ergebnis

Apple Mail Betreff auf "Betreff", Körper auf "Körper"

Google Mail Betreff, der auf "body" gesetzt ist, Body auf "body" gesetzt "

- (NSString *)activityViewController:(UIActivityViewController *)activityViewController subjectForActivityType:(NSString *)activityType 

Wird nie beim Teilen in der Google Mail App aufgerufen.

ich mehr Hack Art und Weise, es zu tun

UIActivityViewController *activityViewController = [[UIActivityViewController alloc] initWithActivityItems:@[@"body"] applicationActivities:nil]; 
[activityViewController setValue:@"subject" forKey:@"subject"]; 

Ergebnis

Apple Mail Betreff dann versuchen, "Betreff" gesetzt, Körper auf "Körper"

Gmail Betreff auf "Körper", Körper auf "Körper"

Sie können Google Mail wie Apple Mail verhalten?

Wieder habe ich gesehen, dass andere Anwendungen wie Yelp und Safari das richtige Verhalten aus der Gmail-App durch Share Sheet bekommen haben. Jeder Rat würde geschätzt werden, danke.

+0

Es sieht aus wie Google Mail, bis die erste leere Zeile aus dem Körper und macht zieht nur, dass sich das Motiv – dan

+0

@ Dan Sie einen Test-String haben Sie ich versuchen kann, ? Ich habe versucht @ "Dies ist der erste Teil. \ N \ nDies ist der zweite Teil." aber immer noch das gleiche Verhalten. –

+0

Hallo! Hast du eine Lösung dafür gefunden? Ich stehe vor dem gleichen Problem –

Antwort

-1

[_activityViewController setValue:subject forKey:@"subject"]; -Nicht unterstützt Weg.

Korrekte Möglichkeit zum Festlegen von Körper und Thema (iOS 7.0 und höher) - Implementieren UIActivityItemSource Protokoll auf Element zu teilen.

// EmailDataProvider.h 

@interface EmailItemProvider : NSObject <UIActivityItemSource> 

@property (nonatomic, strong) NSString *subject; 
@property (nonatomic, strong) NSString *body; 

@end 


// EmailDataProvider.m 

    @implementation EmailDataProvider 

- (id)activityViewControllerPlaceholderItem:(UIActivityViewController *)activityViewController { 
    return _body; 
} 

- (id)activityViewController:(UIActivityViewController *)activityViewController itemForActivityType:(NSString *)activityType { 
    return _body; 
} 

- (NSString *)activityViewController:(UIActivityViewController *)activityViewController subjectForActivityType:(NSString *)activityType { 
    return _subject; 
} 

@end 

Und als Geschenk es:

EmailDataProvider *emailItem = [[EmailDataProvider alloc]init]; 

emailItem.subject = @"This is Subject text."; 

emailItem.body = @"This is Body,set by programatically"; 

UIActivityViewController *activityViewController = 
[[UIActivityViewController alloc] initWithActivityItems:@[emailItem] 
            applicationActivities:nil]; 

[self presentViewController:activityViewController animated:YES completion:nil]; 
+0

In meiner Frage poste ich, dass ich bereits das UIActivityItemSource-Protokoll ausprobierte und es funktionierte nicht für die Google Mail-App, sondern nur für die native Mail-App. Haben Sie die Implementierung selbst getestet, während Sie sie mit der Google Mail App geteilt haben? –

Verwandte Themen