好的,所以设法解决了这个问题,虽然我无法确定原因是什么,但我已经足够重写了我们的facebook连接类的初始化,登录和权限检查部分。我看不出与我们用于示例的流程有任何明显的区别,但显然有一些东西。无论如何,现在自动登录init似乎工作正常。
使用适用于Unity的Facebook插件的4.3.6版。注意到一点这个有点烦恼的错误。
用户登录并接受我们的权限后,游戏会继续并根据需要发布。但是,如果游戏关闭然后重新启动,则用户必须再次登录。
现在让我在这里说清楚,当我们再次启动时,我们当前没有调用登录功能,为什么?因为这会导致瞬间app切换看起来很可怕并且很刺耳。工具提示似乎表明Init应尝试使用有效的会话数据重新启动。但是在调用init函数之前和之后,Access令牌似乎都是空白的。因此没有自动登录。
我已尝试在设置对象中设置该状态标志为true,并通过init通过代码设置。似乎没有什么区别。
是否有一些我缺少的东西让这个工作?
这个官方插件是否有办法在没有应用交换的情况下获得自动登录?或者我只是在那个追逐梦想?
编辑:
只是提供一些额外的信息。目前在安装了facebook的iPhone5和iPad3上进行测试,其中一个使用通过iOS设置登录的facebook帐户,两者都遵循相同的行为,初始化没有会话恢复,初始化后登录导致应用交换。我将尝试在今天晚些时候用facebook示例测试一个空白项目,看看这是否是我们搞砸了或是否是它的插件。
答案 0 :(得分:1)
我知道你已经解决了你的问题,但我认为这可能对其他人有用,因为我遇到了类似的问题。
FacebookSettings> FB.Init()参数>状态应设置为“true”。 Status属性的参考文档说:
如果为true,则尝试使用有效的会话数据初始化Facebook对象。
- 注意:这通常需要异步读取操作,并且任何依赖于其完成的代码都应该在传递给Init()的HideUnityDelegate中同步。
也许这是文档中的一个错误,但我认为HideUnityDelegate
实际上并没有使用Init()
(调用Init时不会隐藏Unity)。但是,使用了InitDelegate
,因此您可以将登录代码放在那里。
示例:
void Start() {
FB.Init(OnInitComplete, OnHideUnity, null);
}
void OnInitComplete() {
if (FB.IsLoggedIn) {
Debug.Log("FB Logged in during Init");
}
else {
Debug.Log("FB NOT Logged in during Init");
}
}
void OnHideUnity(bool unityIsHidden) {
}
答案 1 :(得分:1)
当调用传递给FB.Init方法的OnInitComplete方法时,变量FB.IsLoggedIn尚未设置。添加0.5延迟后,它现在可以正确找到已登录的用户。 Dunno为什么在新版本上喜欢它,但它适用于我:)