IOS-FaceBook,Twitter分享的问题

重点内容
在做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/

你可能感兴趣的:(IOS开发)