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 UNITY SDK 登录问题

无法使用测试用户通过 Facebook iOS SDK 3 登录

Android上的Unity Facebook SDK登录错误

使用 Facebook 令牌的 Firebase Unity SDK 身份验证