【问题标题】:Google Play Services - No longer work properly with IL2CPPGoogle Play 服务 - 不再与 IL2CPP 一起正常工作
【发布时间】: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


【解决方案1】:
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-29
相关资源
最近更新 更多