// // ShareProvider.m // YuMi // // Created by P on 2025/3/6. // #import "ShareProvider.h" #import @implementation ShareProvider - (instancetype)initWithTitle:(NSString *)title subtitle:(NSString *)subtitle appName:(NSString *)appName url:(NSURL *)url image:(UIImage *)image appIcon:(UIImage *)appIcon { // 使用标题作为占位符 self = [super initWithPlaceholderItem:title ?: @""]; if (self) { _title = title ?: @""; _subtitle = subtitle ?: @""; _appName = appName ?: @"E-Parti"; _url = url; _image = image; _appIcon = appIcon; } return self; } #pragma mark - UIActivityItemSource // 根据不同的分享类型提供不同的内容 - (id)activityViewController:(UIActivityViewController *)activityViewController itemForActivityType:(UIActivityType)activityType { if (!activityType) { // 默认返回完整信息 return [self fullShareText]; } // 邮件分享 - 返回富文本内容 if ([activityType isEqualToString:UIActivityTypeMail]) { return [self emailShareText]; } // 信息/短信分享 - 返回简洁文本 if ([activityType isEqualToString:UIActivityTypeMessage]) { return [self messageShareText]; } // 备忘录分享 - 返回详细文本 if ([activityType containsString:@"notes"] || [activityType containsString:@"Notes"]) { return [self notesShareText]; } // 社交媒体分享 - 返回带话题标签的文本 if ([activityType isEqualToString:UIActivityTypePostToTwitter] || [activityType isEqualToString:UIActivityTypePostToFacebook]) { return [self socialShareText]; } // AirDrop - 根据有无图片决定返回内容 if ([activityType isEqualToString:UIActivityTypeAirDrop]) { if (self.image) { return self.image; } else { return self.url ?: [self fullShareText]; } } // 复制链接 - 只返回URL if ([activityType isEqualToString:UIActivityTypeCopyToPasteboard]) { return self.url.absoluteString ?: [self fullShareText]; } // 默认返回完整文本 return [self fullShareText]; } // 为邮件等应用提供主题 - (NSString *)activityViewController:(UIActivityViewController *)activityViewController subjectForActivityType:(UIActivityType)activityType { if ([activityType isEqualToString:UIActivityTypeMail]) { return [NSString stringWithFormat:@"来自%@的分享:%@", self.appName, self.title]; } return nil; } // 指定数据类型(对图片分享很重要) - (NSString *)activityViewController:(UIActivityViewController *)activityViewController dataTypeIdentifierForActivityType:(UIActivityType)activityType { if (self.image && [activityType isEqualToString:UIActivityTypeAirDrop]) { if (@available(iOS 14.0, *)) { return UTTypePNG.identifier; } else { return @"public.png"; } } if (@available(iOS 14.0, *)) { return UTTypeText.identifier; } else { return @"public.plain-text"; } } // 提供链接预览元数据 - (LPLinkMetadata *)activityViewControllerLinkMetadata:(UIActivityViewController *)activityViewController { LPLinkMetadata *metadata = [[LPLinkMetadata alloc] init]; // 设置标题 metadata.title = self.title; // 使用 originalURL 技巧显示副标题 if (self.subtitle.length > 0) { metadata.originalURL = [NSURL fileURLWithPath:self.subtitle]; } // 设置实际URL if (self.url) { metadata.URL = self.url; } // 设置图标 - 优先使用应用图标,其次使用分享图片 UIImage *iconToUse = self.appIcon ?: self.image; if (iconToUse) { metadata.iconProvider = [[NSItemProvider alloc] initWithObject:iconToUse]; } // 如果有图片且不同于图标,设置为预览图 if (self.image && self.image != iconToUse) { metadata.imageProvider = [[NSItemProvider alloc] initWithObject:self.image]; } return metadata; } #pragma mark - 私有方法 - 不同分享文本格式 - (NSString *)fullShareText { NSMutableString *text = [NSMutableString string]; if (self.title.length > 0) { [text appendFormat:@"📱 %@\n\n", self.title]; } if (self.subtitle.length > 0) { [text appendFormat:@"%@\n\n", self.subtitle]; } if (self.url) { [text appendFormat:@"🔗 %@\n\n", self.url.absoluteString]; } [text appendFormat:@"—— 来自 %@ ——", self.appName]; return text.copy; } - (NSString *)emailShareText { NSMutableString *text = [NSMutableString string]; [text appendString:@""]; if (self.title.length > 0) { [text appendFormat:@"

📱 %@

", self.title]; } if (self.subtitle.length > 0) { [text appendFormat:@"

%@

", self.subtitle]; } if (self.url) { [text appendFormat:@"

🔗 点击访问

", self.url.absoluteString]; } [text appendFormat:@"

通过 %@ 分享", self.appName]; [text appendString:@""]; return text.copy; } - (NSString *)messageShareText { if (self.url) { return [NSString stringWithFormat:@"📱 %@\n%@", self.title, self.url.absoluteString]; } return [NSString stringWithFormat:@"📱 %@\n%@", self.title, self.subtitle]; } - (NSString *)notesShareText { NSMutableString *text = [NSMutableString string]; [text appendFormat:@"📝 %@\n", self.title]; [text appendString:@"━━━━━━━━━━━━━━━━━━━━\n\n"]; if (self.subtitle.length > 0) { [text appendFormat:@"📄 %@\n\n", self.subtitle]; } if (self.url) { [text appendFormat:@"🔗 链接:%@\n\n", self.url.absoluteString]; } NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; formatter.dateFormat = @"yyyy-MM-dd HH:mm"; [text appendFormat:@"⏰ 保存时间:%@\n", [formatter stringFromDate:[NSDate date]]]; [text appendFormat:@"📱 来源:%@", self.appName]; return text.copy; } - (NSString *)socialShareText { NSMutableString *text = [NSMutableString string]; if (self.title.length > 0) { [text appendFormat:@"📱 %@ ", self.title]; } if (self.url) { [text appendFormat:@"%@ ", self.url.absoluteString]; } [text appendFormat:@"#%@ #分享 #推荐", [self.appName stringByReplacingOccurrencesOfString:@" " withString:@""]]; return text.copy; } @end