重点内容
在做FaceBook和Twitter分享的时候,遇到了几个问题:
1.点击分享,程序闪退。
2.点击分享,没有任何反应,没有任何提示。
经过用国内手机和日本手机的测试,解决了遇到的以上两个问题。解析和总结如下:
SLComposeViewController *vc = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeFacebook];
[vc setInitialText:body];
[vc addURL:[NSURL URLWithString:url]];
vc.completionHandler = ^(SLComposeViewControllerResult result){
if (result ==SLComposeViewControllerResultDone) {
.....
}
};
[self.targetVC presentViewController:vc animated:YES completion:nil];
Bug1:出现闪退的情况,我遇到这种情况是用国内手机运行才会出现的,用日本的手机不会出现闪退的情况。
原因:我用国内手机进行debug,发现SLComposeViewController *vc,vc为nil;
用日本手机进行debug, 发现SLComposeViewController *vc,vc不为空;
结果:如果vc为nil则走到[self.targetVC presentViewController:vc animated:YES completion:nil];这就会crash程序就会崩掉。
解决方法:
if (vc) {
[self.targetVC presentViewController:vc animated:YES completion:nil];
}
加一个判断,这样保证了用国内手机运行程序,点击分享的时候不会崩溃。
Bug2:正常情况下,如果没有登录facebook或者twitter,或者没有安装等情况,点击分享会有提示,让用户自己配置。但是用国内的手机就是没反应,什么都不提示,用日本手机会提示,所以一开始我认为是国家的问题,不同国家手机不同。后来经过调查发现是因为,加了
if ([SLComposeViewController isAvailableForServiceType:SLServiceTypeFacebook]) {
.....
SLComposeViewController *vc = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeFacebook];
[vc setInitialText:body];
[vc addURL:[NSURL URLWithString:url]];
vc.completionHandler = ^(SLComposeViewControllerResult result){
if (result ==SLComposeViewControllerResultDone) {
.....
}
};
[self.targetVC presentViewController:vc animated:YES completion:nil];
}
如果你的手机没有安装Facebook或者Twitter在外层加了[SLComposeViewController isAvailableForServiceType:SLServiceTypeFacebook]这个 判断,就不会走判断里面的方法,也就不会有分享功能的一些提示。我把程序外层的这个判断删掉后,用日本手机运行,点击分享,能正确提示alert,提示没有facebook需要下载或者配置。但国内手机依然不行,没有任何提示和反应。
通过日本网站的一些资料最后总结了以下情况会弹出提示框:
*日本手机总结:*
日本手机FaceBook总结表:
手机设定是否登录 | 是否下载FaceBook | 是否登录手机FaceBook | isAvailableForServiceType的值 | 是否能发布 |
---|---|---|---|---|
否 | 否 | 否 | NO | 不能 |
是 | 否 | 否 | YES | 能 |
否 | 是 | 否 | YES | 不能 |
是 | 是 | 否 | YES | 能 |
否 | 是 | 是 | YES | 能 |
是 | 是 | 是 | YES | 能 |
【情况1会弹出一个alert,内容不在这里说,重点是能弹出提示】
【情况3和情况4也会弹出一个alert,内容不在这里说,重点是能弹出提示】
日本手机Twitter总结表:
手机设定是否登录 | 是否下载Twitter | 是否登录手机Twitter | isAvailableForServiceType的值 | 是否能发布 |
---|---|---|---|---|
否 | 否 | 否 | NO | 不能 |
是 | 否 | 否 | YES | 能 |
否 | 是 | 否 | YES | 不能 |
是 | 是 | 否 | YES | 能 |
否 | 是 | 是 | YES | 能 |
是 | 是 | 是 | YES | 能 |
【情况1会弹出一个alert,内容不在这里说,重点是能弹】
【情况3也会弹出一个alert,内容不在这里说,重点是能弹】
*国内手机总结:*
国内手机FaceBook总结表:
手机设定是否登录 | 是否下载FaceBook | 是否登录手机FaceBook | isAvailableForServiceType的值 | 是否能发布 |
---|---|---|---|---|
否 | 否 | 否 | NO | 不能 |
是 | 否 | 否 | YES | 能 |
否 | 是 | 否 | YES | 不能 |
是 | 是 | 否 | YES | 能 |
否 | 是 | 是 | YES | 能 |
是 | 是 | 是 | YES | 能 |
【情况1不会像日本手机那样弹出一个提示,现象没有反应】
【情况3不会像日本手机那样弹出一个提示,现象没有反应】
日本手机Twitter总结表:
手机设定是否登录 | 是否下载Twitter | 是否登录手机Twitter | isAvailableForServiceType的值 | 是否能发布 |
---|---|---|---|---|
否 | 否 | 否 | NO | 不能 |
是 | 否 | 否 | YES | 能 |
否 | 是 | 否 | YES | 不能 |
是 | 是 | 否 | YES | 能 |
否 | 是 | 是 | YES | 能 |
是 | 是 | 是 | YES | 能 |
【情况1没有反应,不弹出提示】
【情况3没有反应,不弹出提示】
参考:http://dev.classmethod.jp/smartphone/iphone/sl-compose-view-controller/