Exemple #1
0
        private List <WebRequestHeader> AppendAnalyticHeaders(SdkType analyticsType, params WebRequestHeader[] headers)
        {
            if (analyticsType == SdkType.None)
            {
                Debug.LogWarning("Attempt to add analytics without providing analyticsType parameter");
                if (headers != null)
                {
                    return(new List <WebRequestHeader>(headers));
                }
                else
                {
                    return(null);
                }
            }

            var analyticHeaders = GetAnalyticHeaders(analyticsType);
            var result          = default(List <WebRequestHeader>);

            if (headers != null)
            {
                result = new List <WebRequestHeader>(headers);
                result.AddRange(analyticHeaders);
            }
            else
            {
                Debug.LogWarning("Attmpt to append analytic headers to 'null'");
                result = analyticHeaders;
            }

            return(result);
        }
        public void PostRequest <T>(SdkType sdkType, string url, WWWForm data, Action <T> onComplete = null, Action <Error> onError = null, Dictionary <string, ErrorType> errorsToCheck = null)
            where T : class
        {
            var headers = GetAnalyticHeaders(sdkType);

            StartCoroutine(PostRequestCor <T>(sdkType, url, data, headers, onComplete, onError, errorsToCheck));
        }
        public void PostRequest <D>(SdkType sdkType, string url, D jsonObject = null, Action onComplete = null, Action <Error> onError = null, Dictionary <string, ErrorType> errorsToCheck = null)
            where D : class
        {
            var headers = GetAnalyticHeaders(sdkType);

            StartCoroutine(PostRequestCor(sdkType, url, jsonObject, headers, onComplete, onError, errorsToCheck));
        }
        /// <summary>
        /// Should necessarily be called before any calls to any SDK classes are made.
        /// Parameters of this method allow you to override default implementations of abstract interfaces used
        /// across SDK.
        /// </summary>
        /// <param name="stringMgr">Instance of class that implements IStringManager.
        /// Will be used instead of DefaultStringManager. For example this is handy if you want to translate
        /// certain strings provided by SDK, such as progress and statuses. See IStringManager definition.</param>
        /// <param name="storage">Instance of class that implements IPersistentStorage. This is useful
        /// when your app stores data in locations different from default Application.persistentDataPath
        /// defined by Unity. The best way to implement this interface is to derive from DefaultPersistentStorage
        /// and override whatever methods you need (but this is up to app developers).</param>
        public static void Init(
            IStringManager stringMgr   = null,
            IPersistentStorage storage = null,
            SdkType sdkType            = SdkType.Cloud
            )
        {
            if (initialized)
            {
                Debug.LogError("SDK already initialized!");
                return;
            }

            initialized = true;
            var sdk = Instance;

            if (stringMgr == null)
            {
                stringMgr = new DefaultStringManager();
            }
            sdk.stringManager = stringMgr;

            if (storage == null)
            {
                storage = new DefaultPersistentStorage();
            }
            sdk.persistentStorage = storage;

            iocContainer = new IoCContainer(sdkType);
        }
        IEnumerator PostUploadRequestCor <T>(SdkType sdkType, string url, string pathToFile, List <WebRequestHeader> requestHeaders, Action <T> onComplete = null, Action <Error> onError = null, Dictionary <string, ErrorType> errorsToCheck = null) where T : class
        {
            url = AppendAnalyticsToUrl(sdkType, url);
            UnityWebRequest webRequest = PreparePostUploadRequest(url, pathToFile, requestHeaders);

            yield return(StartCoroutine(PerformWebRequest(webRequest, onComplete, onError, errorsToCheck)));
        }
        public void PostRequest <T>(SdkType sdkType, string url, WebRequestHeader requestHeader, Action <T> onComplete = null, Action <Error> onError = null, Dictionary <string, ErrorType> errorsToCheck = null)
            where T : class
        {
            var headers = AppendAnalyticHeaders(sdkType, requestHeader);

            StartCoroutine(PostRequestCor <T>(sdkType, url, jsonObject: null, headers, onComplete, onError, errorsToCheck));
        }
        IEnumerator PostRequestCor(SdkType sdkType, string url, object jsonObject, List <WebRequestHeader> requestHeaders, Action onComplete = null, Action <Error> onError = null, Dictionary <string, ErrorType> errorsToCheck = null)
        {
            url = AppendAnalyticsToUrl(sdkType, url);
            UnityWebRequest webRequest = PreparePostWebRequest(url, jsonObject, requestHeaders);

            yield return(StartCoroutine(PerformWebRequest(webRequest, onComplete, onError, errorsToCheck)));
        }
        public void PostUploadRequest <T>(SdkType sdkType, string url, string pathToFile, List <WebRequestHeader> requestHeaders, Action <T> onComplete = null, Action <Error> onError = null, Dictionary <string, ErrorType> errorsToCheck = null)
            where T : class
        {
            var headers = AppendAnalyticHeaders(sdkType, requestHeaders?.ToArray());

            StartCoroutine(PostUploadRequestCor(sdkType, url, pathToFile, headers, onComplete, onError, errorsToCheck));
        }
Exemple #9
0
        public string AppendAnalyticsToUrl(SdkType analyticsType, string url)
        {
            if (analyticsType == SdkType.None)
            {
                Debug.LogWarning("Attempt to add analytics without providing analyticsType parameter");
                return(url);
            }

            var dividingSymbol = url.Contains("?") ? "&" : "?";
            var engineVersion  = Application.unityVersion;

            GetSdkSpecificParameters(analyticsType, out string sdkType, out string sdkVersion);

            var referralAnalytics = default(string);

            if (_referralAnalytics.HasValue)            //if (_referralAnalytics != null)
            {
                string referralPlugin  = _referralAnalytics.Value.Key;
                string referralVersion = _referralAnalytics.Value.Value;
                referralAnalytics = $"&ref={referralPlugin}&ref_v={referralVersion}";
            }

            var analyticsAddition = string.Format(ANALYTICS_URL_TEMPLATE, engineVersion, sdkType, sdkVersion, referralAnalytics);

            var result = $"{url}{dividingSymbol}{analyticsAddition}";

            return(result);
        }
        public override int GetHashCode()
        {
            int hash = 1;

            if (SdkInstanceId.Length != 0)
            {
                hash ^= SdkInstanceId.GetHashCode();
            }
            if (SdkSessionId.Length != 0)
            {
                hash ^= SdkSessionId.GetHashCode();
            }
            if (ArcoreSdkVersion.Length != 0)
            {
                hash ^= ArcoreSdkVersion.GetHashCode();
            }
            if (SdkType != 0)
            {
                hash ^= SdkType.GetHashCode();
            }
            if (OsVersion.Length != 0)
            {
                hash ^= OsVersion.GetHashCode();
            }
            if (engineCase_ == EngineOneofCase.Unity)
            {
                hash ^= Unity.GetHashCode();
            }
            hash ^= (int)engineCase_;
            if (_unknownFields != null)
            {
                hash ^= _unknownFields.GetHashCode();
            }
            return(hash);
        }
        IEnumerator PostRequestCor <T>(SdkType sdkType, string url, WWWForm data, List <WebRequestHeader> requestHeaders, Action <T> onComplete = null, Action <Error> onError = null, Dictionary <string, ErrorType> errorsToCheck = null) where T : class
        {
            url = AppendAnalyticsToUrl(sdkType, url);
            UnityWebRequest webRequest = UnityWebRequest.Post(url, data);

            AttachHeadersToPostRequest(webRequest, requestHeaders, withContentType: false);

            yield return(StartCoroutine(PerformWebRequest <T>(webRequest, onComplete, onError, errorsToCheck)));
        }
Exemple #12
0
        private IEnumerator GetRequestCor(SdkType sdkType, string url, List <WebRequestHeader> requestHeaders = null, Action onComplete = null, Action <Error> onError = null, Dictionary <string, ErrorType> errorsToCheck = null)
        {
            url = AppendAnalyticsToUrl(sdkType, url);

            var webRequest = UnityWebRequest.Get(url);

            AttachHeaders(webRequest, requestHeaders);

            yield return(StartCoroutine(PerformWebRequest(webRequest, onComplete, onError, errorsToCheck)));
        }
        IEnumerator PostUploadRequestCor(SdkType sdkType, string url, byte[] fileData, List <WebRequestHeader> requestHeaders, Action <string> onComplete = null, Action <Error> onError = null, Dictionary <string, ErrorType> errorsToCheck = null)
        {
            url = AppendAnalyticsToUrl(sdkType, url);
            UnityWebRequest webRequest = UnityWebRequest.Post(url, UnityWebRequest.kHttpVerbPOST);

            webRequest.timeout       = 10;
            webRequest.uploadHandler = (UploadHandler) new UploadHandlerRaw(fileData);
            AttachHeadersToPostRequest(webRequest, requestHeaders, withContentType: false);

            yield return(StartCoroutine(PerformWebRequest(webRequest, onComplete, onError, errorsToCheck)));
        }
Exemple #14
0
        /// <summary>
        /// Checks whether the current platform is supported.
        /// </summary>
        /// <returns>True if platform is supported</returns>
        /// <param name="errorMessage">Outpur error message in case platform is not suppported.</param>
        public static bool IsPlatformSupported(SdkType sdkType, out string errorMessage)
        {
            bool isSupported     = false;
            var  runtimePlatform = Application.platform;

#if UNITY_STANDALONE_WIN || UNITY_EDITOR_WIN || UNITY_ANDROID || UNITY_IOS || UNITY_STANDALONE_OSX || UNITY_EDITOR_OSX
            isSupported = true;
#endif
#if UNITY_WEBGL
            if (sdkType == SdkType.Cloud)
            {
                isSupported = true;
            }
#endif

            if (!isSupported)
            {
                var msg = "'Offline' avatar generation is not supported for the current platform.\n";
                msg += "Your platform is: {0}\nList of supported platforms:\n{1}\n";
                msg += "\nPlease switch to one of the supported platforms in File -> Build Settings -> Switch platform\n";
                msg += "or use avatar generation in the Cloud (try samples from 'samples_cloud' folder).\n";
                msg += "We are planning to support offline avatar generation on more platforms in future versions,\n";
                msg += "please stay tuned and you won't miss the update!";

                var supportedPlatforms = new RuntimePlatform[] {
                    RuntimePlatform.WindowsEditor,
                    RuntimePlatform.WindowsPlayer,
                    RuntimePlatform.Android,
                    RuntimePlatform.IPhonePlayer,
                    RuntimePlatform.OSXEditor,
                    RuntimePlatform.OSXPlayer
                };

                var listOfSupported = string.Join("\n", supportedPlatforms.Select(p => p.ToString()).ToArray());
                msg          = string.Format(msg, runtimePlatform.ToString(), listOfSupported);
                errorMessage = msg;
                return(false);
            }

            var bitness           = IntPtr.Size * 8;
            var platformIsWindows = runtimePlatform == RuntimePlatform.WindowsEditor || runtimePlatform == RuntimePlatform.WindowsPlayer;
            if (platformIsWindows && bitness != 64)
            {
                var msg = "'Offline' avatar generation for Windows currently works only in 64-bit version.\n";
                msg         += "Please try to switch to x86_64 architecture in File -> Build Settings";
                errorMessage = msg;
                return(false);
            }

            // exception not thrown, everything is fine!
            Debug.LogFormat("Platform is supported!");
            errorMessage = string.Empty;
            return(true);
        }
Exemple #15
0
        IEnumerator DeleteRequestCor(SdkType sdkType, string url, List <WebRequestHeader> requestHeaders, Action onComplete = null, Action <Error> onError = null, Dictionary <string, ErrorType> errorsToCheck = null)
        {
            url = AppendAnalyticsToUrl(sdkType, url);

            var webRequest = UnityWebRequest.Delete(url);

            webRequest.downloadHandler = new DownloadHandlerBuffer();
            AttachHeaders(webRequest, requestHeaders);

            yield return(StartCoroutine(PerformWebRequest(webRequest, onComplete, onError, errorsToCheck)));
        }
Exemple #16
0
        IEnumerator PatchRequestCor <T, D>(SdkType sdkType, string url, D jsonObject, List <WebRequestHeader> requestHeaders = null, Action <T> onComplete = null, Action <Error> onError = null, Dictionary <string, ErrorType> errorsToCheck = null) where T : class
        {
            url = AppendAnalyticsToUrl(sdkType, url);

            UnityWebRequest webRequest = new UnityWebRequest(url, "PATCH");

            webRequest.downloadHandler = new DownloadHandlerBuffer();
            AttachBodyToPatchRequest(webRequest, jsonObject);
            AttachHeadersToPatchRequest(webRequest, requestHeaders);

            yield return(StartCoroutine(PerformWebRequest(webRequest, onComplete, onError, errorsToCheck)));
        }
Exemple #17
0
    public void GlobalInit()
    {
        if (IS_DISABLED_SDK)
        {
            IS_SDK_CHANNEL = false;
            SDK_TYPE       = SdkType.SDK_SELF;
            PACKAGE_NAME   = "com.leduo.buyu.self";
            byte[] data2 = System.Text.Encoding.ASCII.GetBytes(PACKAGE_NAME);
            PACKAGE_NAME_CRC = Crc.Crc32(data2, 0, data2.Length);
            m_Interface      = null;
            m_Interface      = new SDKBaseNoSDK();
            return;
        }
        IS_SDK_CHANNEL = SDK_TYPE == SdkType.SDK_CHANNEL;
        if (IS_SDK_CHANNEL)
        {
#if DOME
            m_Interface  = new SDKChannelDome();
            CHANNEL_TYPE = ChannelType.Dome_ChannelType;
#elif TW
            m_Interface  = new SDKChannelTW();
            CHANNEL_TYPE = ChannelType.TW_ChannelType;
#else
            m_Interface = new SDKChannel();
#endif
            m_SceneCallbackObj      = new GameObject();
            m_SceneCallbackObj.name = "SDKCallbackObj";
            m_SceneCallback         = m_SceneCallbackObj.AddComponent <SDKSceneCallback>();
        }
        else
        {
            if (SDK_TYPE == SdkType.SDK_DERIVED)
            {
                m_Interface = new SDKDerived();
            }
            else
            {
                m_Interface = new SDKBase();
            }
        }
        PACKAGE_NAME = NativeInterface.GetPackageName();
        byte[] data = System.Text.Encoding.ASCII.GetBytes(PACKAGE_NAME);
        PACKAGE_NAME_CRC = Crc.Crc32(data, 0, data.Length);

        //SDK初始化
#if UNITY_IOS
        IS_APP_STORE_VER = NativeInterface.IsAppStoreVer();
#endif
        LogMgr.Log("包名:" + PACKAGE_NAME + "|类型:" + SDK_TYPE + "|官网:" + IsOfficialVersion);
        m_LoginData.Result = LoginState.LOGIN_NONE;
        m_Interface.GlobalInit();
    }
Exemple #18
0
        private List <WebRequestHeader> GetAnalyticHeaders(SdkType analyticsType)
        {
            //These headers cause network error in WebGL environment
            //'Access to XMLHttpRequest ... has been blocked by CORS policy: Request header field x-engine is not allowed by Access-Control-Allow-Headers in preflight response.'
            if (Application.platform == RuntimePlatform.WebGLPlayer)
            {
                return(new List <WebRequestHeader>());
            }

            GetSdkSpecificParameters(analyticsType, out string sdkType, out string sdkVersion);

            var resultCapacity = _referralAnalytics.HasValue ? 6 : 4;
            var result         = new List <WebRequestHeader>(capacity: resultCapacity)
            {
                new WebRequestHeader()
                {
                    Name = "X-ENGINE", Value = "UNITY"
                },
                new WebRequestHeader()
                {
                    Name = "X-ENGINE-V", Value = Application.unityVersion.ToUpper()
                },
                new WebRequestHeader()
                {
                    Name = "X-SDK", Value = sdkType.ToUpper()
                },
                new WebRequestHeader()
                {
                    Name = "X-SDK-V", Value = sdkVersion.ToUpper()
                }
            };

            if (_referralAnalytics.HasValue)            //if (_referralAnalytics != null)
            {
                string referralPlugin  = _referralAnalytics.Value.Key;
                string referralVersion = _referralAnalytics.Value.Value;

                result.Add(new WebRequestHeader()
                {
                    Name = "X-REF", Value = referralPlugin.ToUpper()
                });
                result.Add(new WebRequestHeader()
                {
                    Name = "X-REF-V", Value = referralVersion.ToUpper()
                });
            }

            return(result);
        }
Exemple #19
0
        private void GetSdkSpecificParameters(SdkType analyticsType, out string sdkType, out string sdkVersion)
        {
            sdkType    = default(string);
            sdkVersion = default(string);

            switch (analyticsType)
            {
            case SdkType.Login:
                sdkType    = "login";
                sdkVersion = Constants.LoginSdkVersion;
                break;

            case SdkType.Store:
                sdkType    = "store";
                sdkVersion = Constants.StoreSdkVersion;
                break;

            default:
                Debug.LogError($"Unexpected analyticsType: '{analyticsType.ToString()}'");
                break;
            }
        }
        /// <summary>
        /// Check compatibility with the current platform. Little helper just to share code between samples.
        /// </summary>
        public static bool CheckIfSupported(Text statusText, GameObject[] uiElements, SdkType sdkType)
        {
            string errorMessage = null;

            if (!CoreTools.IsPlatformSupported(sdkType, out errorMessage))
            {
                Debug.LogError(errorMessage);
                if (uiElements != null)
                {
                    foreach (var ui in uiElements)
                    {
                        if (ui != null)
                        {
                            ui.SetActive(false);
                        }
                    }
                }
                statusText.GetComponent <RectTransform>().SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, Screen.height / 2);
                statusText.text = errorMessage;
                return(false);
            }

            return(true);
        }
        public void PostUploadRequest(SdkType sdkType, string url, byte[] fileData, List <WebRequestHeader> requestHeaders, Action <string> onComplete = null, Action <Error> onError = null, Dictionary <string, ErrorType> errorsToCheck = null)
        {
            var headers = AppendAnalyticHeaders(sdkType, requestHeaders?.ToArray());

            StartCoroutine(PostUploadRequestCor(sdkType, url, fileData, headers, onComplete, onError, errorsToCheck));
        }
Exemple #22
0
        public void GetRequest(SdkType sdkType, string url, WebRequestHeader requestHeader, Action onComplete = null, Action <Error> onError = null, Dictionary <string, ErrorType> errorsToCheck = null)
        {
            var headers = AppendAnalyticHeaders(sdkType, requestHeader);

            StartCoroutine(GetRequestCor(sdkType, url, headers, onComplete, onError, errorsToCheck));
        }
        public void PutRequest <T>(SdkType sdkType, string url, T jsonObject, List <WebRequestHeader> requestHeaders, Action onComplete = null, Action <Error> onError = null, Dictionary <string, ErrorType> errorsToCheck = null) where T : class
        {
            var headers = AppendAnalyticHeaders(sdkType, requestHeaders?.ToArray());

            StartCoroutine(PutRequestCor(sdkType, url, jsonObject, headers, onComplete, onError, errorsToCheck));
        }
Exemple #24
0
 public IoCContainer(SdkType sdkType)
 {
     this.sdkType = sdkType;
 }
Exemple #25
0
 public void DeleteRequest(SdkType sdkType, string url, List <WebRequestHeader> requestHeaders, Action onComplete = null, Action <Error> onError = null, Dictionary <string, ErrorType> errorsToCheck = null)
 {
     requestHeaders = AppendAnalyticHeaders(sdkType, requestHeaders?.ToArray());
     StartCoroutine(DeleteRequestCor(sdkType, url, requestHeaders, onComplete, onError, errorsToCheck));
 }