转自:http://blog.csdn.net/piao_polar/article/details/46742043

之前工作需要在手游中接入了facebook,并以此写了《手游接入Facebook功能》的博文。当时facebook sdk的版本还是3.x,代码集成度比较低,集成起来也比较麻烦。文中只是稍微提了下功能,然后扔了个github的demo链接,对一些细节问题没有描述。

之后公司里另外一个项目也有facebook的接入需求,并且由他们的运营方来具体实现,我们当时就facebook权限审核等问题讨论的比较频繁,以至于后来他们直接建了一个Facebook SDK开发群,不想后面常常有其他开发者搜索到这个群来交流问题。facebook sdk也更新了4.x版本(接口全变,但更优雅了。github上的demo,android版本已更新使用4.x sdk),感觉不少问题可以记录下来备忘,于是就有了本文。

1. 关于是否需要上传app给facebook审核:https://developers.facebook.com/docs/facebook-login/permissions/#noreview

a) 不需要审核的功能点:

使用FB进行第三方登录:Facebook Login 
   获取已登录FB账号的相关信息,权限:public_profile
   获取已登录FB账号的同应用好友信息,权限:user_friends
   使用FB应用邀请功能:App Invites
   使用FB分享存文本或链接:Sharing
   在设备上存在Facebook客户端的情况下,分享本地图片

b) 需要审核的功能点:

非测试账号,在设备上不存在Facebook客户端的情况下,直接通过FB API分享本地图片 权限:publish_actions

2. 关于FB审核:

FB审核和苹果审核相比,速度很快,经常一个工作日就给结果。但他们返回的错误说明太格式化,也比较简略。也许会让人感觉莫名所以。而且似乎没有申诉过程,对审核结果不满意只好说明写详细点再提交一次。
   由于审核的是权限而不是app本身,也不通过FB来发行。我们可以针对审核出一个版本,反正到时候审核过了,真正上架的版本可以另出

a) 拒绝理由:我们无法在此平台上重现您所请求的功能的个性化体验。请提交使用此功能的应用版本,并附上详细的步骤指示。

由于FB的审核人员和苹果的审核不一样,他们大部分看不懂中文。
 
   解决方案:步骤和描述最好用英文写的细致点,提交的配图也加上1.2.3的顺序,和足够的标注。
   藏在比较深的功能,可以专门做一个审核版本,放在容易触发的地方。比如我原先分享截图是在战斗结束后分享,审核总是说顺利进行分享,最后我提交FB审核的版本直接在登录界面放了一个分享按钮,就解决这个问题了。

b) 拒绝理由:用户必须在用户消息字段输入所有内容

分享不能有预置内容。比如你试图在分享截图的时候,自动填充“XXX游戏真好玩,你也一起来玩吧”之类的话,审核有可能会驳回(那你SDK给这个接口干嘛……)
   
   解决方案:同上,依然是出审核版本的时候别填充,正式版本暗度陈仓就是了……

c) 拒绝理由:这个权限你的应用莫须有。

比如:您的应用使用社交插件或分享对话框将内容分享至Facebook。这些操作不需要publish_actions权限,也不需要接受审核。

我遇到的情况是有分享截图的需求,申请publish_actions的时候遇到。这个其实是审核人员的考虑不周的问题。如上述审核功能点部分所说,如果用户的设备上没有FB app,那么分享本地文件是需要这个权限的。

解决方案:再次提交,且在重现步骤中强调,在一个没有安装FB app的设备中分享本地图片是需要权限的。还可以上传包含这个的截图(换成你自己在相应权限下的截图)给他看提高说服力,然后祈祷下次审核的人员能认真和专业点。

d) 拒绝理由:Your app must not use a Facebook Web Dialog.Utilize our native Facebook Login SDK for iOS, so that users do not need to login twice.

   这个是一个比较坑爹的理由。因为第一句别用facebook web dialog,很容易让人误以为是任何情况下都不许用,但这不现实,因为没有FB app的情况下,你必须用到这个形式。其实真实的情况是:

你:说人话
   FB:在设备上存在FB app的情况下,别用web dialog的形式让用户登录。

这样应该就理解了吧。

解决方案:检查在有FB app的情况下,调用登录接口时,会转向到FB app去登录(如果FB app是已登录状态则不需要再登录)。而不是弹出浏览器页面或者在应用内弹出窗口让用户输入密码。
             在FB控制台,Settings页下把Single Sign On 开起来。

3. 疑难杂症

a) 用具有测试权限或更高权限的号可以登录,普通账号无法登录。

因为应用没有设置成对外可用的状态。

解决方案:去FB控制台,Status&Review分页下,把右上角“Do you want to make this app and all its live features available to the general public?”边上那个大大的开关设置成开的状态。

b) 集成代码貌似都加上了,但触发相关功能没效果或会闪退

一般是文档没读仔细还是有缺漏导致的。把两个版本的Getting Started一节再看看检查一遍。

android:AndroidManifest.xml里 FB相关的 provider/meta-data/activity 没加,或者没改成对应SDK版本的格式 ( 3.x/4.x的provider和activity的内容都略有变化 )
            strings.xml 里 facebook_app_id 没加

iOS:plist 里面 FacebookAppID / FacebookDisplayName / URL types
        application delegate 里面 applicationDidBecomeActive/didFinishLaunchingWithOptions/openURL 没添加响应的FB代码

c) 进入登录成功回调,有AccessToken,但Profile数据不正常

解决方案:先参考前面一点,看看是不是都加好了。

android:在获取到AccessToken后调用 Profile.fetchProfileForCurrentAccessToken();

iOS:添加 [FBSDKProfile enableUpdatesOnAccessTokenChange:YES];

d) 实现App Invite的时候提示App Link有问题

解决方案:这个Link必须去FB创建: https://developers.facebook.com/quickstarts/?platform=app-links-host

e) App Invite调用成功后对方收不到消息:

如果对方已经安装了这个应用,那么你得他的FB账号设置成测试者,才能再次收到消息。见 官网说明Testing一节

参: http://stackoverflow.com/questions/29484815/fbsdkappinvitedialog-in-facebook-ios-sdk-version-4-0-1-invite-successfully-sent

4. 其他

a) 使用 Graph API Explorer 。

可以比较方便的模拟数据来回,也可以用来清理权限。

b) 如果升级到iOS SDK 4.x,那么就不再支持iOS7以下的系统了,比如iOS6。这个得和运营商量好。

c) 写本文的时候,由于之前都没保存截图,所以用的基本都是群里或者私聊中别人的截图。发现他们的截图貌似都是中文的,而我当时自己遇到的审核错误提示貌似都是英文的

后面才发现官网页面最下方,FB官方可以选择一个查看页面的语言,部分页面有FB的官方翻译。英文苦手的可以考虑使用。

不过直接看英文可能会更好,因为不是所有的页面都有官方翻译版本,有的页面翻译可能是过期的,而且google的时候,通常用英文做关键词才方便从StackOverFlow找到有用的信息

5. 资源

a) FB官方的SDK源码和demo

https://github.com/facebook
    https://github.com/facebookarchive

b) cocos2dx接入demo。 (FB SDK版本:Android 4.x/iOS 3.x)

https://github.com/piaopolar/FacebookPlugin/

c) FB SDK集成讨论QQ群:Facebook SDK开发 340348340

接入Facebook的那些坑(精)相关推荐

  1. 手游接入Facebook的那些坑

     原文出处:http://blog.csdn.net/piao_polar/article/details/46742043 之前工作需要在手游中接入了facebook,并以此写了<手游接入 ...

  2. (unity)新手接入Facebook登录,分享以及google登录,Android,IOS,OC接入篇

    最近接Android,IOS的Facebook登录,分享 以及Google登录,分享流程以及遇到的问题整理. 一. Android接入 google登录 第一步,前往 [ firebase] http ...

  3. Unity2019接入FaceBook登录详解(Android)

    Unity接入FaceBook 如何获取FaceBook SDK Unity导入Facebook SDK Unity代码 如何获取FaceBook SDK 注册前的准备工作 由于国内网络无法直接打开F ...

  4. unity 接入 Facebook 登录

    Unity 接入 Facebook 登录 Unity 接入 Facebook 登陆 使用unity sdk 到这 https://developers.facebook.com/docs/unity/ ...

  5. 京东api接入的几个坑(宙斯) 转载

    ===== [ 京东api接入的几个坑(宙斯) 原创 2014年10月30日 17:43:51 8719 写这篇文章为了发下牢骚,鄙视下京东api上的不足, 怀念下下午的2个小时..... http: ...

  6. 接入FaceBook登录和遇到问题排查

    一.接入Facebook登录 接入流程: 接入流程:https://developers.facebook.com/docs/facebook-login/android 官方Demo:https:/ ...

  7. unity接入facebook SDK时 警告:“OpenSSL not found. Make sure that OpenSSL is installed

    接入facebook的SDK后配置FacebookSettings时警告OpenSSL not found. 解决方法: 1.下载并安装OpenSSL.http://slproweb.com/prod ...

  8. Android App接入Facebook分享SDK,概率性无法启动Facebook客户端的问题分析

    问题来源 由于我司的android app产品主要是面向海外,因此,app中的分享功能接入facebook分享是必不可少的.最近在接入facebook android sdk进行分享时,发现一个非常奇 ...

  9. Unity 接入Facebook

    最近由于项目需要,接入Fackbook.原先的已经有登录模块了,不过是shaderSDK的,考虑到国内这些插件会对数据动手脚,只有换掉了. 回到正题,接入的过程还是遇到不少问题,先整理下我的资料,以下 ...

最新文章

  1. POJ 3347 Kadj Squares(复杂的线段相交问题)
  2. mysql同步binlog_利用MySQL的Binlog实现数据同步与订阅(下)
  3. pyqt5讲解4:QDialog,QMessageBox,QInputDialog,QFontDialog,QFileDialog
  4. EF架构~了解一下,ADO.NET Entity Framework
  5. 程序员们的三高:高并发、高性能、高可用
  6. Leetcode--96. 不同的二叉搜索树(java)
  7. 常见特征检测算法介绍
  8. 看这篇就够了!一文读懂拜占庭将军问题
  9. outlook qr码在哪里_胡志明市第一次将QR码附加在街道名称板上,目的是什么?
  10. ubuntu MySQL的卸载
  11. Angular2.x
  12. php编网页版计算器,php编程实现简单的网页版计算器功能
  13. seo具体怎么优化-优化SEO的方法
  14. mysql分组取最新一条数据
  15. 『Photo Shop实用技巧』之 去除红眼
  16. color constancy dataset(白平衡仿真数据集)
  17. 3.Maven 常用命令
  18. Jasper导出excel
  19. 计算机操作系统期末复习,《计算机操作系统》期末复习课稿.docx
  20. OpenWrt开发者沙龙:立方体CEO何铮演讲

热门文章

  1. BIRT参数设置详解
  2. Quality Assessment Paper List(研二)
  3. 前端面试题 —— 浏览器原理(一)
  4. Linux FTP服务器架构
  5. 测试基础——测试分类和测试方法
  6. php sequelize,Sequelize中用group by进行分组聚合查询
  7. java统计 pv uv_PV UV QPS 并发数
  8. 小易准备去魔法王国采购魔法神器,购买魔法神器需要使用魔法币,但是小易现在一枚魔法币都没有,但是小易有两台魔法机器可以通过投入x(x可以为0)个魔法币产生更多的魔法币。
  9. 代理模式:aspectj静态代理和jdk,cglib的动态代理的对比
  10. 《计算机网络 自顶向下方法》读书笔记 第7章 无线网络和移动网络