之前工作须要在手游中接入了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

   在设备上存在Facebookclient的情况下,分享本地图片



b) 须要审核的功能点:



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






2. 关于FB审核:



   FB审核和苹果审核相比。速度非常快。常常一个工作日就给结果。

但他们返回的错误说明太格式化,也比較简略。或许会让人感觉莫名所以。并且似乎没有申诉过程,对审核结果不惬意仅仅好说明写具体点再提交一次。

   因为审核的是权限而不是app本身,也不通过FB来发行。我们能够针对审核出一个版本号,反正到时候审核过了。真正上架的版本号能够另出

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

因为FB的审核人员和苹果的审核不一样,他们大部分看不懂中文。

 

   解决方式:步骤和描写叙述最好用英文写的仔细点。提交的配图也加上1.2.3的顺序。和足够的标注。

   藏在比較深的功能,能够专门做一个审核版本号。放在easy触发的地方。

比方我原先分享截图是在战斗结束后分享,审核总是说顺利进行分享,最后我提交FB审核的版本号直接在登录界面放了一个分享button。就解决问题了。



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,非常easy让人误以为是不论什么情况下都不许用,但这不现实,由于没有FB app的情况下。你必须用到这个形式。事实上真实的情况是:



   你:说人话

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



   这样应该就理解了吧。



   解决方式:检查在有FB app的情况下。调用登录接口时。会转向到FB app去登录(假设FB app是已登录状态则不须要再登录)。而不是弹出浏览器页面或者在应用内弹出窗体让用户输入password。

在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的SDK

    手游如果支持facebook登录,就要接入facebook的登录SDK.刚好工作中自己做了这一块的接入功能现在记录分享下来提供一个参考. 当前只是接入了登录这个功能,先简单的说说接入facebook登 ...

  2. Facebook的手游出海之道

    对于不同的游戏公司,面临的同一个问题就是怎样让海外玩家能够一眼在App中发现你,成为你的新用户:不仅如此,怎样留住这些用户,让他们成为你游戏的忠实玩家也是让全部游戏开发商困扰的一个问题. w=580& ...

  3. 手游开发者大会交流OGEngine新版本发布

    由OGEngine第二个手游开发者交流会举办的圆桌会议在深圳市高新技术园区举行.发布会不仅吸引了手游开发商,供应商也纷纷在国外支付,在国内手游和国外出版商参加. 围绕三个主题会议讨论和交流.每个主题: ...

  4. 为测试赋能,腾讯WeTest探索手游AI自动化测试之路

    作者:周大军/孙大伟, 腾讯后台开发 高级工程师 商业转载请联系腾讯WeTest获得授权,非商业转载请注明出处.  WeTest导读 做好自动化测试从来不件容易的事情,更何况是手游的自动化测试,相比传 ...

  5. 建一座安全的“天空城” ——揭秘腾讯WeTest如何与祖龙共同挖掘手游安全漏洞

    作者:腾讯WeTest手游安全测试团队商业转载请联系腾讯WeTest获得授权,非商业转载请注明出处. WeTest导读 <九州天空城3D>上线至今,长期稳定在APP Store畅销排行的前 ...

  6. SLG手游Java服务器的设计与开发——架构分析

    微信公众号[程序员江湖] 作者黄小斜,斜杠青年,某985硕士,阿里 Java 研发工程师,于 2018 年秋招拿到 BAT 头条.网易.滴滴等 8 个大厂 offer,目前致力于分享这几年的学习经验. ...

  7. 七个要素帮你打造现象级手游!优化程度堪比《QQ飞车》

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由WeTest质量开放平台团队发表于云+社区专栏 作者:申江涛,腾讯互娱客户端工程师 商业转载请联系腾讯WeTest获得授权,非商业转载 ...

  8. 动作手游实时PVP帧同步方案(客户端)

    1.概述 1.1.基于UDP的帧同步方案 在技术选型方面,之所以选择帧同步方案,在Kevin的一篇介绍PVP帧同步后台实现的文章中已经做了详细叙述,这里简单摘要如下: 高一致性.如果每一帧的输入都同步 ...

  9. GJM :动作手游实时PVP 帧同步(客户端)[转载]

    原帖地址:http://gad.qq.com/article/detail/7171195 原文作者:唐声福  原帖备注:版权所有,禁止匿名转载:禁止商业使用:禁止个人使用. 1.概述 1.1.基于U ...

随机推荐

  1. Week 5a - Mouse input and more lists----learning notes

    pyton 程序内容的颠倒,运用 [](列表) def reverse_string(s): """Returns the reversal of the given s ...

  2. ThinkPHP第六天(正则表达式)

    1.正则表达式:原子 ①a-z,A-Z,0-9,_ ②用(abc)圆括号括起来的单元符号,表示括号里面的作为一个完整的组合,必须完成匹配,不被拆分来 ③用方括号括起来[abc][^abc]称之为原子表 ...

  3. 如何查看.Net源代码vs版本号以及C#项目中各文件的含义

    查看.Net源代码vs版本号以及C#项目中各文件的含义 用记事本打开vs项目的.sln文件. 第2行就是这个源代码包的开发软件vs版本号了 注意了,如果是vs2003的sln文件通常没有这行,可以判断 ...

  4. CSS3-旋转齿轮

    CSS3-旋转齿轮 查看DEMO 通过 CSS3,我们能够创建动画,这可以在许多网页中取代动画图片.Flash 动画以及 JavaScript. 先来认识一下css3的animation animat ...

  5. python笔记之列表与元组函数和方法使用举例

    在学习列表之前先了解了raw_input和input的区别:(仅适用于版本2,版本3中raw_input和input合并,没有raw_input) input的语法为:input("str& ...

  6. 在Windows环境下使用MinGW编译Qt 4.8.6

    1.修改环境变量工具推荐:Rapid Environment Editor.官网:http://www.rapidee.com/ 修改前请先备份当前的环境变量.然后: (1)检查系统变量path,删除 ...

  7. STL assign 和swap

    首先看下在整个container上面的复制. c1=c2 可以等同于 c1.erase(c1.begin(),c1.end()) //delete all elems in c1 c1.insert( ...

  8. (3)选择元素——(3)$()方法(The $() function)

    No matter which type of selector we want to use in jQuery, we always start with the same function: $ ...

  9. Robotium之Android控件定位实践和建议(Appium/UIAutomator姊妹篇)

    本人之前以前撰文描写叙述Appium和UIAutomator框架是怎样定位Android界面上的控件的. UIAutomator定位Android控件的方法实践和建议 Appium基于安卓的各种Fin ...

  10. ASP.NET事务存储过程

    --修改存储过程 alter proc proc_get_student as select * from student; asp.net 的事务就是针对数据层来处理的呀! 没有数据处理不能使用事务 ...