using System; using Uniject; using UnityEngine.Purchasing.Extension; namespace UnityEngine.Purchasing { internal class NativeStoreProvider : INativeStoreProvider { public INativeStore GetAndroidStore(IUnityCallback callback, AppStore store, IPurchasingBinder binder, IUtil util) { INativeStore nativeStore; try { nativeStore = GetAndroidStoreHelper(callback, store, binder, util); } catch (Exception e) { throw new NotSupportedException("Failed to bind to native store: " + e.ToString()); } if (nativeStore != null) { return nativeStore; } throw new NotImplementedException(); } private INativeStore GetAndroidStoreHelper(IUnityCallback callback, AppStore store, IPurchasingBinder binder, IUtil util) { switch (store) { case AppStore.AmazonAppStore: using (var pluginClass = new AndroidJavaClass("com.unity.purchasing.amazon.AmazonPurchasing")) { // Switch Android callbacks to the scripting thread, via ScriptingUnityCallback. var proxy = new JavaBridge(new ScriptingUnityCallback(callback, util)); var instance = pluginClass.CallStatic("instance", proxy); // Hook up our amazon specific functionality. var extensions = new AmazonAppStoreStoreExtensions(instance); binder.RegisterExtension(extensions); binder.RegisterConfiguration(extensions); return new AndroidJavaStore(instance); } case AppStore.UDP: { var udpIapBridge = UdpIapBridgeInterface.GetClassType(); if (udpIapBridge != null) { var udpImpl = new UDPImpl(); var udpBindings = new UDPBindings(); udpImpl.SetNativeStore(udpBindings); binder.RegisterExtension(udpImpl); return udpBindings; } else { Debug.LogError("Cannot set Android target to UDP. Make sure you have installed UDP in your project"); throw new NotImplementedException(); } } } throw new NotImplementedException(); } public INativeAppleStore GetStorekit(IUnityCallback callback) { // Both tvOS and iOS use the same Objective-C linked to the XCode project. if (Application.platform == RuntimePlatform.IPhonePlayer || Application.platform == RuntimePlatform.tvOS) { return new iOSStoreBindings(); } return new OSXStoreBindings(); } } }