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

Kri*_*lci 17 ios uiactivityviewcontroller ios9

我通过共享来自其他应用程序的内容看到,当使用共享表共享到Gmail邮件应用程序时,可以设置不同的主题和正文.我已经实现了它,它在本机邮件应用程序上工作正常但不适用于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";
}
Run Code Online (Sandbox Code Playgroud)

结果

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

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

- (NSString *)activityViewController:(UIActivityViewController *)activityViewController subjectForActivityType:(NSString *)activityType 
Run Code Online (Sandbox Code Playgroud)

共享到Gmail应用时从不调用.

然后我尝试更多的黑客方式

UIActivityViewController *activityViewController = [[UIActivityViewController alloc] initWithActivityItems:@[@"body"] applicationActivities:nil];
[activityViewController setValue:@"subject" forKey:@"subject"];
Run Code Online (Sandbox Code Playgroud)

结果

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

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

任何让Gmail表现得像Apple Mail的方式?

我再次看到,Yelp和Safari等其他应用程序通过共享表从Gmail应用程序中获得了正确的行为.任何建议将不胜感激,谢谢.

小智 -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
Run Code Online (Sandbox Code Playgroud)

然后呈现它:

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];
Run Code Online (Sandbox Code Playgroud)