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)); }
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))); }
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))); }
/// <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); }
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))); }
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))); }
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(); }
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); }
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)); }
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)); }
public IoCContainer(SdkType sdkType) { this.sdkType = sdkType; }
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)); }