【发布时间】:2019-10-17 05:54:38
【问题描述】:
我遇到了一些有趣的事情。 在我的一个应用程序中,我有 Google Play 服务(IAP、排行榜、成就、最新版本、1.22)。 这工作得很好。我最近不得不将应用程序重建为 64 位。 现在,我注意到这些服务似乎只在应用程序第一次加载时才起作用。 如果我退出应用程序并重新打开它,这些服务将不再工作。 我发现这与应用程序在后台处于活动状态有关(因为 Android 并没有真正杀死应用程序)。如果我从内存中清除应用程序(向上滑动、终止任务或类似操作),然后重新打开应用程序,Play 服务将再次运行。
有人也遇到过这个吗?有什么提示可以查看或修复吗?
非常感谢!
更新: 我发现从 MONO 迁移到 IL2CPP 构建时会出现问题(这是 64 位所必需的)。 我已将 Unity IAP 和 Google Play Games 插件更新为最新版本,并将构建平台设置为 .NET 4.x。一切都已更新并且构建良好,但是问题仍然存在。确认这是由于 IL2CPP。
更新 2: 当它中断时,这是来自 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): 在 GooglePlayGames.Native.PInvoke.GameServicesBuilder.Build (GooglePlayGames.Native.PInvoke.PlatformConfiguration configRef) [0x00000] 在 :0 06-01 11:56:47.146: E/Unity(12788): 在 GooglePlayGames.Native.NativeClient.InitializeGameServices () [0x00000] 在 :0 06-01 11:56:47.146: E/Unity(12788): 在 GooglePlayGames.Native.NativeClient+c__DisplayClass21_0.b__0 (System.Int32 结果) [0x00000] in :0 06-01 11:56:47.146: E/Unity(12788): 在 System.Reflection.MonoMethod.Invoke (System.Object obj, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] 参数, System.Globalization.CultureInfo 文化) [0x00000] 在 :0 06-01 11:56:47.146: E/Unity(12788): 在 UnityEngine.AndroidJavaProxy.Invoke (System.String methodName, System.Object[] args) [0x00000] in :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 失败。未初始化。 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()
更新3: 发现这是 Unity 目前正在调查的一个已知问题: https://forum.unity.com/threads/unity-2018-3-android-4-x-5-x-il2cpp-crash-unityiap.681982/
与此同时,这里有一些解决方法: https://forum.unity.com/threads/android-2018-3-13-unitypurchasing-dont-initialize-after-application-quit.665497/
【问题讨论】:
-
这是否发生在您的应用程序的构建版本上并在实体手机上打开? Unity 编辑器中也会发生这种情况吗?
-
嗨!这发生在物理电话上。我无法在编辑器中对其进行测试,因为您无法像在 Android 上那样模拟关闭应用程序并将其保存在内存中。我没有更改代码中的任何内容,我只是构建了一个 64 位版本。这是工作版本和“非工作”版本之间的唯一区别。
-
更新:我发现从 MONO 迁移到 IL2CPP 构建(64 位需要)时会出现问题。
-
不错!您介意为您的问题创建一个解决方案并选择它作为答案吗?这对未来有此问题的人来说非常有用。
-
嗯,还没有解决 :) 由于我们需要在 2019 年 8 月之前将我们的应用程序更新到 64 位,因此通过 Unity 构建 64 位应用程序的唯一方法是使用 IL2CPP...问题仍然存在。只是确认这是由于 IL2CPP。
标签: c# android unity3d google-play in-app-purchase