Can't Share to Facebook/Twitter Using UIActivityViewController

起因

上周,收到一个用户反馈——来自用户量很小的App,希望我能够使用iPhone的原生分享功能。他这里指的是使用 UIActivityViewController 进行的分享,这一点可以从描述中清楚地发现。
iOS6开始就引入了 UIActivityViewController,随后又引入了 SocialKit,但是我一直没有使用。原因主要是:

  • 需要iPhone预先安装分享平台的app且登录过后,方可分享

作为一个兼产品经理的技术人员,我深深地明白不能每次“有求必应”,但是这次鉴于app用户量小,于是打算通过在设置中添加开关的方式,启用 UIActivityViewController
UIActivityViewController 的使用非常简单,直接看示例:

NSArray *objectsToShare = @[shareImage, text, customProvider];
UIActivityViewController *activityVC = [[UIActivityViewController alloc] initWithActivityItems:objectsToShare applicationActivities:nil];
[self presentViewController:activityVC animated:YES completion:nil];

其中,objectsToShare 就是待分享的数据,可以是 UIImage,NSString, NSURL或是自定义的UIActivityItemProvider子类。这种用法没有问题,在真机上测试的时候,Facebook和Twitter的icon也显示出来了,但是点击后,没有反应–尽管此时iPhone可以访问Google。从回调中的记录来看,点击Facebook后分享没有完成,但是没有 error信息。

分析、诊断和解决

因为官方文档中关于 UIActivityViewController 的内容不多,而且这种类的使用,按部就班没有太多的技巧。于是,只能搜索Google,在stackoverflow上转了一圈,也没有头绪。搜索出来的内容,大多是和 UIActivityViewController 的使用相关,例如想禁止Twitter显示等等。其中有点价值的内容,就是有人提到需要下载并登录Facebook或Twitter。为此我在登录进Twitter后还重启了iPhone,结果还是不能分享。
因为考虑到国情的特殊性,我开始往其它方面思索,但因为通过某些方式,iPhone可以登录Facebook,这一度让人很奔溃。整个周末,官方文档看了不下五遍!结果呢,今天因为机缘巧合,我把app安装到了非国行的手机上,意外地发现分享到Facebook和Twitter成功了!
到这里,我一边兴奋,一边在心里默默地问候了一下。之前听说过日本的iPhone拍照的声音无法静音,却没有想到我大国行的机子,居然还有不能分享到的平台!
唉,也不多说了。只能记住:以后遇到类似的情形,当能排除技术问题的时候,就要朝其它方向思考解决了。

Comments