未安装推特的Twitter分享小结

Before

我们的App有面向海外用户作Facebook、Twitter分享内容的需求,而使用的是Facebook、Twitter的自家SDK。

Confuse

分享到Facebook的话,项目配置好就可以直接调起SDK使用了,未安装或安装客户端都能跳转。Twitter的话,对于已安装Twitter的设备可以跳转打开,未安装的设备可以调起iPhone内置的Twitter登录分享,但是这是仅限于海外的iPhone设备,对于国行手机却不行(-.-)。

Solve

看了Android Twitter的SDK的话,其模块里是作了Intent跳转处理的,即安装Twitter时正常跳转,未安装时跳转到浏览器分享,而iOS却没这样。Google了下,也没怎么找到解决方法,但细看了Twitter Developer文档,看到了Web端的分享是使用Web Intent作分享的,那不如就曲线救国解决一下吧。参考:Twitter for Websites

// 判断是否已安装了Twitter客户端
[SLComposeViewController isAvailableForServiceType:SLServiceTypeTwitter]

已安装Twitter客户端时,使用TWTRComposer类作内容分享。

未安装Twitter客户端时,通过Web Intent跳转,形如:https://twitter.com/intent/tweet

也别忘了需要对生成URL转码,参考stackoverflow:sharing-a-urlurl-encode

最后通过-canOpenURL跳转Safari打开分享。
- (nullable NSString *)stringByAddingPercentEscapesUsingEncoding:(NSStringEncoding)enc

// Example
NSMutableArray *parameter = [NSMutableArray array];
if (![description isEqualToString:@""]) {
    [parameter addObject:[NSString stringWithFormat:@"text=%@", description]];
}
if (![webURL isEqualToString:@""]) {
    [parameter addObject:[NSString stringWithFormat:@"url=%@", webURL]];
}
NSString *shareWebLink = [[NSString stringWithFormat:@"https://twitter.com/intent/tweet?%@",
[parameter componentsJoinedByString:@"&"]]
stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:shareWebLink]]) {
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:shareWebLink]];
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,638评论 25 708
  • 用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金 Cover 有什么料? 从这篇文章中你...
    hw1212阅读 12,993评论 2 59
  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明AGI阅读 16,019评论 3 119
  • 明知会后悔,但还是奋不顾身。想来,没有任何遗憾,期待,与你一起走剩下的时光,但我们还是被现实打败。有些人,即使再相...
    S踢蹬阅读 181评论 0 0
  • 《水形物语》在国内上映后,爱猫人群对两栖鱼人吃猫的镜头进行热议,认为吃猫的镜头太过残忍。单纯的站在爱猫人士的立场看...
    影评匠阅读 748评论 0 1