因为之前只需要分享到QQ/微信/新浪等,这些直接按照友盟的文档来写就行了。但是分享FaceBook的话有所不同,会遇到各种各样的问题,被狠狠折腾了一番。
本来想从头到尾写完整版的,又一想到自己去百度/谷歌搜索都是这样的文章。基础的东西都是差不多的,实在没什么必要。所以我就写一些我认为很重要的东西吧。
一. 设置Facebook的appKey和UrlString
[[UMSocialManager defaultManager] setPlaform:UMSocialPlatformType_Facebook appKey:@"506027402887373" appSecret:nil redirectURL:@"http://www.umeng.com/social"];
这里注意不需要秘钥Secret
,url填写为你在FaceBook里边填写的那个就可以了。
二. 除配置URL Scheme外,Facebook SDK还要求在info.plist文件中加入FacebookAppID和FacebookDisplayName两项参数
配置info.plist
* 除配置URL Scheme外,Facebook SDK还要求在info.plist文件中加入两项参数,分别是:
* FacebookAppID
* FacebookDisplayName
* 以上参数值是在Facebook开发者平台[https://developers.facebook.com/apps](https://developers.facebook.com/apps) 设置并获取对应的`AppID`和`Display Name`
* 如U-Share Demo的测试AppID为506027402887373, Display Name为UmengShare。则加入两项参数为
* FacebookAppID : 506027402887373
* FacebookDisplayName : UmengShare
U-Share 6.9.3更新Facebook说明
Facebook SDK版本:4.33.0。在2018年中Facebook对SDK进行了重大改动,详情见 [https://developers.facebook.com/docs/graph-api/changelog/breaking-changes/?translation](https://developers.facebook.com/docs/graph-api/changelog/breaking-changes/?translation)
三. URL Types
四. 白名单的配置
怎么打开白名单我就不写了,友盟给的白名单可能在实际调试的时候有点问题,所以这里一下给你关于FaceBook所有的
<string>fbapi</string>
<string>fb-messenger-api</string>
<string>fb-messenger-share-api</string>
<string>fbauth2</string>
<string>fbshareextension</string>
<string>fbapi20130214</string>
<string>fbapi20130410</string>
<string>fbapi20130702</string>
<string>fbapi20131010</string>
<string>fbapi20131219</string>
<string>fbapi20140410</string>
<string>fbapi20140116</string>
<string>fbapi20150313</string>
<string>fbapi20150629</string>
<string>fbapi20160328</string>
<string>fbauth</string>
<string>fb-messenger-api20140430</string>
<string>fb-messenger-platform-20150128</string>
<string>fb-messenger-platform-20150218</string>
<string>fb-messenger-platform-20150305</string>
当然,你也可以参考FaceBook官方给的白名单配置:白名单 (需要翻墙)
五. 敲黑板!敲黑板!敲黑板!调用FaceBook的分享!
我之前使用的友盟来调用FaceBook分享
先说有一下我遇到的问题:
- 未安装FaceBook App时,有些版本的iPhone无法打开web页面进行登录授权。
- 安装FaceBook App但是未登录时,有些版本的iPhone无法打开web页面进行登录请求。
- 安装FaceBook App并且登录时候,分享到FaceBook的链接不能包含中文,不然分享链接直接失效不显示了。
因为我本来就是自己写的分享面板,所以关于第一第二个问题的解决方案是,在判断当前是分享到FaceBook时,调用FaceBook自己的分享,不使用友盟的分享方法。
1. 添加头文件
友盟的包里就有不用单独下载,直接写就行了。
#import <FBSDKShareKit/FBSDKShareKit.h>
2. 调用FaceBook的原生分享
FBSDKShareLinkContent *content = [[FBSDKShareLinkContent alloc] init];
NSString *urlStr = [weakSelf.urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
content.contentURL = [NSURL URLWithString:urlStr];
FBSDKShareDialog *dialog = [[FBSDKShareDialog alloc] init];
dialog.fromViewController = self;
dialog.shareContent = content;
if ([[UMSocialManager defaultManager] isInstall:UMSocialPlatformType_Facebook]) {
dialog.mode = FBSDKShareDialogModeNative;
} else {
dialog.mode = FBSDKShareDialogModeAutomatic;
}
[dialog show];
先去用友盟的方法判断是否安装了FaceBook,如果没安装就使用FBSDKShareDialogModeAutomatic
安装了FaceBook就使用FBSDKShareDialogModeNative
这个dialog.mode
是个枚举,有Automatic、Navtive、ShareSheet、Browser、Web......官方给的方法里是使用FBSDKShareDialogModeShareSheet
,但是它是在你的App内部打开一个fb的分享面板给你使用,并不会跳转到FaceBook内,所以你没登录的话,不会有任何反应~
然后换成dialog.mode = FBSDKShareDialogModeNative;
只要安装了FaceBook就一定打开原生,GOOD!
最后:
关于友盟分享的配置,以及FaceBook的分享,可以参考以下内容:
友盟第三方分享、授权
关于友盟Facebook分享的问题
iOS中Facebook登录相关知识碎片整理(三方登录SDK为友盟)
iOS Facebook 分享中的坑
2018-01-16 集成友盟分享、登录、统计