2015-04-21 36 views
23

Im przy użyciu UIActivityViewController, aby pokazać udział. Na liście, gdy wybieram aplikację Poczta, temat i treść są ustawione prawidłowo i gdzie, podobnie jak w aplikacji Gmail, jest pusta.UIActivityViewController Gmail Udostępnianie tematu i treści jest puste?

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

Mam sprawdzić poniższe dwa pytania na temat StackOverFlow.

  1. UIActivityViewController not showing body text in gmail

  2. UIActivityViewController not showing body text in gmail

Nie są one odpowiedzieć na moje pytanie, bo dodać nową aktywność w liście, raczej chcę iOS pokazuje wszystkie aplikacje chętnie się udostępnia. W takim przypadku treść udziału Gmaila jest pusta.

Z góry dziękuję. dodawania screenów, 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

Czy mógłbyś jeszcze bardziej rozwinąć? Widok aktywności pokazuje kartę Gmaila? –

+0

Cześć Ashraf, Tak zakładka aktywności jest pokazana w UIActivityViewController i na jej ekranie otwiera się okno poczty Gmail z pustym tematem i treścią. Załączam zrzuty ekranu, jeśli to możliwe. –

+0

To dlatego, że Gmail może używać innego klucza do tematu. Czy możesz sprawdzić, czy funkcja udostępniania Gmaila działa w innych aplikacjach? – Gasim

Odpowiedz

12

[_activityViewController setValue:subject forKey:@"subject"]; Czy nieudokumentowane sposób ustawić przedmiot email.
Poprawny sposób ustawiania treści i tematu (iOS 7.0 i nowsze) - implementuj protokół UIActivityItemSource dla elementu do udostępnienia.

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

I niż obecny to:

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

Spowoduje to ustawienie ciała i temat na email aplikacji, ale wydaje się, że aplikacja Gmail ignoruje i ustawi go równa ciała.

Mail.appGmail

Ważne: Wydaje się, że jest to błąd w aplikacji Gmail. Przekazanie znaku & powoduje, że temat wiadomości i treść będą puste. Zamiast tego użyj &amp;. Inne znaki specjalne nie są testowane.

+0

Dzięki za odpowiedź. Powodem, dla którego treść Gmaila jest pusta, jest udostępnienie adresu URL. I próbowałem udostępnić adres URL jako NSString i NSUrl zarówno nie powiodło się w moim przypadku. –

+0

Możesz udostępnić ciąg url w ciele w przykładowym kodzie powyżej. –

+0

Dzięki @Sergey W mojej kwerendzie URL zawiera symbol "&", który jest przyczyną problemu. Tylko w celach informacyjnych "http://www.host.com/path/query?name=XYZ&age=14" Tak więc w nazwie komponentu zapytania i wieku jest oddzielone "&", z powodu którego jest pusty. Zaproponuj mi sposób na zastąpienie/ucieczkę tej postaci. –

-2

UIActivityViewController * activityViewController = [[przydział UIActivityViewController] initWithActivityItems: @ [@ "Twój ciąg treści do udostępnienia"] applicationActivities: nil];

[activityViewController setValue: @ "Twój adres e-mail Temat" forKey: @ "subject"];

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