共享到Gmail应用程序时,UIActivityViewController无法设置主题

时间:2016-06-21 20:18:15

标签: ios ios9 uiactivityviewcontroller

我通过共享来自其他应用的内容看到,当使用共享表分享到Gmail Mail应用时,可以设置不同的主题和正文。我已经实现了它,它可以在本机邮件应用程序上正常工作,但不适用于Gmail。

进入Yelp并分享业务,然后从共享表中选择gmail,我看到主题和正文是不同的。主题包含业务地址,而正文包含地址+ Yelp上业务的链接。

我尝试在本机邮件应用程序上成功复制此逻辑,但未在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主题设置为"主题",正文设置为"正文"

Gmail主题设置为"正文",正文设置为"正文"

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

共享到Gmail应用中时从未调用过。

然后我尝试更黑客的方式

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

结果

Apple Mail主题设置为"主题",正文设置为"正文"

Gmail主题设置为"正文",正文设置为"正文"

如何让Gmail表现得像Apple Mail一样?

同样,我已经看到其他应用程序(如Yelp和Safari)通过共享表从Gmail应用程序中获得了正确的行为。任何建议都将不胜感激,谢谢。

1 个答案:

答案 0 :(得分:-3)

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