2015-04-21 2 views
23

Я использую UIActivityViewController для отображения общего ресурса. В списке, когда я выбираю приложение Mail, тема и тело установлены правильно и где, как и в приложении Gmail, пусто.UIActivityViewController Gmail Поделиться темой и телом, пустым?

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

У меня есть два вопроса на StackOverFlow.

  1. UIActivityViewController not showing body text in gmail

  2. UIActivityViewController not showing body text in gmail

Это не ответ на мой вопрос, потому что они складываются новый вид деятельности в списке, а я хочу, чтобы IOS показывает все разделяемых приложений. В этом случае общий ресурс Gmail пуст.

Заранее спасибо. Добавление скриншотов, 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

Не могли бы вы подробнее рассказать? На экране активности отображается вкладка gmail. –

+0

Привет, Ашраф, вкладка активности отображается в окне UIActivityViewController и при нажатии на нее открывается почтовое окно Gmail с пустой темой и телом. Приложите скриншоты, если это возможно. –

+0

Это потому, что Gmail может использовать другой ключ для объекта. Вы можете проверить, работает ли Gmail в других приложениях? – Gasim

ответ

12

[_activityViewController setValue:subject forKey:@"subject"]; недокументирован способ установить тему по электронной почте.
Правильный способ установки тела и объекта (iOS 7.0 и новее) - реализовать протокол UIActivityItemSource по предмету для публикации.

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

И чем настоящее:

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

Это установит тело и тему по почте приложение, но кажется, что приложение Gmail игнорирует тему и установить ее равной телу.

Mail.appGmail

Важно: Похоже, есть ошибка в Gmail App. Передача & персонаж делает сообщение субъектом и телом, чтобы быть пустым. Вместо этого используйте &amp;. Другие специальные символы не проверяются.

+0

Спасибо за ответ. Причина, по которой тело Gmail пуста для меня, - это обмен URL. И я попытался разделить URL как NSString, и NSUrl оба потерпели неудачу в моем случае. –

+0

Вы можете разделить строку url в теле в приведенном выше примере кода. –

+0

Спасибо @Sergey В моем запросе url содержится символ «&», который вызывает проблему. Просто для справки «http://www.host.com/path/query?name=XYZ&age=14» Таким образом, имя компонента запроса и возраст разделяются символом «&», из-за которого он становится пустым. Предложите мне способ заменить/избежать этого персонажа. –

-2

UIActivityViewController * activityViewController = [[UIActivityViewController Alloc] initWithActivityItems: @ [@ "Ваше тело строки поделиться"] applicationActivities: ноль];

[activityViewController setValue: @ "Ваш адрес электронной почты Тема" forKey: @ "subject"];

activityViewController.completionHandler =^(NSString * activityType, BOOL завершен) { // ... };

Смежные вопросы