Facebook Unity SDK 测试用户登录
Posted
技术标签:
【中文标题】Facebook Unity SDK 测试用户登录【英文标题】:Facebook Unity SDK Test User login 【发布时间】:2014-04-07 16:21:09 【问题描述】:我无法找到任何特定于我遇到的这个问题的信息,所以我想我会在这里发布。
我正在开发一个带有 Facebook SDK 插件的 android Unity 应用程序。在 Unity 编辑器中工作时,我可以通过他们的访问令牌与我的测试用户一起登录。但是,将应用程序部署到 Android 设备时,这取决于设备上是否安装了 Facebook 应用程序本身。
如果设备上安装了 Facebook 应用,我的测试用户根本无法登录。如果我卸载 Facebook 应用程序,测试用户按预期成功登录。
是否有设置/配置更改/API 调用,我需要做些什么来解决这个问题?显然,无论设备是否安装了应用程序,我都希望我的应用程序登录。
非常感谢您提供的任何信息
编辑:我应该澄清一下 - 如果安装了 Facebook 应用,当用户通过我的应用登录时,它确实使用 Facebook 应用登录,但不会在其中登录我的应用
更多信息可以缩小范围(我很抱歉它很长): 一旦测试用户帐户确实在我的应用程序中成功登录(没有在设备上安装 Facebook 应用程序本身),从那时起,测试用户帐户将登录到我的应用程序就好了已安装 Facebook 应用程序。
场景:
为我的应用配置了测试用户“Bob”,已预安装配置
“Bob”每次都会通过 Unity 编辑器使用令牌登录,问题仅在设备上
平板电脑安装了 Facebook 应用
在设备上运行我的应用,尝试使用“Bob”登录
Facebook 应用登录对话框为登录实例化。
弹出应用授权对话框,点击确定批准
我的应用返回主场景,但“Bob”没有登录
打开Facebook App,发现“Bob”登录Facebook App就好了
从设备上卸载 Facebook 应用
运行我的应用程序(清除数据后),尝试再次登录“Bob”
实例化较小的 Facebook 登录对话框,然后是身份验证对话框
“Bob”可以正常登录我的应用
现在 - 这是我发现的其他内容。与这种情况相一致 - 一旦我通过我的应用程序首次成功登录测试用户帐户,我可以重新安装 Facebook 应用程序,并且它不会影响再次登录。一旦他使用我的应用程序登录过一次,从那时起他就没事了。但是,如果在尝试登录并第一次批准应用程序时安装了 Facebook 应用程序,它会失败。
根据要求,这里是登录尝试失败的 logcat。看起来肯定有几个问题,一个权限异常立即发生,也许它会慢慢渗透导致一切失败。我不确定为什么会出现权限问题,因为我只发送电子邮件和 publish_actions 请求,就像在示例中一样。最后,调用我的 OnInitCallback 并指示登录已取消(即使出现了授权对话框并单击了 OK)。也许这就是当事情发生爆炸时,FB 雄辩地退出的方式?没有把握。无论如何,我仍然无法解决发生这种情况的方式和原因。也许我不应该担心它,只是希望并祈祷发布版本和实际用户能够正常连接?
W/fb4a(:<default>):BlueServiceQueue(28412): Exception during service
W/fb4a(:<default>):BlueServiceQueue(28412): com.facebook.http.protocol.ApiExcept
ion: The app cannot ask for publish or manage permissions along with read permis
sions.
W/fb4a(:<default>):BlueServiceQueue(28412): at com.facebook.http.protocol.Ap
iResponseChecker.b(ApiResponseChecker.java:83)
W/fb4a(:<default>):BlueServiceQueue(28412): at com.facebook.http.protocol.Ap
iResponseChecker.a(ApiResponseChecker.java:162)
W/fb4a(:<default>):BlueServiceQueue(28412): at com.facebook.http.protocol.Ap
iResponse.g(ApiResponse.java:151)
W/fb4a(:<default>):BlueServiceQueue(28412): at com.facebook.platform.auth.se
rver.AuthorizeAppMethod.a(AuthorizeAppMethod.java:275)
W/fb4a(:<default>):BlueServiceQueue(28412): at com.facebook.platform.auth.se
rver.AuthorizeAppMethod.a(AuthorizeAppMethod.java:31)
W/fb4a(:<default>):BlueServiceQueue(28412): at com.facebook.http.protocol.Ap
iResponseHandler.a(ApiResponseHandler.java:55)
W/fb4a(:<default>):BlueServiceQueue(28412): at com.facebook.http.protocol.Ap
iResponseHandler.handleResponse(ApiResponseHandler.java:28)
W/fb4a(:<default>):BlueServiceQueue(28412): at com.facebook.http.common.FbHt
tpRequestProcessor.a(FbHttpRequestProcessor.java:314)
W/fb4a(:<default>):BlueServiceQueue(28412): at com.facebook.http.common.FbHt
tpRequestProcessor.a(FbHttpRequestProcessor.java:144)
W/fb4a(:<default>):BlueServiceQueue(28412): at com.facebook.http.common.FbHt
tpRequestProcessor.b(FbHttpRequestProcessor.java:100)
W/fb4a(:<default>):BlueServiceQueue(28412): at com.facebook.http.common.FbHt
tpRequestProcessor.a(FbHttpRequestProcessor.java:230)
W/fb4a(:<default>):BlueServiceQueue(28412): at com.facebook.http.protocol.Si
ngleMethodRunnerImpl.a(SingleMethodRunnerImpl.java:402)
W/fb4a(:<default>):BlueServiceQueue(28412): at com.facebook.http.protocol.Si
ngleMethodRunnerImpl.a(SingleMethodRunnerImpl.java:164)
W/fb4a(:<default>):BlueServiceQueue(28412): at com.facebook.http.protocol.Ab
stractSingleMethodRunner.a(AbstractSingleMethodRunner.java:18)
W/fb4a(:<default>):BlueServiceQueue(28412): at com.facebook.platform.common.
server.SimplePlatformOperation.a(SimplePlatformOperation.java:40)
W/fb4a(:<default>):BlueServiceQueue(28412): at com.facebook.platform.common.
server.PlatformOperationHandler.a(PlatformOperationHandler.java:60)
W/fb4a(:<default>):BlueServiceQueue(28412): at com.facebook.fbservice.servic
e.BlueServiceQueue.e(BlueServiceQueue.java:329)
W/fb4a(:<default>):BlueServiceQueue(28412): at com.facebook.fbservice.servic
e.BlueServiceQueue.d(BlueServiceQueue.java:55)
W/fb4a(:<default>):BlueServiceQueue(28412): at com.facebook.fbservice.servic
e.BlueServiceQueue$3.run(BlueServiceQueue.java:258)
W/fb4a(:<default>):BlueServiceQueue(28412): at java.util.concurrent.Executor
s$RunnableAdapter.call(Executors.java:422)
W/fb4a(:<default>):BlueServiceQueue(28412): at java.util.concurrent.FutureTa
sk.run(FutureTask.java:237)
W/fb4a(:<default>):BlueServiceQueue(28412): at com.facebook.common.executors
.ListenableScheduledFutureImpl.run(ListenableScheduledFutureImpl.java:59)
W/fb4a(:<default>):BlueServiceQueue(28412): at android.os.Handler.handleCall
back(Handler.java:733)
W/fb4a(:<default>):BlueServiceQueue(28412): at android.os.Handler.dispatchMe
ssage(Handler.java:95)
W/fb4a(:<default>):BlueServiceQueue(28412): at android.os.Looper.loop(Looper
.java:136)
W/fb4a(:<default>):BlueServiceQueue(28412): at android.os.HandlerThread.run(
HandlerThread.java:61)
W/fb4a(:<default>):GDPDialog(28412): Failed to send
W/fb4a(:<default>):GDPDialog(28412): com.facebook.fbservice.service.ServiceExcep
tion: API_ERROR: API_ERROR
W/fb4a(:<default>):GDPDialog(28412): at com.facebook.fbservice.ops.BlueServic
eOperation.c(BlueServiceOperation.java:639)
W/fb4a(:<default>):GDPDialog(28412): at com.facebook.fbservice.ops.BlueServic
eOperation.c(BlueServiceOperation.java:47)
W/fb4a(:<default>):GDPDialog(28412): at com.facebook.fbservice.ops.BlueServic
eOperation$2.run(BlueServiceOperation.java:604)
W/fb4a(:<default>):GDPDialog(28412): at android.os.Handler.handleCallback(Han
dler.java:733)
W/fb4a(:<default>):GDPDialog(28412): at android.os.Handler.dispatchMessage(Ha
ndler.java:95)
W/fb4a(:<default>):GDPDialog(28412): at android.os.Looper.loop(Looper.java:13
6)
W/fb4a(:<default>):GDPDialog(28412): at android.app.ActivityThread.main(Activ
ityThread.java:5017)
W/fb4a(:<default>):GDPDialog(28412): at java.lang.reflect.Method.invokeNative
(Native Method)
W/fb4a(:<default>):GDPDialog(28412): at java.lang.reflect.Method.invoke(Metho
d.java:515)
W/fb4a(:<default>):GDPDialog(28412): at com.android.internal.os.ZygoteInit$Me
thodAndArgsCaller.run(ZygoteInit.java:779)
W/fb4a(:<default>):GDPDialog(28412): at com.android.internal.os.ZygoteInit.ma
in(ZygoteInit.java:595)
W/fb4a(:<default>):GDPDialog(28412): at dalvik.system.NativeStart.main(Native
Method)
V/FBUnitySDK(30488): sending to Unity OnLoginComplete("cancelled":true,"key_has
h":"(my keyhash was here)")
【问题讨论】:
您不需要做任何特别的事情。尝试查看标签 fb4a 下的 logcat 输出 - 这些是来自 Facebook android sdk 的日志消息。有什么奇怪的吗? 谢谢你的想法,juraj - 没想到运行 logcat 真是太愚蠢了。我编辑了我的问题,添加了更多信息并包含了我能找到的内容。抱歉,篇幅较长。 【参考方案1】:我们有测试用户在安装了 FB 应用 (sdk 5.0.4) 的情况下在 Android 上登录我们的 unity 应用。
FB.Login("email,publish_actions", 回调)
如果您有不同的范围,请尝试删除一些,因为日志中的异常表明这是问题所在。在 Facebook 文档中,只读权限和发布权限应分别设置: https://developers.facebook.com/docs/facebook-login/permissions/#publishing
一旦用户登录一次,登录/验证发生在 FB.Init() 中,因此采用不同的代码路径。
【讨论】:
感谢您的反馈和想法,鲍勃。我实际上也在使用 FB.Init("email, publish_actions", callback) ,没有任何额外的东西,就像在提供的示例中一样。我很好奇,即使我已经清除了应用程序的所有数据,甚至卸载并重新安装了它,FB.Init() 代码也会运行不同的路径吗?显然,我仍在痛苦地学习 FB 的细微差别,所以我不确定其中的一些细节。我问是因为即使我卸载我的应用程序并重新安装它,该特定用户仍然会得到相同的结果,具体取决于他们之前是否登录过。 哦,刚看到你的帖子。调用不带参数的 FB.Init() 然后 FB.Login("permissions you need") 这是我在评论中的错误 - 我的意思是 FB.Login("email, publish_actions", callback),而不是 FB.Init。 :/ 对于那个很抱歉。我的 FB.Init 只提供 OnInit 回调和 OnHideUnity 回调。我也尝试删除 publish_actions,但仍然有相同的结果。现在我只是将其标记为答案,因为它肯定与 Bob 以某种方式指出的内容相关联。我只需要弄清楚如何解决它,或者只是在开发中不使用 FB 测试用户。感谢你们在这方面的帮助,非常感谢。以上是关于Facebook Unity SDK 测试用户登录的主要内容,如果未能解决你的问题,请参考以下文章
无法登录 / Facebook Unity SDK & Android
Facebook Unity SDK iOS 登录不使用系统级登录,而是使用浏览器或 Facebook 应用程序
无法使用测试用户通过 Facebook iOS SDK 3 登录