iOS 13环境下Twitter图文视频分享方案咨询
iOS 13+ 实现Twitter图文视频分享的最优方案
我来帮你捋捋iOS 13及以上版本里实现Twitter图文视频分享的靠谱方案——毕竟你提到的SLServiceTypeTwitter早在iOS 11就被弃用了,确实没法再用啦。
方案一:直接唤起已安装的Twitter App分享(首推!)
这个方法完全不需要用户授权,直接跳转到用户已安装的Twitter App完成分享,不仅开发成本低,用户体验也最自然,是普通场景下的最优选择。核心是用Twitter的URL Scheme和文档交互控制器来实现。
图文分享代码示例
// 准备分享文本和图片 NSString *shareText = @"这里是你要分享的文字内容"; UIImage *shareImage = [UIImage imageNamed:@"twitter.png"]; // 先检查Twitter App是否已安装 NSString *twitterSchemeURLStr = [NSString stringWithFormat:@"twitter://post?message=%@", [shareText stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]]]; NSURL *twitterSchemeURL = [NSURL URLWithString:twitterSchemeURLStr]; if ([[UIApplication sharedApplication] canOpenURL:twitterSchemeURL]) { // 把图片存到临时文件,用文档交互控制器唤起Twitter分享 NSURL *tempImageURL = [self saveImageToTempPath:shareImage]; UIDocumentInteractionController *docController = [UIDocumentInteractionController interactionControllerWithURL:tempImageURL]; docController.UTI = @"com.twitter.post"; // 指定Twitter的分享UTI docController.delegate = self; [docController presentOpenInMenuFromRect:CGRectZero inView:self.view animated:YES]; } else { // 如果没装Twitter App,引导用户用网页版分享 NSString *webShareURLStr = [NSString stringWithFormat:@"https://twitter.com/intent/tweet?text=%@", [shareText stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]]]; [[UIApplication sharedApplication] openURL:[NSURL URLWithString:webShareURLStr] options:@{} completionHandler:nil]; } // 辅助方法:将UIImage保存到临时目录 - (NSURL *)saveImageToTempPath:(UIImage *)image { NSData *imageData = UIImagePNGRepresentation(image); NSString *tempFilePath = [NSTemporaryDirectory() stringByAppendingPathComponent:@"twitter_share_image.png"]; [imageData writeToFile:tempFilePath atomically:YES]; return [NSURL fileURLWithPath:tempFilePath]; }
视频分享代码示例
视频分享逻辑和图片类似,只需传入本地视频文件的URL即可:
// 假设你已经有了本地视频的URL NSURL *localVideoURL = [NSURL fileURLWithPath:@"/path/to/your/video.mp4"]; UIDocumentInteractionController *docController = [UIDocumentInteractionController interactionControllerWithURL:localVideoURL]; docController.UTI = @"com.twitter.post"; docController.delegate = self; [docController presentOpenInMenuFromRect:CGRectZero inView:self.view animated:YES];
⚠️ 注意事项:
- 要在
Info.plist中添加LSApplicationQueriesSchemes,加入twitter,否则无法检测App是否安装:
<key>LSApplicationQueriesSchemes</key> <array> <string>twitter</string> </array>
- 必须实现
UIDocumentInteractionControllerDelegate的documentInteractionControllerViewControllerForPreview:方法,返回当前的ViewController:
- (UIViewController *)documentInteractionControllerViewControllerForPreview:(UIDocumentInteractionController *)controller { return self; }
方案二:使用Twitter API分享(需用户授权)
如果你的需求是必须在App内完成分享,不能跳转第三方App,那只能走Twitter API这条路。但这个方式步骤繁琐:
- 去Twitter开发者平台创建应用,获取API Key和Secret;
- 集成OAuth 1.0a完成用户登录授权;
- 先调用媒体上传接口上传图片/视频,再调用推文接口发布内容。
这种方式的优点是可以完全自定义分享界面,但缺点是开发成本高,还需要用户登录Twitter账号,门槛比较高,只适合特殊场景。
方案对比总结
| 方案 | 是否需要授权 | 开发成本 | 用户体验 | 适用场景 |
|---|---|---|---|---|
| 唤起Twitter App分享 | ❌ 不需要 | 低 | 优秀 | 绝大多数普通分享场景 |
| Twitter API分享 | ✅ 需要 | 高 | 一般 | 必须在App内完成分享的特殊场景 |
总的来说,优先选择唤起Twitter App的方案,既省心又好用。
内容的提问来源于stack exchange,提问作者San007
相关产品推荐
相关产品推荐

