Google Play服务-无法再与IL2CPP一起正常使用

时间:2019-05-31 15:02:49

标签: c# android unity3d google-play in-app-purchase

我遇到了一些有趣的事情。 在我的一个应用程序中,我拥有Google Play服务(IAP,排行榜,成就,最新版本1.22)。 这很好。我最近不得不将应用程序重建为64位。 现在,我注意到这些服务似乎仅在首次加载应用程序时起作用。 如果我退出该应用程序,然后重新打开它,则该服务将不再起作用。 我发现这与应用程序在后台处于活动状态有关(因为Android并未真正杀死该应用程序)。如果我从内存中清除了该应用程序(清空,杀死任务或类似操作),然后重新打开该应用程序,则Play服务将再次运行。

有人也遇到过吗?有什么技巧可以查看或修复?

非常感谢!

更新: 我发现从MONO迁移到IL2CPP版本(64位是必需的)时会发生此问题。 我已经将Unity IAP和Google Play游戏插件更新到最新版本,并将构建平台设置为.NET4.x。所有内容均已更新,并且构建良好,但是问题仍然存在。确认这是由于IL2CPP造成的。

UPDATE2: 发生故障时,这是LogCat的调试日志:

06-01 11:56:47.132:I / UnityIAP(12788):使用延续令牌调用getPurchaseHistory:null 06-01 11:56:47.146:E / Unity(12788):InvalidOperationException:创建GameServices对象时出错。从GamesNativeSDK检查日志错误 06-01 11:56:47.146:E / Unity(12788):at GooglePlayGames.Native.PInvoke.GameServicesBuilder.Build(GooglePlayGames.Native.PInvoke.PlatformConfiguration configRef)[0x00000] in <00000000000000000000000000000000>:0 06-01 11:56:47.146:E / Unity(12788):at GooglePlayGames.Native.NativeClient.InitializeGameServices()[0x00000] in <00000000000000000000000000000000>:0 06-01 11:56:47.146:E / Unity(12788):at GooglePlayGames.Native.NativeClient + <> c__DisplayClass21_0.b__0(System.Int32结果)[0x00000] in <00000000000000000000000000000000000000>:0 06-01 11:56:47.146:E / Unity(12788):at System.Reflection.MonoMethod.Invoke(System.Object obj,System.Reflection.BindingFlags invokeAttr,System.Reflection.Binder活页夹,System.Object []参数,System.Globalization.CultureInfo文化)[00x000000]在<00000000000000000000000000000000>:0中 06-01 11:56:47.146:E / Unity(12788):在UnityEngine.AndroidJavaProxy.Invoke(System.String methodName,System.Object [] args)[0x00000] in <00000000000000000000000000000000000000>:0 06-01 11:56:47.146:E / Unity(12788):在UnityEngine._AndroidJNIHelper.InvokeJavaProxyMeth 06-01 11:56:47.355:I / UnityIAP(12788):购买历史记录回复:0

-似乎拒绝正确重新初始化,因为当我在此休息期间尝试购买商品时,在日志中看到了这一点:

06-01 11:59:50.894:I / Unity(12788):BuyProductID FAIL。未初始化。 06-01 11:59:50.894:I / Unity(12788):UnityEngine.Events.UnityEvent:Invoke() 06-01 11:59:50.894:I / Unity(12788):UnityEngine.EventSystems.ExecuteEvents:Execute(GameObject,BaseEventData,EventFunction`1) 06-01 11:59:50.894:I / Unity(12788):UnityEngine.EventSystems.StandaloneInputModule:ProcessTouchPress(PointerEventData,Boolean,Boolean) 06-01 11:59:50.894:I / Unity(12788):UnityEngine.EventSystems.StandaloneInputModule:ProcessTouchEvents() 06-01 11:59:50.894:I / Unity(12788):UnityEngine.EventSystems.StandaloneInputModule:Process()

UPDATE3: 我注意到,当我从playservices调用注销时,强迫用户在重新加载应用程序时再次登录,它可以正常工作。 但是,这显然不是一个很好的解决方案,因为您希望该应用记住上一次的Google Play登录。 这确实确认问题是由已存在/已缓存的登录用户触发的。