Подтвердить что ты не робот

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

4b9b3361

Ответ 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.appGmail

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

Ответ 2

UIActivityViewController * activityViewController = [[UIActivityViewController alloc] initWithActivityItems: @[@ "Ваше тело String для публикации" ]                                 applicationActivities: ноль];

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

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