2015-04-21 21 views
23

Im usando UIActivityViewController per mostrare la condivisione. Nell'elenco quando seleziono l'app Mail l'oggetto e il corpo sono impostati correttamente e dove, come nell'app Gmail, è vuoto.UIActivityViewController Gmail Condividi soggetto e corpo vuoto?

- (void)shareAVideoWithSubject:(NSString*)subject Link:(NSString *)string onViewController:(UIViewController *)viewController fromView:(UIView *)view { 

    _activityViewController = 
    [[UIActivityViewController alloc] initWithActivityItems:@[string] 
             applicationActivities:nil]; 
    _activityViewController.excludedActivityTypes = @[UIActivityTypePrint, UIActivityTypeAssignToContact, UIActivityTypeSaveToCameraRoll, UIActivityTypeAddToReadingList, UIActivityTypeAirDrop]; 
    [_activityViewController setValue:subject forKey:@"subject"]; 


    UIWindow *window = [[[UIApplication sharedApplication] delegate]window]; 

    //if iPhone 
    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) 
    { 
     if(!viewController){ 
      viewController = ((SWRevealViewController*)window.rootViewController).presentedViewController; 
     } 
     [viewController presentViewController:_activityViewController 
            animated:YES 
            completion:nil]; 

    } 
    //if iPad 
    else 
    { 
     // Change Rect to position Popover 
     popup = [[UIPopoverController alloc] initWithContentViewController:_activityViewController]; 
     UIBarButtonItem *barButton = [[UIBarButtonItem alloc] initWithCustomView:view]; 
     [popup presentPopoverFromBarButtonItem:barButton permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; 
    } 
} 

Ho verificato le due domande seguenti su StackOverFlow.

  1. UIActivityViewController not showing body text in gmail

  2. UIActivityViewController not showing body text in gmail

Questi non sono la risposta alla mia domanda, perché si sommano nuova attività nella lista, piuttosto voglio iOS mostra le tutte le applicazioni condivisibili. In tal caso, il corpo condiviso di Gmail si sta svuotando.

Grazie in anticipo. Aggiunta gli screenshot, UIActivityViewController showing Gmail app to share

Gmail window open with empty subject and body. Cropped the image because of company policy can show the email address

+0

Potresti per favore elaborare di più? La visualizzazione delle attività mostra una scheda gmail? –

+0

Hi Ashraf, la scheda di attività Sì è visualizzata in UIActivityViewController e alla sua chiusura la finestra di posta Gmail si apre con oggetto e corpo vuoti. Allegherà gli screenshot se possibile. –

+0

Ecco perché Gmail potrebbe utilizzare una chiave diversa per l'oggetto. Puoi verificare se la condivisione di Gmail funziona in altre app? – Gasim

risposta

12

[_activityViewController setValue:subject forKey:@"subject"]; è il modo non documentato per impostare tema della e-mail.
Modo corretto per impostare corpo e soggetto (iOS 7.0 e versioni successive): implementare il protocollo UIActivityItemSource sull'elemento da condividere.

// EmailItemProvider.h 
@interface EmailItemProvider : NSObject <UIActivityItemSource> 
@property (nonatomic, strong) NSString *subject; 
@property (nonatomic, strong) NSString *body; 
@end 

// EmailItemProvider.m 
#import "EmailItemProvider.h" 

@implementation EmailItemProvider 

- (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 

E che presente che:

EmailItemProvider *emailItem = [EmailItemProvider new]; 
emailItem.subject = @"Subject"; 
emailItem.body = @"Body"; 

UIActivityViewController *activityViewController = 
[[UIActivityViewController alloc] initWithActivityItems:@[emailItem] 
            applicationActivities:nil]; 
[self presentViewController:activityViewController animated:YES completion:nil]; 

Questo imposterà il corpo e soggetti su posta app, ma sembra come Gmail ignora soggetto e impostarla uguale al corpo.

Mail.appGmail

Importante: Sembra che ci sia un bug in Gmail App. Il passaggio del carattere & rende il messaggio oggetto e corpo vuoti. Utilizzare invece &amp;. Altri caratteri speciali non sono testati.

+0

Grazie per la risposta. Il motivo per cui il corpo di Gmail è vuoto per me è che sto condividendo l'URL. E ho provato a condividere l'URL come NSString e NSUrl hanno fallito nel mio caso. –

+0

È possibile condividere la stringa url nel corpo nel codice di esempio sopra. –

+0

Grazie @Sergey Nella mia url query contiene il simbolo '&' che causa problemi. Solo per riferimento "http://www.host.com/path/query?name=XYZ&age=14" Quindi nel nome del componente di query e l'età è separata da "&" a causa del quale è vuoto. Suggeriscimi il modo di sostituire/sfuggire quel personaggio. –

-2

UIActivityViewController * activityViewController = [[UIActivityViewController alloc] initWithActivityItems: @ [@ "Il tuo corpo Stringa da condividere"] applicationActivities: nil];

[activityViewController setValue: @ "Oggetto dell'email" forKey: @ "subject"];

activityViewController.completionHandler =^(NSString * activityType, BOOL completato) { // ... };