未安装推特的Twitter分享小结
2018-11-23 本文已影响53人
叫我李五
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-url、url-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]];
}