Я наткнулся на что-то смешное.В одном из моих приложений у меня есть сервисы Google Play (IAP, таблица лидеров, достижения, последняя версия, 1.22).Это работало нормально.Недавно мне пришлось перестраивать приложение как 64-битное.Теперь я заметил, что эти сервисы работают только при первой загрузке приложения.Если я выйду из приложения и снова открою его, службы больше не будут работать.Я обнаружил, что это связано с активностью приложения в фоновом режиме (так как Android на самом деле не убивает приложение).Если я удалю приложение из памяти (проведите пальцем вверх, убейте задачу или подобное) и снова откройте приложение, сервисы Play снова заработают.
Кто-нибудь тоже сталкивался с этим?Любые советы, где можно посмотреть или исправить?
Очень признателен!
ОБНОВЛЕНИЕ: Я обнаружил, что проблема возникает при переходе от MONO к сборкам IL2CPP (что являетсятребуется для 64-битной).Я обновил плагин Unity IAP и Google Play Games до последних версий и установил платформу сборки на .NET 4.x.Все было обновлено и прекрасно работает, однако проблема остается.Подтверждено, что это происходит из-за IL2CPP.
UPDATE2: Когда он ломается, это журнал отладки из LogCat:
06-01 11: 56: 47.132: I /UnityIAP (12788): вызов getPurchaseHistory с токеном продолжения: ноль 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] в <000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 06-01 11: 56: 47.146: E / Unity (12788): в GooglePlayGames.Native.NativeClient.InitializeGameServices () [0x00000] в <00000000000000000000000000000000>: 0 06-01 11: 56: 47.146: E / Unity (12788): в GooglePlayGames.Native.NativeClient + <> c__DisplayClass21_0.b__0 (результат System.Int32) [0x00000] в <00000000000000000000000000000000>: 0 06-01 11: 56: 47.146: E / Unity (12788): в System.Refetho.on.Invoke (System.Object obj, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object [] параметры, System.Globalization.CultureInfo culture) [0x00000] в <00000000000000000000000000000000>: 0 06-01 11:56: 47.146: E / Unity (12788): в UnityEngine.AndroidJavaProxy.Invoke (имя метода System.String, аргументы System.Object []) [0x00000] в <00000000000000000000000000000000>: 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): покупка продукта ID 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: 1022* Обнаружено, что это известная проблема, которую в настоящее время изучает 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/