【问题标题】:UIActivityViewController unable to set subject when sharing to Gmail app分享到 Gmail 应用时 UIActivityViewController 无法设置主题
【发布时间】:2016-10-23 13:22:00
【问题描述】:

我通过共享来自其他应用程序的内容看到,在使用共享表共享到 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";
}

结果

Apple 邮件主题设置为“主题”,正文设置为“正文”

Gmail 主题设置为“正文”,正文设置为“正文”

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

分享到 Gmail 应用程序时从不调用。

然后我尝试更hack的方法

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

结果

Apple 邮件主题设置为“主题”,正文设置为“正文”

Gmail 主题设置为“正文”,正文设置为“正文”

有什么方法可以让 Gmail 表现得像 Apple Mail?

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

【问题讨论】:

  • 看起来 Gmail 只是从正文拉到第一个空行并将其作为主题
  • @dan 你有我可以试试的测试字符串吗?我试过@“这是第一部分。\n\n这是第二部分。”但仍然是相同的行为。
  • 嗨!你找到解决方案了吗?我也面临同样的问题
  • 也卡在这里...有什么解决办法吗?谢谢
  • React Native 也出现了问题。 Gmail 决定只使用正文并将其放在主题中。

标签: ios ios9 uiactivityviewcontroller


【解决方案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];

【讨论】:

  • 在我的问题中,我发布了我已经尝试过 UIActivityItemSource 协议,但它不适用于 gmail 应用程序,仅适用于本机邮件应用程序。您是否在与 Gmail 应用共享时自己尝试过实施?
  • 最新下载的 Outlook Appin iOS 11 将主题和正文设置为空。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-05
相关资源
最近更新 更多