UIActivityViewController Gmail Поделиться темой и телом, пустым?
Im использует UIActivityViewController для отображения общего ресурса. В списке, когда я выбираю приложение Mail, тема и тело установлены правильно и где, как в приложении 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.
Это не ответ на мой вопрос, потому что они добавляют новую активность в список, скорее я хочу, чтобы 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]()
Ответы
Ответ 1
[_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.app]()
![Gmail]()
Важно. Похоже, что есть ошибка в приложении Gmail. Передача символа &
означает, что объект сообщения и тело должны быть пустыми. Вместо этого используйте &
. Другие специальные символы не проверяются.
Ответ 2
UIActivityViewController * activityViewController = [[UIActivityViewController alloc] initWithActivityItems: @[@ "Ваше тело String для публикации" ] applicationActivities: ноль];
[activityViewController setValue: @ "Ваш адрес электронной почты Тема" forKey: @ "subject" ];
activityViewController.completionHandler = ^ (NSString * activityType, BOOL завершен) { //...
};