UIActivityViewController не может установить тему при совместном использовании в приложении Gmail.

Я вижу через совместное использование контента из других приложений, чтобы можно было установить другой объект и тело при использовании общего ресурса для совместного использования в приложении Gmail Mail. Я реализовал его, и он отлично работает в основном почтовом приложении, но не в Gmail.

Переходя в Yelp и разделяя бизнес, выбирая gmail из общего доступа, я вижу, что тема и тело разные. Субъект содержит адрес бизнеса, в то время как тело содержит адрес + ссылку на бизнес в Yelp.

Я попытался реплицировать эту логику с успехом в приложении native Mail, но не в приложении Gmail.

Я пробовал следующее:

Реализация методов UIActivityItemSource

UIActivityViewController *activityViewController = [[UIActivityViewController alloc] initWithActivityItems:@[self] applicationActivities:nil];

- (id)activityViewControllerPlaceholderItem:(UIActivityViewController *)activityViewController {
    return @"";
}

- (id)activityViewController:(UIActivityViewController *)activityViewController itemForActivityType:(NSString *)activityType {   
    return @"body";
}

- (NSString *)activityViewController:(UIActivityViewController *)activityViewController subjectForActivityType:(NSString *)activityType {
    return @"subject";
}

Результат

Apple Mail Тема установлена ​​на "subject", Body установлен на "body"

Тема Gmail, установленная на "тело", Тело установлено на "тело"

- (NSString *)activityViewController:(UIActivityViewController *)activityViewController subjectForActivityType:(NSString *)activityType 

Никогда не вызывается при совместном использовании в приложении Gmail.

Затем я пытаюсь сделать больше способов сделать это

UIActivityViewController *activityViewController = [[UIActivityViewController alloc] initWithActivityItems:@[@"body"] applicationActivities:nil];
[activityViewController setValue:@"subject" forKey:@"subject"];

Результат

Apple Mail Тема установлена ​​на "subject", Body установлен на "body"

Тема Gmail, установленная на "тело", Тело установлено на "тело"

Любой способ заставить Gmail работать как Apple Mail?

Опять же, я видел, что другие приложения, такие как Yelp и Safari, получили правильное поведение из приложения Gmail через общий листок. Любые советы будут оценены, спасибо.

Ответ 1

[_activityViewController setValue:subject forKey:@"subject"]; -Не поддерживаемый способ.

Правильный способ установки тела и объекта (iOS 7.0 и более поздние версии) - реализовать UIActivityItemSource протокол по элементу, который будет опубликован.

//  EmailDataProvider.h

@interface EmailItemProvider : NSObject <UIActivityItemSource>

@property (nonatomic, strong) NSString *subject;
@property (nonatomic, strong) NSString *body;

@end


//  EmailDataProvider.m

    @implementation EmailDataProvider

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

И чем представить его:

EmailDataProvider *emailItem = [[EmailDataProvider alloc]init];

emailItem.subject = @"This is Subject text.";

emailItem.body = @"This is Body,set by programatically";

UIActivityViewController *activityViewController =
[[UIActivityViewController alloc] initWithActivityItems:@[emailItem]
                                  applicationActivities:nil];

[self presentViewController:activityViewController animated:YES completion:nil];