Exemple #1
0
    // Full access to any existing or new Facebook dialogs that get added.  See Facebooks documentation for parameters and dialog types
    public static void showDialog(string dialogType, Dictionary <string, string> parameters)
    {
        if (Application.platform != RuntimePlatform.Android)
        {
            return;
        }

        // load up the Bundle
        using (var bundle = new AndroidJavaObject("android.os.Bundle"))
        {
            var putStringMethod = AndroidJNI.GetMethodID(bundle.GetRawClass(), "putString", "(Ljava/lang/String;Ljava/lang/String;)V");
            var args            = new object[2];

            // add all our dictionary elements into the Bundle
            if (parameters != null)
            {
                foreach (var kv in parameters)
                {
                    args[0] = new AndroidJavaObject("java.lang.String", kv.Key);
                    args[1] = new AndroidJavaObject("java.lang.String", kv.Value);
                    AndroidJNI.CallVoidMethod(bundle.GetRawObject(), putStringMethod, AndroidJNIHelper.CreateJNIArgArray(args));
                }
            }

            // call off to java land
            if (!isSessionValid())
            {
                babysitRequest(true, () => { _facebookPlugin.Call("showDialog", dialogType, bundle); });
            }
            else
            {
                _facebookPlugin.Call("showDialog", dialogType, bundle);
            }
        }
    }
Exemple #2
0
    private void initSDK()
    {
        IntPtr intPtr = AndroidJNI.FindClass("com/tencent/qgame/livesdk/bridge/Unity3D");

        QGameKitAndroidBridge.constructorMethodID = AndroidJNI.GetMethodID(intPtr, "<init>", "(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;IIII)V");
        if (QGameKitAndroidBridge.constructorMethodID == IntPtr.Zero)
        {
            UnityEngine.Debug.LogError("Can't find UnityBridge constructor.");
            return;
        }
        QGameKitAndroidBridge.setupMethodID = AndroidJNI.GetMethodID(intPtr, "setup", "(Lcom/tencent/qgame/livesdk/bridge/UserAccountListener;)Z");
        if (QGameKitAndroidBridge.setupMethodID == IntPtr.Zero)
        {
            UnityEngine.Debug.LogError("Can't find setup() method.");
            return;
        }
        QGameKitAndroidBridge.tearDownMethodID = AndroidJNI.GetMethodID(intPtr, "tearDown", "()V");
        if (QGameKitAndroidBridge.tearDownMethodID == IntPtr.Zero)
        {
            UnityEngine.Debug.LogError("Can't find tearDown() method.");
            return;
        }
        QGameKitAndroidBridge.resetMethodID = AndroidJNI.GetMethodID(intPtr, "reset", "()Z");
        if (QGameKitAndroidBridge.resetMethodID == IntPtr.Zero)
        {
            UnityEngine.Debug.LogError("Can't find reset() method.");
            return;
        }
        QGameKitAndroidBridge.startLiveBroadcastMethodID = AndroidJNI.GetMethodID(intPtr, "startLiveBroadcast", "(Ljava/lang/String;Ljava/lang/String;)Z");
        if (QGameKitAndroidBridge.startLiveBroadcastMethodID == IntPtr.Zero)
        {
            UnityEngine.Debug.LogError("Can't find startLiveBroadcast() method.");
            return;
        }
        QGameKitAndroidBridge.stopLiveBroadcastMethodID = AndroidJNI.GetMethodID(intPtr, "stopLiveBroadcast", "()Z");
        if (QGameKitAndroidBridge.stopLiveBroadcastMethodID == IntPtr.Zero)
        {
            UnityEngine.Debug.LogError("Can't find stopLiveBroadcast() method.");
            return;
        }
        QGameKitAndroidBridge.frameUpdatedMethodID = AndroidJNI.GetMethodID(intPtr, "frameUpdated", "()V");
        if (QGameKitAndroidBridge.frameUpdatedMethodID == IntPtr.Zero)
        {
            UnityEngine.Debug.LogError("Can't find frameUpdated() method.");
            return;
        }
        QGameKitAndroidBridge.enterLiveHallMethodID = AndroidJNI.GetMethodID(intPtr, "enterLiveHall", "(Landroid/content/Context;)V");
        if (QGameKitAndroidBridge.enterLiveHallMethodID == IntPtr.Zero)
        {
            UnityEngine.Debug.LogError("Can't find enterLiveHall() method.");
            return;
        }
        QGameKitAndroidBridge.enterLiveHallInGameMethodID = AndroidJNI.GetMethodID(intPtr, "enterLiveHallInGame", "(Landroid/content/Context;)V");
        if (QGameKitAndroidBridge.enterLiveHallInGameMethodID == IntPtr.Zero)
        {
            UnityEngine.Debug.LogError("Can't find enterLiveHallInGameMethodID() method.");
            return;
        }
        QGameKitAndroidBridge.updateUserAccountMethodID = AndroidJNI.GetMethodID(intPtr, "updateUserAccount", "(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)V");
        if (QGameKitAndroidBridge.updateUserAccountMethodID == IntPtr.Zero)
        {
            UnityEngine.Debug.LogError("Can't find updateUserAccount() method.");
            return;
        }
        QGameKitAndroidBridge.getLiveBroadcastStatusMethodID = AndroidJNI.GetMethodID(intPtr, "getLiveBroadcastStatus", "()I");
        if (QGameKitAndroidBridge.getLiveBroadcastStatusMethodID == IntPtr.Zero)
        {
            UnityEngine.Debug.LogError("Can't find getLiveBroadcastStatus() method.");
            return;
        }
        QGameKitAndroidBridge.getErrorCodeMethodID = AndroidJNI.GetMethodID(intPtr, "getErrorCode", "()I");
        if (QGameKitAndroidBridge.getErrorCodeMethodID == IntPtr.Zero)
        {
            UnityEngine.Debug.LogError("Can't find getErrorCode() method.");
            return;
        }
        QGameKitAndroidBridge.setUserAccountListenerMethodID = AndroidJNI.GetMethodID(intPtr, "setUserAccountListener", "(Lcom/tencent/qgame/livesdk/bridge/UserAccountListener;)V");
        if (QGameKitAndroidBridge.setUserAccountListenerMethodID == IntPtr.Zero)
        {
            UnityEngine.Debug.LogError("Can't find setUserAccountListener() method.");
            return;
        }
        QGameKitAndroidBridge.setCommentReceiveDelegateMethodID = AndroidJNI.GetMethodID(intPtr, "setCommentReceiveListener", "(Lcom/tencent/qgame/livesdk/bridge/CommentReceiveListener;)V");
        if (QGameKitAndroidBridge.setCommentReceiveDelegateMethodID == IntPtr.Zero)
        {
            UnityEngine.Debug.LogError("Can't find setCommentReceiveListener() method.");
            return;
        }
        QGameKitAndroidBridge.setLogDelegateMethodID = AndroidJNI.GetMethodID(intPtr, "setLogListener", "(Lcom/tencent/qgame/livesdk/bridge/LogListener;)V");
        if (QGameKitAndroidBridge.setLogDelegateMethodID == IntPtr.Zero)
        {
            UnityEngine.Debug.LogError("Can't find setLogListener() method.");
            return;
        }
        QGameKitAndroidBridge.setLiveStatusChangedDelegateMethodID = AndroidJNI.GetMethodID(intPtr, "setLiveStatusChangedListener", "(Lcom/tencent/qgame/live/listener/OnLiveStatusChangedListener;)V");
        if (QGameKitAndroidBridge.setLiveStatusChangedDelegateMethodID == IntPtr.Zero)
        {
            UnityEngine.Debug.LogError("Can't find setLiveStatusChangedListener() method.");
            return;
        }
        QGameKitAndroidBridge.setShareListenerMethodID = AndroidJNI.GetMethodID(intPtr, "setShareListener", "(Lcom/tencent/qgame/livesdk/bridge/ShareListener;)V");
        if (QGameKitAndroidBridge.setShareListenerMethodID == IntPtr.Zero)
        {
            UnityEngine.Debug.LogError("Can't find setShareListener() method.");
            return;
        }
        QGameKitAndroidBridge.setErrorCodeDelegateMethodID = AndroidJNI.GetMethodID(intPtr, "setErrorCodeListener", "(Lcom/tencent/qgame/live/listener/ErrorCodeListener;)V");
        if (QGameKitAndroidBridge.setErrorCodeDelegateMethodID == IntPtr.Zero)
        {
            UnityEngine.Debug.LogError("Can't find setErrorCodeDelegateMethodID() method.");
            return;
        }
        QGameKitAndroidBridge.setWebViewStatusChangedDelegateMethodID = AndroidJNI.GetMethodID(intPtr, "setWebViewStatusChangedListener", "(Lcom/tencent/qgame/livesdk/bridge/WebViewStatusChangedListener;)V");
        if (QGameKitAndroidBridge.setWebViewStatusChangedDelegateMethodID == IntPtr.Zero)
        {
            UnityEngine.Debug.LogError("Can't find setWebViewStatusChangedListener() method.");
            return;
        }
        QGameKitAndroidBridge.isLiveBroadcastSupportedMethodID = AndroidJNI.GetMethodID(intPtr, "isLiveBroadcastSupported", "()Z");
        if (QGameKitAndroidBridge.isLiveBroadcastSupportedMethodID == IntPtr.Zero)
        {
            UnityEngine.Debug.LogError("Can't find isLiveBroadcastSupportedMethodID() method.");
            return;
        }
        QGameKitAndroidBridge.getVersionNameMethodID = AndroidJNI.GetMethodID(intPtr, "getVersionName", "()Ljava/lang/String;");
        if (QGameKitAndroidBridge.getVersionNameMethodID == IntPtr.Zero)
        {
            UnityEngine.Debug.LogError("Can't find getVersionNameMethodID() method.");
            return;
        }
        QGameKitAndroidBridge.showCameraMethodID = AndroidJNI.GetMethodID(intPtr, "showCamera", "()Z");
        if (QGameKitAndroidBridge.showCameraMethodID == IntPtr.Zero)
        {
            UnityEngine.Debug.LogError("Can't find showCameraMethodID() method.");
            return;
        }
        QGameKitAndroidBridge.hideCameraMethodID = AndroidJNI.GetMethodID(intPtr, "hideCamera", "()V");
        if (QGameKitAndroidBridge.hideCameraMethodID == IntPtr.Zero)
        {
            UnityEngine.Debug.LogError("Can't find hideCameraMethodID() method.");
            return;
        }
        QGameKitAndroidBridge.setEnvironmentTypeMethodID = AndroidJNI.GetMethodID(intPtr, "setEnvironmentType", "(I)V");
        if (QGameKitAndroidBridge.setEnvironmentTypeMethodID == IntPtr.Zero)
        {
            UnityEngine.Debug.LogError("Can't find setEnvironmentTypeMethodID() method");
            return;
        }
        QGameKitAndroidBridge.getLiveFrameRateMethodID = AndroidJNI.GetMethodID(intPtr, "getLiveFrameRate", "()I");
        if (QGameKitAndroidBridge.getLiveFrameRateMethodID == IntPtr.Zero)
        {
            UnityEngine.Debug.LogError("Can't find getLiveFrameRate() method");
            return;
        }
        QGameKitAndroidBridge.notifyUserAccountMethodID = AndroidJNI.GetMethodID(intPtr, "notifyUserAccountUpdate", "()V");
        if (QGameKitAndroidBridge.notifyUserAccountMethodID == IntPtr.Zero)
        {
            UnityEngine.Debug.LogError("Can't find notifyUserAccountMethodID() method.");
            return;
        }
        QGameKitAndroidBridge.doOnCreateMethodID = AndroidJNI.GetMethodID(intPtr, "doOnCreate", "()V");
        if (QGameKitAndroidBridge.doOnCreateMethodID == IntPtr.Zero)
        {
            UnityEngine.Debug.LogError("Can't find doOnCreate() method");
            return;
        }
        QGameKitAndroidBridge.doOnResumeMethodID = AndroidJNI.GetMethodID(intPtr, "doOnResume", "()V");
        if (QGameKitAndroidBridge.doOnResumeMethodID == IntPtr.Zero)
        {
            UnityEngine.Debug.LogError("Can't find doOnResume() method");
            return;
        }
        QGameKitAndroidBridge.doOnPauseMethodID = AndroidJNI.GetMethodID(intPtr, "doOnPause", "()V");
        if (QGameKitAndroidBridge.doOnPauseMethodID == IntPtr.Zero)
        {
            UnityEngine.Debug.LogError("Can't find doOnPause() method");
            return;
        }
        QGameKitAndroidBridge.doOnDestroyMethodID = AndroidJNI.GetMethodID(intPtr, "doOnDestroy", "()V");
        if (QGameKitAndroidBridge.doOnDestroyMethodID == IntPtr.Zero)
        {
            UnityEngine.Debug.LogError("Can't find doOnDestroy() method");
            return;
        }
        QGameKitAndroidBridge.doOnBackPressedMethodID = AndroidJNI.GetMethodID(intPtr, "doOnBackPressed", "()Z");
        if (QGameKitAndroidBridge.doOnBackPressedMethodID == IntPtr.Zero)
        {
            UnityEngine.Debug.LogError("Can't find doOnBackPressed() method");
            return;
        }
        QGameKitAndroidBridge.isSupportCameraMethodID = AndroidJNI.GetMethodID(intPtr, "isSupportCamera", "()Z");
        if (QGameKitAndroidBridge.isSupportCameraMethodID == IntPtr.Zero)
        {
            UnityEngine.Debug.LogError("Can't find isSupportCamera() method");
            return;
        }
        QGameKitAndroidBridge.shareLiveBroadcastMethodID = AndroidJNI.GetMethodID(intPtr, "shareLiveBroadcast", "()V");
        if (QGameKitAndroidBridge.shareLiveBroadcastMethodID == IntPtr.Zero)
        {
            UnityEngine.Debug.LogError("Can't find shareLiveBroadcast() method");
            return;
        }
        QGameKitAndroidBridge.isSupportLiveHallMethodID = AndroidJNI.GetMethodID(intPtr, "isSupportLiveHall", "()Z");
        if (QGameKitAndroidBridge.isSupportLiveHallMethodID == IntPtr.Zero)
        {
            UnityEngine.Debug.LogError("Can't find isSupportLiveHall() method");
            return;
        }
        QGameKitAndroidBridge.setDanmakuEnabledMethodID = AndroidJNI.GetMethodID(intPtr, "setDanmakuEnabled", "(Z)V");
        if (QGameKitAndroidBridge.setDanmakuEnabledMethodID == IntPtr.Zero)
        {
            UnityEngine.Debug.LogError("Can't find setDanmakuEnabled() method");
            return;
        }
        QGameKitAndroidBridge.showDanmakuMethodID = AndroidJNI.GetMethodID(intPtr, "showDanmaku", "()V");
        if (QGameKitAndroidBridge.showDanmakuMethodID == IntPtr.Zero)
        {
            UnityEngine.Debug.LogError("Can't find showDanmaku() method");
            return;
        }
        QGameKitAndroidBridge.hideDanmakuMethodID = AndroidJNI.GetMethodID(intPtr, "hideDanmaku", "()V");
        if (QGameKitAndroidBridge.hideDanmakuMethodID == IntPtr.Zero)
        {
            UnityEngine.Debug.LogError("Can't find hideDanmaku() method");
            return;
        }
        jvalue[] args = AndroidJNIHelper.CreateJNIArgArray(new object[]
        {
            QGameKitAndroidBridge.getActivityContext(),
            QGameKitAndroidBridge.gameID,
            QGameKitAndroidBridge.wnsID,
            Screen.width,
            Screen.height,
            Convert.ToInt32(QGameKitAndroidBridge.myCaptureType),
            Convert.ToInt32(QGameKitAndroidBridge.sdkEnvironmentType)
        });
        IntPtr intPtr2 = AndroidJNI.NewObject(intPtr, QGameKitAndroidBridge.constructorMethodID, args);

        if (intPtr2 == IntPtr.Zero)
        {
            UnityEngine.Debug.LogError("--- Can't create Unity bridge object.");
            return;
        }
        this.androidBridge = AndroidJNI.NewGlobalRef(intPtr2);
        AndroidJNI.DeleteLocalRef(intPtr2);
        AndroidJNI.DeleteLocalRef(intPtr);
        UnityEngine.Debug.Log("--- grabFrameRate = " + this.grabFrameRate);
        this.frameInterval = 1f / (float)this.grabFrameRate;
        UnityEngine.Debug.Log("--- 1.0f / grabFrameRate = " + this.frameInterval);
        this.startTime = Time.time;
        this.isRunning = false;
        if (QGameKitAndroidBridge.myCaptureType == (QGameKit.CaptureType) 0)
        {
            if (QGameKitAndroidBridge.userAccountDelegate != null)
            {
                this.SetUserAccountDelegate(QGameKitAndroidBridge.userAccountDelegate);
            }
            UnityEngine.Debug.Log("CaptureType is zero, give up setup");
            return;
        }
        if (this.setup())
        {
            UnityEngine.Debug.Log("Native setup success.");
        }
        else
        {
            UnityEngine.Debug.LogError("Native setup failed!");
        }
    }
Exemple #3
0
        /// <summary>
        /// Load the billing service.
        /// </summary>
        protected override void _loadBillingService()
        {
            if (StoreSettings.GPlayBP)
            {
                if (string.IsNullOrEmpty(StoreSettings.AndroidPublicKey) ||
                    StoreSettings.AndroidPublicKey == StoreSettings.AND_PUB_KEY_DEFAULT)
                {
                    SoomlaUtils.LogError(TAG, "You chose Google Play billing service, but publicKey is not set!! Stopping here!!");
                    throw new ExitGUIException();
                }

                if (StoreSettings.PlaySsvValidation)
                {
                    if (string.IsNullOrEmpty(StoreSettings.PlayClientId) ||
                        StoreSettings.PlayClientId == StoreSettings.PLAY_CLIENT_ID_DEFAULT)
                    {
                        SoomlaUtils.LogError(TAG, "You chose Google Play Receipt Validation, but clientId is not set!! Stopping here!!");
                        throw new ExitGUIException();
                    }

                    if (string.IsNullOrEmpty(StoreSettings.PlayClientSecret) ||
                        StoreSettings.PlayClientSecret == StoreSettings.PLAY_CLIENT_SECRET_DEFAULT)
                    {
                        SoomlaUtils.LogError(TAG, "You chose Google Play Receipt Validation, but clientSecret is not set!! Stopping here!!");
                        throw new ExitGUIException();
                    }

                    if (string.IsNullOrEmpty(StoreSettings.PlayRefreshToken) ||
                        StoreSettings.PlayRefreshToken == StoreSettings.PLAY_REFRESH_TOKEN_DEFAULT)
                    {
                        SoomlaUtils.LogError(TAG, "You chose Google Play Receipt Validation, but refreshToken is not set!! Stopping here!!");
                        throw new ExitGUIException();
                    }
                }
            }

            AndroidJNI.PushLocalFrame(100);
            using (AndroidJavaClass jniSoomlaStoreClass = new AndroidJavaClass("com.soomla.store.SoomlaStore")) {
                jniSoomlaStore = jniSoomlaStoreClass.CallStatic <AndroidJavaObject>("getInstance");
                bool success = jniSoomlaStore.Call <bool>("loadBillingService");
                if (!success)
                {
                    SoomlaUtils.LogError(TAG, "Couldn't load billing service! Billing functions won't work.");
                }
            }

            if (StoreSettings.GPlayBP)
            {
                using (AndroidJavaClass jniGooglePlayIabServiceClass = new AndroidJavaClass("com.soomla.store.billing.google.GooglePlayIabService")) {
                    AndroidJavaObject jniGooglePlayIabService = jniGooglePlayIabServiceClass.CallStatic <AndroidJavaObject>("getInstance");
                    jniGooglePlayIabService.Call("setPublicKey", StoreSettings.AndroidPublicKey);

                    if (StoreSettings.PlaySsvValidation)
                    {
                        using (AndroidJavaObject obj_HashMap = new AndroidJavaObject("java.util.HashMap"))
                        {
                            IntPtr method_Put = AndroidJNIHelper.GetMethodID(obj_HashMap.GetRawClass(), "put",
                                                                             "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;");

                            object[] args = new object[2];

                            // client ID
                            using (AndroidJavaObject k = new AndroidJavaObject("java.lang.String", "clientId"))
                            {
                                using (AndroidJavaObject v = new AndroidJavaObject("java.lang.String", StoreSettings.PlayClientId))
                                {
                                    args[0] = k;
                                    args[1] = v;
                                    AndroidJNI.CallObjectMethod(obj_HashMap.GetRawObject(),
                                                                method_Put, AndroidJNIHelper.CreateJNIArgArray(args));
                                }
                            }

                            // client secret
                            using (AndroidJavaObject k = new AndroidJavaObject("java.lang.String", "clientSecret"))
                            {
                                using (AndroidJavaObject v = new AndroidJavaObject("java.lang.String", StoreSettings.PlayClientSecret))
                                {
                                    args[0] = k;
                                    args[1] = v;
                                    AndroidJNI.CallObjectMethod(obj_HashMap.GetRawObject(),
                                                                method_Put, AndroidJNIHelper.CreateJNIArgArray(args));
                                }
                            }

                            // refresh token
                            using (AndroidJavaObject k = new AndroidJavaObject("java.lang.String", "refreshToken"))
                            {
                                using (AndroidJavaObject v = new AndroidJavaObject("java.lang.String", StoreSettings.PlayRefreshToken))
                                {
                                    args[0] = k;
                                    args[1] = v;
                                    AndroidJNI.CallObjectMethod(obj_HashMap.GetRawObject(),
                                                                method_Put, AndroidJNIHelper.CreateJNIArgArray(args));
                                }
                            }

                            // verifyOnServerFailure
                            using (AndroidJavaObject k = new AndroidJavaObject("java.lang.String", "verifyOnServerFailure"))
                            {
                                using (AndroidJavaObject v = new AndroidJavaObject("java.lang.Boolean", StoreSettings.PlayVerifyOnServerFailure))
                                {
                                    args[0] = k;
                                    args[1] = v;
                                    AndroidJNI.CallObjectMethod(obj_HashMap.GetRawObject(),
                                                                method_Put, AndroidJNIHelper.CreateJNIArgArray(args));
                                }
                            }

                            jniGooglePlayIabService.Call("configVerifyPurchases", obj_HashMap);
                        }

                        jniGooglePlayIabServiceClass.SetStatic("AllowAndroidTestPurchases", StoreSettings.AndroidTestPurchases);
                    }
                }
            }
            AndroidJNI.PopLocalFrame(IntPtr.Zero);
        }
Exemple #4
0
        private static AndroidJavaObject ToJavaHashMap(Dictionary <string, string> dic)
        {
            var hashMap   = new AndroidJavaObject("java.util.HashMap");
            var putMethod = AndroidJNIHelper.GetMethodID(hashMap.GetRawClass(), "put", "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;");
            var arguments = new object[2];

            foreach (var entry in dic)
            {
                using (var key = new AndroidJavaObject("java.lang.String", entry.Key))
                {
                    using (var val = new AndroidJavaObject("java.lang.String", entry.Value))
                    {
                        arguments[0] = key;
                        arguments[1] = val;
                        AndroidJNI.CallObjectMethod(hashMap.GetRawObject(), putMethod, AndroidJNIHelper.CreateJNIArgArray(arguments));
                    }
                } // end using
            }     // end foreach

            return(hashMap);
        }
Exemple #5
0
    public static void OnEvent(string actionId, Dictionary <string, object> parameters)
    {
        if (Application.platform != RuntimePlatform.OSXEditor && Application.platform != RuntimePlatform.WindowsEditor)
        {
            if (parameters != null && parameters.Count > 0 && parameters.Count <= 10)
            {
#if UNITY_IPHONE
                int       count        = parameters.Count;
                string [] keys         = new string[count];
                string [] stringValues = new string[count];
                double [] numberValues = new double[count];
                int       index        = 0;
                foreach (KeyValuePair <string, object> kvp in parameters)
                {
                    if (kvp.Value is string)
                    {
                        keys[index]         = kvp.Key;
                        stringValues[index] = (string)kvp.Value;
                    }
                    else
                    {
                        try {
                            double tmp = System.Convert.ToDouble(kvp.Value);
                            numberValues[index] = tmp;
                            keys[index]         = kvp.Key;
                        } catch (System.Exception) {
                            count--;
                            continue;
                        }
                    }
                    index++;
                }

                _tdgaOnEvent(actionId, keys, stringValues, numberValues, count);
#elif UNITY_ANDROID
                int count                    = parameters.Count;
                AndroidJavaObject map        = new AndroidJavaObject("java.util.HashMap", count);
                IntPtr            method_Put = AndroidJNIHelper.GetMethodID(map.GetRawClass(),
                                                                            "put", "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;");
                object[] args = new object[2];
                foreach (KeyValuePair <string, object> kvp in parameters)
                {
                    args[0] = new AndroidJavaObject("java.lang.String", kvp.Key);
                    if (typeof(System.String).IsInstanceOfType(kvp.Value))
                    {
                        args[1] = new AndroidJavaObject("java.lang.String", kvp.Value);
                    }
                    else
                    {
                        args[1] = new AndroidJavaObject("java.lang.Double", "" + kvp.Value);
                    }
                    AndroidJNI.CallObjectMethod(map.GetRawObject(), method_Put, AndroidJNIHelper.CreateJNIArgArray(args));
                }

                if (agent != null)
                {
                    AndroidJavaObject activity = unityClass.GetStatic <AndroidJavaObject>("currentActivity");
                    agent.CallStatic("onEvent", activity, actionId, map);
                }
#elif UNITY_WP8
                TalkingDataGAWP.TalkingDataGA.onEvent(actionId, parameters);
#endif
            }
        }
    }
Exemple #6
0
    /// <summary>
    /// 支付接口
    /// </summary>
    public void Pay(GameCmd.stCreatePlatOrderPropertyUserCmd_S orderMsg,
                    uint characterId, int characterlv, string roleName, string clanName
                    , Pmd.ZoneInfo zoneInfo, string currencyName, float currencyRatio
                    , table.RechargeDataBase rechargeDB)
    {
        if (!DataManager.Manager <LoginDataManager>().IsSDKLogin)
        {
            Debug.LogError("Pay Faield,SDK not login!");
            return;
        }
        if (Application.platform == RuntimePlatform.Android)
        {
            if (null == rechargeDB)
            {
                Debug.LogError("充值失败,数据错误");
                return;
            }

            AndroidJavaObject payData   = new AndroidJavaObject("com.talkingsdk.models.PayData");
            AndroidJavaObject hashmap   = new AndroidJavaObject("java.util.HashMap");
            System.IntPtr     methodPut = AndroidJNIHelper.GetMethodID(hashmap.GetRawClass(), "put", "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;");

            Debug.Log("m_loginResult.uid :" + m_loginResult.uid);


            Dictionary <string, string> dict = new Dictionary <string, string>();

            dict.Add("UserId", m_loginResult.szLoginAcccount); //uid
            //dict.Add("UserId", m_loginResult.uid); //uid
            dict.Add("UserBalance", "0");                      //用户余额
            dict.Add("UserGamerVip", "1");                     //vip 等级
            dict.Add("UserLevel", characterlv.ToString());     //角色等级
            if (string.IsNullOrEmpty(clanName))
            {
                clanName = "testName";
            }
            dict.Add("UserPartyName", clanName); //工会,帮派
            if (string.IsNullOrEmpty(roleName))
            {
                roleName = "Underworld";
            }
            dict.Add("UserRoleName", roleName);             //角色名称
            dict.Add("UserRoleId", characterId.ToString()); //角色id


            dict.Add("LoginAccount", m_loginResult.szLoginAcccount);
            dict.Add("LoginDataEx", m_loginResult.szLoginDataEx);
            dict.Add("LoginSession", m_loginResult.szLoginSession);

            dict.Add("AccessKey", orderMsg.sign);       //拓展字段

            dict.Add("OutOrderID", orderMsg.platorder); //平台订单号
            dict.Add("NoticeUrl", orderMsg.noticeurl);  //支付回调地址

            //UserServerId
            string zoneIdStr     = "";
            string serverNameStr = "Underworld";
            if (null != zoneInfo)
            {
                //合服后使用目标服务器
                zoneIdStr     = LoginDataManager.GetBestZoneID(zoneInfo).ToString();
                serverNameStr = zoneInfo.zonename;
            }

            dict.Add("UserServerId", zoneIdStr);
            dict.Add("UserServerName", serverNameStr); //
            int payMoney       = (int)rechargeDB.money;
            int gameMoneyAmout = payMoney * 10;
            dict.Add("GameMoneyAmount", gameMoneyAmout.ToString());
            dict.Add("GameMoneyName", currencyName);


            object[] args = new object[2];
            foreach (KeyValuePair <string, string> kvp in dict)
            {
                AndroidJavaObject k = new AndroidJavaObject("java.lang.String", kvp.Key);
                AndroidJavaObject v = new AndroidJavaObject("java.lang.String", kvp.Value);
                args[0] = k;
                args[1] = v;
                AndroidJNI.CallObjectMethod(hashmap.GetRawObject(), methodPut, AndroidJNIHelper.CreateJNIArgArray(args));
            }

            Debug.LogError("go to pay....  setMyOrderId " + orderMsg.gameorder +
                           " payGoodsData.pay_info.out_order: " + orderMsg.platorder +
                           " rmb: " + payMoney +
                           " setProductCount :" + orderMsg.goodnum +
                           " setProductId :" + orderMsg.appgoodid +
                           " setProductName :" + rechargeDB.rechargeName +
                           " setSubmitTime:" + orderMsg.createtime +
                           " extData:" + orderMsg.extdata +
                           " AccessKey:" + orderMsg.sign +
                           " userID:" + m_loginResult.szLoginAcccount +
                           " LoginAcccount:" + m_loginResult.szLoginAcccount
                           );

            //string 类型
            payData.Call("setMyOrderId", orderMsg.gameorder);
            payData.Call("setProductId", orderMsg.appgoodid.ToString());//"1");//
            payData.Call("setSubmitTime", orderMsg.createtime);
            payData.Call("setDescription", rechargeDB.desc);
            payData.Call("setProductName", rechargeDB.rechargeName);

            //int 类型 ,SDK 这边统一以分为单位

            int fenPayMoney = payMoney * 100;
            payData.Call("setProductRealPrice", fenPayMoney);
            payData.Call("setProductIdealPrice", fenPayMoney);
            payData.Call("setProductCount", (int)orderMsg.goodnum);
            payData.Call("setEx", hashmap);

            sdkBase.Call("pay", payData);
        }
        else if (Application.platform == RuntimePlatform.IPhonePlayer)
        {
        }
    }
Exemple #7
0
 protected virtual void initParamsFromAndroidJavaObject(AndroidJavaObject instance)
 {
     this.buttonText         = AndroidJNI.CallStringMethod(instance.GetRawObject(), AndroidJNIHelper.GetMethodID(instance.GetRawClass(), "getButtonText", "()Ljava/lang/String"), new jvalue[0] {
     });
     this.buttonColor        = AndroidJNI.CallStringMethod(instance.GetRawObject(), AndroidJNIHelper.GetMethodID(instance.GetRawClass(), "getButtonColor", "()Ljava/lang/String"), new jvalue[0] {
     });
     this.categories         = AndroidJNI.CallStringMethod(instance.GetRawObject(), AndroidJNIHelper.GetMethodID(instance.GetRawClass(), "getCategories", "()Ljava/lang/String"), new jvalue[0] {
     });
     this.postback           = AndroidJNI.CallStringMethod(instance.GetRawObject(), AndroidJNIHelper.GetMethodID(instance.GetRawClass(), "getPostback", "()Ljava/lang/String"), new jvalue[0] {
     });
     this.orientation        = AndroidJNI.CallStringMethod(instance.GetRawObject(), AndroidJNIHelper.GetMethodID(instance.GetRawClass(), "getOrientation", "()Ljava/lang/String"), new jvalue[0] {
     });
     this.backButtonCanClose = AndroidJNI.CallBooleanMethod(instance.GetRawObject(), AndroidJNIHelper.GetMethodID(instance.GetRawClass(), "isBackButtonCanClose", "()Z"), new jvalue[0] {
     });
     this.mute = AndroidJNI.CallBooleanMethod(instance.GetRawObject(), AndroidJNIHelper.GetMethodID(instance.GetRawClass(), "getMute", "()Z"), new jvalue[0] {
     });
 }
        private AndroidJavaObject convertToJavaHashMap(Dictionary <string, object> configD)
        {
            AndroidJavaObject config_Hashmap = new AndroidJavaObject("java.util.HashMap");

            if (configD != null)
            {
                Dictionary <string, object> configDict = (from kv in configD where kv.Value != null select kv).ToDictionary(kv => kv.Key, kv => kv.Value);
                IntPtr method_Put = AndroidJNIHelper.GetMethodID(config_Hashmap.GetRawClass(), "put",
                                                                 "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;");
                object[] args = new object[2];
                args[0] = args[1] = null;
                foreach (KeyValuePair <string, object> kvp in configDict)
                {
                    using (AndroidJavaObject k = new AndroidJavaObject("java.lang.String", kvp.Key))
                    {
                        args[0] = k;
                        if (kvp.Value != null && kvp.Value.Equals("yes") || kvp.Value.Equals("no"))
                        {
                            string value = kvp.Value.Equals("yes") ? "true" : "false";
                            args[1] = new AndroidJavaObject("java.lang.Boolean", value);
                        }
                        else if (kvp.Value != null)
                        {
                            if (kvp.Value.GetType().ToString() == "System.String")
                            {
                                args[1] = new AndroidJavaObject("java.lang.String", kvp.Value);
                            }
                            else if (kvp.Value.GetType().ToString() == "System.String[]")
                            {
                                string[]          tagsArray      = (string[])kvp.Value;
                                AndroidJavaObject tags_ArrayList = new AndroidJavaObject("java.util.ArrayList");
                                IntPtr            method_add     = AndroidJNIHelper.GetMethodID(tags_ArrayList.GetRawClass(), "add",
                                                                                                "(Ljava/lang/String;)Z");
                                object[] tags_args = new object[1];
                                foreach (string tag in tagsArray)
                                {
                                    if (tag != null)
                                    {
                                        tags_args[0] = new AndroidJavaObject("java.lang.String", tag);
                                        AndroidJNI.CallBooleanMethod(tags_ArrayList.GetRawObject(),
                                                                     method_add, AndroidJNIHelper.CreateJNIArgArray(tags_args));
                                    }
                                }
                                args[1] = new AndroidJavaObject("java.util.ArrayList", tags_ArrayList);
                            }
                            else
                            {
                                if (kvp.Key == HelpshiftSdk.HSCUSTOMMETADATAKEY)
                                {
                                    Dictionary <string, object> metaMap      = (Dictionary <string, object>)kvp.Value;
                                    AndroidJavaObject           meta_Hashmap = new AndroidJavaObject("java.util.HashMap");
                                    IntPtr method_MetaPut = AndroidJNIHelper.GetMethodID(meta_Hashmap.GetRawClass(), "put",
                                                                                         "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;");
                                    object[] meta_args = new object[2];
                                    meta_args[0] = meta_args[1] = null;
                                    foreach (KeyValuePair <string, object> metaKvp in metaMap)
                                    {
                                        meta_args[0] = new AndroidJavaObject("java.lang.String", metaKvp.Key);
                                        if (metaKvp.Value.GetType().ToString() == "System.String")
                                        {
                                            meta_args[1] = new AndroidJavaObject("java.lang.String", metaKvp.Value);
                                        }
                                        else if (metaKvp.Value.GetType().ToString() == "System.Int32")
                                        {
                                            meta_args[1] = new AndroidJavaObject("java.lang.Integer", metaKvp.Value);
                                        }
                                        else if (metaKvp.Value.GetType().ToString() == "System.Double")
                                        {
                                            meta_args[1] = new AndroidJavaObject("java.lang.Double", metaKvp.Value);
                                        }
                                        else if (metaKvp.Key == HelpshiftSdk.HSTAGSKEY && metaKvp.Value.GetType().ToString() == "System.String[]")
                                        {
                                            string[]          tagsArray      = (string[])metaKvp.Value;
                                            AndroidJavaObject tags_ArrayList = new AndroidJavaObject("java.util.ArrayList");
                                            IntPtr            method_add     = AndroidJNIHelper.GetMethodID(tags_ArrayList.GetRawClass(), "add",
                                                                                                            "(Ljava/lang/String;)Z");
                                            object[] tags_args = new object[1];
                                            foreach (string tag in tagsArray)
                                            {
                                                if (tag != null)
                                                {
                                                    tags_args[0] = new AndroidJavaObject("java.lang.String", tag);
                                                    AndroidJNI.CallBooleanMethod(tags_ArrayList.GetRawObject(),
                                                                                 method_add, AndroidJNIHelper.CreateJNIArgArray(tags_args));
                                                }
                                            }
                                            meta_args[1] = new AndroidJavaObject("java.util.ArrayList", tags_ArrayList);
                                        }
                                        if (meta_args[1] != null)
                                        {
                                            AndroidJNI.CallObjectMethod(meta_Hashmap.GetRawObject(),
                                                                        method_MetaPut, AndroidJNIHelper.CreateJNIArgArray(meta_args));
                                        }
                                    }
                                    args[1] = new AndroidJavaObject("java.util.HashMap", meta_Hashmap);
                                }
                                if (kvp.Key == HelpshiftSdk.HSTAGSMATCHINGKEY)
                                {
                                    Dictionary <string, object> tagsMatchingMap      = (Dictionary <string, object>)kvp.Value;
                                    AndroidJavaObject           tagsMatching_Hashmap = new AndroidJavaObject("java.util.HashMap");
                                    IntPtr method_MetaPut = AndroidJNIHelper.GetMethodID(tagsMatching_Hashmap.GetRawClass(), "put",
                                                                                         "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;");
                                    object[] tagsMatching_args = new object[2];
                                    tagsMatching_args[0] = tagsMatching_args[1] = null;
                                    foreach (KeyValuePair <string, object> tagsMatchKvp in tagsMatchingMap)
                                    {
                                        tagsMatching_args[0] = new AndroidJavaObject("java.lang.String", tagsMatchKvp.Key);
                                        if (tagsMatchKvp.Key == "operator" && tagsMatchKvp.Value.GetType().ToString() == "System.String")
                                        {
                                            tagsMatching_args[1] = new AndroidJavaObject("java.lang.String", tagsMatchKvp.Value);
                                        }
                                        else if (tagsMatchKvp.Key == "tags" && tagsMatchKvp.Value.GetType().ToString() == "System.String[]")
                                        {
                                            string[]          tagsArray      = (string[])tagsMatchKvp.Value;
                                            AndroidJavaObject tags_ArrayList = new AndroidJavaObject("java.util.ArrayList");
                                            IntPtr            method_add     = AndroidJNIHelper.GetMethodID(tags_ArrayList.GetRawClass(), "add",
                                                                                                            "(Ljava/lang/String;)Z");
                                            object[] tags_args = new object[1];
                                            foreach (string tag in tagsArray)
                                            {
                                                if (tag != null)
                                                {
                                                    tags_args[0] = new AndroidJavaObject("java.lang.String", tag);
                                                    AndroidJNI.CallBooleanMethod(tags_ArrayList.GetRawObject(),
                                                                                 method_add, AndroidJNIHelper.CreateJNIArgArray(tags_args));
                                                }
                                            }
                                            tagsMatching_args[1] = new AndroidJavaObject("java.util.ArrayList", tags_ArrayList);
                                        }
                                        if (tagsMatching_args[1] != null)
                                        {
                                            AndroidJNI.CallObjectMethod(tagsMatching_Hashmap.GetRawObject(),
                                                                        method_MetaPut, AndroidJNIHelper.CreateJNIArgArray(tagsMatching_args));
                                        }
                                    }
                                    args[1] = new AndroidJavaObject("java.util.HashMap", tagsMatching_Hashmap);
                                }
                            }
                        }
                        if (args[1] != null)
                        {
                            AndroidJNI.CallObjectMethod(config_Hashmap.GetRawObject(),
                                                        method_Put, AndroidJNIHelper.CreateJNIArgArray(args));
                        }
                    }
                }
            }
            return(config_Hashmap);
        }
Exemple #9
0
    static AndroidAssetStream()
    {
        var clsPtr = AndroidJNI.FindClass("java.io.InputStream");

        METHOD_read = AndroidJNIHelper.GetMethodID(clsPtr, "read", "([B)I");
    }
    private byte[] ImportFromIntent()
    {
        try
        {
            // Get the current activity
            AndroidJavaClass  unityPlayerClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
            AndroidJavaObject activityObject   = unityPlayerClass.GetStatic <AndroidJavaObject>("currentActivity");

            // Get the current intent
            AndroidJavaObject intent = activityObject.Call <AndroidJavaObject>("getIntent");

            // Get the intent data using AndroidJNI.CallObjectMethod so we can check for null
            IntPtr method_getData = AndroidJNIHelper.GetMethodID(intent.GetRawClass(), "getData", "()Ljava/lang/Object;");
            IntPtr getDataResult  = AndroidJNI.CallObjectMethod(intent.GetRawObject(), method_getData, AndroidJNIHelper.CreateJNIArgArray(new object[0]));
            if (getDataResult.ToInt32() != 0)
            {
                // Now actually get the data. We should be able to get it from the result of AndroidJNI.CallObjectMethod, but I don't now how so just call again
                AndroidJavaObject intentURI = intent.Call <AndroidJavaObject>("getData");

                // Open the URI as an input channel
                AndroidJavaObject contentResolver = activityObject.Call <AndroidJavaObject>("getContentResolver");
                AndroidJavaObject inputStream     = contentResolver.Call <AndroidJavaObject>("openInputStream", intentURI);
                //AndroidJavaObject inputChannel = inputStream.Call<AndroidJavaObject>("getChannel");

                // Open an output channel
                //AndroidJavaObject outputStream = new AndroidJavaObject("java.io.FileOutputStream", importPath);
                //AndroidJavaObject outputChannel = outputStream.Call<AndroidJavaObject>("getChannel");

                // Copy the file
                //long bytesTransfered = 0;
                //long bytesTotal = inputStream.Call<long>("size");

                /*while (bytesTransfered < bytesTotal && bytesTransfered<100)
                 * {
                 *  bytesTransfered += inputChannel.Call<long>("transferTo", bytesTransfered, bytesTotal, outputChannel);
                 * }*/

                byte[] data = inputStream.Call <byte[]>("readAllBytes");
                // Close the streams
                inputStream.Call("close");
                return(data);
                //outputStream.Call("close");
            }
        }
        catch (System.Exception ex)
        {
            Debug.Log(ex);
            // Handle error
        }
        return(null);
    }
Exemple #11
0
    private static AndroidJavaObject ConvertHashMap(Dictionary <string, string> dict)
    {
        AndroidJavaObject androidJavaObject = new AndroidJavaObject("java.util.HashMap");
        IntPtr            methodID          = AndroidJNIHelper.GetMethodID(androidJavaObject.GetRawClass(), "put", "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;");

        object[] array = new object[2];
        foreach (KeyValuePair <string, string> item in dict)
        {
            using (AndroidJavaObject androidJavaObject2 = new AndroidJavaObject("java.lang.String", item.Key))
            {
                using (AndroidJavaObject androidJavaObject3 = new AndroidJavaObject("java.lang.String", item.Value))
                {
                    array[0] = androidJavaObject2;
                    array[1] = androidJavaObject3;
                    AndroidJNI.CallObjectMethod(androidJavaObject.GetRawObject(), methodID, AndroidJNIHelper.CreateJNIArgArray(array));
                }
            }
        }
        return(androidJavaObject);
    }
        public static AndroidJavaObject DictionaryToAndroidJavaObject(IDictionary <String, Object> dictionary)
        {
            var javaMap   = new AndroidJavaObject("java.util.HashMap");
            var putMethod = AndroidJNIHelper.GetMethodID(javaMap.GetRawClass(), "put", "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;");

            var args = new object[2];

            foreach (var kvp in dictionary)
            {
                using (var k = new AndroidJavaObject("java.lang.String", kvp.Key))
                {
                    using (var v = new AndroidJavaObject("java.lang.String", kvp.Value))
                    {
                        args[0] = k;
                        args[1] = v;
                        AndroidJNI.CallObjectMethod(javaMap.GetRawObject(), putMethod, AndroidJNIHelper.CreateJNIArgArray(args));
                    }
                }
            }

            return(javaMap);
        }
        private AndroidJavaObject toJavaMap(Dictionary <string, object> values)
        {
            //IL_000b: Unknown result type (might be due to invalid IL or missing references)
            //IL_0010: Expected O, but got Unknown
            //IL_0058: Unknown result type (might be due to invalid IL or missing references)
            //IL_005d: Expected O, but got Unknown
            AndroidJavaObject val      = new AndroidJavaObject("java.util.HashMap", new object[0]);
            IntPtr            methodID = AndroidJNIHelper.GetMethodID(val.GetRawClass(), "put", "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;");

            object[] array = new object[2];
            foreach (KeyValuePair <string, object> value in values)
            {
                AndroidJavaObject val2 = new AndroidJavaObject("java.lang.String", new object[1]
                {
                    value.Key
                });
                try
                {
                    AndroidJavaObject val3 = toAndroidJavaObject(value.Value);
                    if (val3 != null)
                    {
                        AndroidJavaObject val4 = val3;
                        try
                        {
                            array[0] = val2;
                            array[1] = val3;
                            AndroidJNI.CallObjectMethod(val.GetRawObject(), methodID, AndroidJNIHelper.CreateJNIArgArray(array));
                        }
                        finally
                        {
                            ((IDisposable)val4)?.Dispose();
                        }
                    }
                }
                finally
                {
                    ((IDisposable)val2)?.Dispose();
                }
            }
            return(val);
        }
Exemple #14
0
 protected override void initParamsFromAndroidJavaObject(AndroidJavaObject instance)
 {
     base.initParamsFromAndroidJavaObject(instance);
     this.creativeType = AndroidJNI.CallStringMethod(instance.GetRawObject(), AndroidJNIHelper.GetMethodID(instance.GetRawClass(), "getCreativeType", "()Ljava/lang/String"), new jvalue[0] {
     });
     this.skipText     = AndroidJNI.CallStringMethod(instance.GetRawObject(), AndroidJNIHelper.GetMethodID(instance.GetRawClass(), "getSkipText", "()Ljava/lang/String"), new jvalue[0] {
     });
     this.autoPlay     = AndroidJNI.CallBooleanMethod(instance.GetRawObject(), AndroidJNIHelper.GetMethodID(instance.GetRawClass(), "isAutoPlay", "()Z"), new jvalue[0] {
     });
 }
Exemple #15
0
        public static T StaticInvokeCall <T>(string type, string name, string sig, params object[] args)
        {
            Type   t        = typeof(T);
            IntPtr rawClass = AndroidJNI.FindClass(type);
            IntPtr method   = AndroidJNI.GetStaticMethodID(rawClass, name, sig);

            jvalue[] jArgs = ConstructArgArray(args);

            try
            {
                if (t == typeof(bool))
                {
                    return((T)(object)AndroidJNI.CallStaticBooleanMethod(
                               rawClass, method, jArgs));
                }
                else if (t == typeof(string))
                {
                    return((T)(object)AndroidJNI.CallStaticStringMethod(
                               rawClass, method, jArgs));
                }
                else if (t == typeof(int))
                {
                    return((T)(object)AndroidJNI.CallStaticIntMethod(
                               rawClass, method, jArgs));
                }
                else if (t == typeof(float))
                {
                    return((T)(object)AndroidJNI.CallStaticFloatMethod(
                               rawClass, method, jArgs));
                }
                else if (t == typeof(double))
                {
                    return((T)(object)AndroidJNI.CallStaticDoubleMethod(
                               rawClass, method, jArgs));
                }
                else if (t == typeof(byte))
                {
                    return((T)(object)AndroidJNI.CallStaticByteMethod(
                               rawClass, method, jArgs));
                }
                else if (t == typeof(char))
                {
                    return((T)(object)AndroidJNI.CallStaticCharMethod(
                               rawClass, method, jArgs));
                }
                else if (t == typeof(long))
                {
                    return((T)(object)AndroidJNI.CallStaticLongMethod(
                               rawClass, method, jArgs));
                }
                else if (t == typeof(short))
                {
                    return((T)(object)AndroidJNI.CallStaticShortMethod(
                               rawClass, method, jArgs));
                }
                else if (t == typeof(IntPtr))
                {
                    return((T)(object)AndroidJNI.CallStaticObjectMethod(
                               rawClass, method, jArgs));
                }
                else
                {
                    return(StaticInvokeObjectCall <T>(type, name, sig, args));
                }
            }
            finally
            {
                AndroidJNIHelper.DeleteJNIArgArray(args, jArgs);
            }
        }
Exemple #16
0
        /// <summary>
        /// 上传文件
        /// </summary>
        /// <param name="fileParams">文件参数.</param>
        /// <param name="parameters">请求参数.</param>
        /// <param name="resultHandler">返回回调.</param>
        /// <param name="faultHandler">失败回调.</param>
        /// <param name="progressHandler">进度回调</param>
        public void upload(
            Dictionary <string, HTTPFile> fileParams,
            Dictionary <string, string> parameters,
            LuaFunction resultHandler,
            LuaFunction faultHandler,
            LuaFunction progressHandler)
        {
            _resultHandler         = resultHandler;
            _faultHandler          = faultHandler;
            _uploadProgressHandler = progressHandler;

                        #if UNITY_ANDROID && !UNITY_EDITOR
            string            appPath         = luascriptcore.modules.foundation.Path.app();
            AndroidJavaObject currentActivity = UNIEnv.getCurrentActivity();
            AndroidJavaObject assetManager    = currentActivity.Call <AndroidJavaObject> ("getAssets", new object[0]);
                        #endif

            WWWForm form = new WWWForm();
            if (fileParams != null)
            {
                foreach (KeyValuePair <string, HTTPFile> kv in fileParams)
                {
                    HTTPFile file     = kv.Value;
                    string   path     = file.path;
                    byte[]   fileData = null;


                                        #if UNITY_ANDROID && !UNITY_EDITOR
                    if (path.StartsWith(appPath) ||
                        !path.StartsWith("/"))
                    {
                        //应用包内文件
                        if (path.StartsWith(appPath))
                        {
                            path = path.Substring(appPath.Length + 1);
                        }

                        AndroidJavaObject inputStream = assetManager.Call <AndroidJavaObject> ("open", path);
                        using (MemoryStream ms = new MemoryStream())
                        {
                            try
                            {
                                IntPtr   buffer = AndroidJNI.NewByteArray(1024);
                                jvalue[] args   = new jvalue[1];
                                args [0].l = buffer;

                                IntPtr readMethodId = AndroidJNIHelper.GetMethodID(inputStream.GetRawClass(), "read", "([B)I");
                                int    hasRead      = 0;
                                while ((hasRead = AndroidJNI.CallIntMethod(inputStream.GetRawObject(), readMethodId, args)) != -1)
                                {
                                    byte[] byteArray = AndroidJNIHelper.ConvertFromJNIArray <byte[]> (buffer);
                                    ms.Write(byteArray, 0, hasRead);
                                }

                                fileData = new byte[ms.Length];
                                ms.Read(fileData, 0, (int)ms.Length);
                            }
                            finally
                            {
                                ms.Close();
                            }
                        }
                    }
                    else
                    {
                                        #endif

                    FileStream fs = new FileStream(path, FileMode.Open);
                    try
                    {
                        fileData = new byte[fs.Length];
                        fs.Read(fileData, 0, (int)fs.Length);
                    }
                    finally
                    {
                        fs.Close();
                    }

                                        #if UNITY_ANDROID && !UNITY_EDITOR
                }
                                        #endif

                    if (fileData != null)
                    {
                        form.AddBinaryData(kv.Key, fileData, System.IO.Path.GetFileName(file.path), file.mimeType);
                    }
                }
            }

            if (parameters != null)
            {
                foreach (KeyValuePair <string, string> kv in parameters)
                {
                    form.AddField(kv.Key, kv.Value);
                }
            }

            _request = UnityWebRequest.Post(url, form);

            if (_request != null)
            {
                fillHeaders();
                sendRequest();
            }
        }
    public byte[] loadExternalFileData(string fileName)
    {
        using (var javaClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))
        {
            AndroidJavaObject activity     = null;
            AndroidJavaObject stream       = null;
            AndroidJavaObject assetManager = null;
            try
            {
                //取得应用的Activity
                activity = javaClass.GetStatic <AndroidJavaObject>("currentActivity");

                //从Activity取得AssetManager实例
                assetManager = activity.Call <AndroidJavaObject>("getAssets");

                //打开文件流
                stream = assetManager.Call <AndroidJavaObject>("open", fileName);
                //获取文件长度
                var availableBytes = stream.Call <int>("available");

                byte[] bytes = null;
                if (availableBytes > 0)
                {
                    //取得InputStream.read的MethodID
                    var clsPtr      = AndroidJNI.FindClass("java.io.InputStream");
                    var METHOD_read = AndroidJNIHelper.GetMethodID(clsPtr, "read", "([B)I");

                    //申请一个Java ByteArray对象句柄
                    var byteArray = AndroidJNI.NewByteArray(availableBytes);
                    //调用方法
                    int readCount = AndroidJNI.CallIntMethod(stream.GetRawObject(), METHOD_read, new[] { new jvalue()
                                                                                                         {
                                                                                                             l = byteArray
                                                                                                         } });
                    //从Java ByteArray中得到C# byte数组
                    bytes = AndroidJNI.FromByteArray(byteArray);
                    //删除Java ByteArray对象句柄
                    AndroidJNI.DeleteLocalRef(byteArray);
                }

                //关闭文件流
                if (stream != null)
                {
                    stream.Call("close");
                    stream.Dispose();
                }
                if (assetManager != null)
                {
                    assetManager.Dispose();
                }
                if (activity != null)
                {
                    activity.Dispose();
                }
                //返回结果
                return(bytes);
            }
            catch (System.Exception ex)
            {
                //关闭文件流
                if (stream != null)
                {
                    stream.Call("close");
                    stream.Dispose();
                }
                if (assetManager != null)
                {
                    assetManager.Dispose();
                }
                if (activity != null)
                {
                    activity.Dispose();
                }

                GameDebug.LogError("loadExternalFileData error: " + ex.Message);
            }
        }

        return(null);
    }
    public void AndroidSendUpdate()
    {
        Debug.Log("AndroidSendUpdate");

        AndroidJNI.AttachCurrentThread();

        IntPtr instancePtr = AndroidJNI.CallStaticObjectMethod(pluginClass.GetRawClass(), AndroidJNI.GetStaticMethodID(pluginClass.GetRawClass(), "instance",
                                                                                                                       "()Laudiotest/takeleap/com/playsound/PlaySoundExternal;"), new jvalue[] { });

        IntPtr currentActivityPtr = AndroidJNI.GetStaticObjectField(unityClass.GetRawClass(), AndroidJNI.GetStaticFieldID(unityClass.GetRawClass(), "currentActivity", "Landroid/app/Activity;"));

        AndroidJNI.CallVoidMethod(instancePtr, AndroidJNI.GetMethodID(pluginClass.GetRawClass(), "SendVideoAudioProcess",
                                                                      "(ILandroid/content/Context;)V"),
                                  new jvalue[] { new jvalue()
                                                 {
                                                     i = SkypeManager.Instance.isCaller ? 1 : 2
                                                 }, new jvalue()
                                                 {
                                                     l = currentActivityPtr
                                                 } });

        IntPtr inputStreamPtr = AndroidJNI.CallObjectMethod(instancePtr, AndroidJNI.GetMethodID(pluginClass.GetRawClass(), "GetSendVideoProcessInputStream",
                                                                                                "()Ljava/io/InputStream;"),
                                                            new jvalue[] { });

        IntPtr numsPtr = AndroidJNI.ToByteArray(newData);

        while (true)
        {
            int bytesRead = numDataPerRead;

            bytesRead = AndroidJNI.CallIntMethod(inputStreamPtr, AndroidJNI.GetMethodID(inputStreamClass.GetRawClass(), "read",
                                                                                        "([BII)I"),
                                                 new jvalue[] { new jvalue()
                                                                {
                                                                    l = numsPtr
                                                                }, new jvalue()
                                                                {
                                                                    i = 0
                                                                }, new jvalue()
                                                                {
                                                                    i = numDataPerRead
                                                                } });

            newData = AndroidJNIHelper.ConvertFromJNIArray <byte[]>(numsPtr);

            int index = SearchBytePatternAndroid();

            Debug.Log("NNN " + bytesRead + " " + index);

            if (index != -1)
            {
                Buffer.BlockCopy(newData, 0, tempData, count, index);
                count += index;

                data = new byte[count];
                Buffer.BlockCopy(tempData, 0, data, 0, count);

                index += 2;

                Buffer.BlockCopy(newData, index, tempData, 0, bytesRead - index);
                count = bytesRead - index;
            }
            else
            {
                Buffer.BlockCopy(newData, 0, tempData, count, bytesRead);
                count += bytesRead;
            }
        }

        AndroidJNI.DeleteLocalRef(numsPtr);
    }
Exemple #19
0
        private static AndroidJavaObject ConvertDictionaryToJavaHashMap(Dictionary <string, string> parameters)
        {
            AndroidJavaObject androidJavaObject = new AndroidJavaObject("java.util.HashMap", new object[0]);
            IntPtr            methodID          = AndroidJNIHelper.GetMethodID(androidJavaObject.GetRawClass(), "put", "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;");

            foreach (KeyValuePair <string, string> keyValuePair in parameters)
            {
                using (AndroidJavaObject androidJavaObject2 = new AndroidJavaObject("java.lang.String", new object[]
                {
                    keyValuePair.Key
                }))
                {
                    using (AndroidJavaObject androidJavaObject3 = new AndroidJavaObject("java.lang.String", new object[]
                    {
                        keyValuePair.Value
                    }))
                    {
                        AndroidJNI.CallObjectMethod(androidJavaObject.GetRawObject(), methodID, AndroidJNIHelper.CreateJNIArgArray(new object[]
                        {
                            androidJavaObject2,
                            androidJavaObject3
                        }));
                    }
                }
            }
            return(androidJavaObject);
        }
Exemple #20
0
    public void LogEvent(string eventId, Dictionary <string, string> parameters, bool timed = false)
    {
        using (AndroidJavaObject hashMap = new AndroidJavaObject("java.util.HashMap"))
        {
            System.IntPtr method_Put = AndroidJNIHelper.GetMethodID(obj_HashMap.GetRawClass(), "put",
                                                                    "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;");

            object[] args = new object[2];

            foreach (KeyValuePair <string, string> kvp in parameters)
            {
                using (AndroidJavaObject k = new AndroidJavaObject("java.lang.String", kvp.Key))
                {
                    using (AndroidJavaObject v = new AndroidJavaObject("java.lang.String", kvp.Value))
                    {
                        args[0] = k;
                        args[1] = v;
                        AndroidJNI.CallObjectMethod(obj_HashMap.GetRawObject(), method_Put, AndroidJNIHelper.CreateJNIArgArray(args));
                    }
                }
            }
            flurryClass.CallStatic <AndroidJavaObject>("logEvent", eventId, hashMap, timed);
        }
    }
Exemple #21
0
#pragma warning restore 0414
        public static void AndroidApplicationContextSet()
        {
#if UNITY_ANDROID && !UNITY_EDITOR
            if (haveSetApplicationContext)
            {
                return;
            }
            haveSetApplicationContext = true;

            AndroidJavaClass  player   = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
            AndroidJavaObject activity = player.GetStatic <AndroidJavaObject>("currentActivity");

            // retrieve the Unity Android context
            AndroidJavaObject[] args = new AndroidJavaObject[1];
            args[0] = activity.Call <AndroidJavaObject>("getApplicationContext");

            // Retrieve the zappar library
            IntPtr zcv_JNI = AndroidJNI.FindClass("com/zappar/zcv/ZCV");

            bool   isStatic        = true;
            string methodSignature = "(Ljava/lang/Object;)V";
            string methodName      = "android_application_context_set";

            // Retrieve the function we want to call
            IntPtr method_AndroidApplicationContextSet = AndroidJNIHelper.GetMethodID(zcv_JNI, methodName, methodSignature, isStatic);

            // pass the Unity context to the zappar library
            AndroidJNI.CallStaticVoidMethod(zcv_JNI, method_AndroidApplicationContextSet, AndroidJNIHelper.CreateJNIArgArray(args));
#endif
        }
Exemple #22
0
    protected AndroidJavaObject dictionaryToHashMap(Dictionary <string, object> dictionary)
    {
        // Convert the C# Dictionary<string,object> to a Java Map<String,Object>
        AndroidJavaObject mapInstance = new AndroidJavaClass("java.util.HashMap");

        if (mapInstance == null)
        {
            UnityEngine.Debug.LogError("NewRelicAndroid: Could not instantiate HashMap class.");
        }

        // Call 'put' via the JNI instead of using helper classes to avoid:
        //  "JNI: Init'd AndroidJavaObject with null ptr!"
        IntPtr putMethod = AndroidJNIHelper.GetMethodID(mapInstance.GetRawClass(), "put",
                                                        "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;");

        object[] putCallArgs = new object[2];

        if (dictionary != null)
        {
            foreach (KeyValuePair <string, object> kvp in dictionary)
            {
                var value = kvp.Value;                  // kvp.Value is read-only

                if (!(value is string || kvp.Value is double))
                {
                    try {
                        value = Double.Parse(value.ToString());
                    } catch (Exception e) {
                        UnityEngine.Debug.LogErrorFormat("Coercion from [{0}] to [{1}] failed: {2}",
                                                         kvp.Key.GetType(), Double.MaxValue.GetType(), e.Message);
                    }
                }

                if (value is string || value is double)
                {
                    using (AndroidJavaObject k = new AndroidJavaObject("java.lang.String", (object)kvp.Key)) {
                        if (value is string)
                        {
                            using (AndroidJavaObject v = new AndroidJavaObject("java.lang.String", (object)value)) {
                                putCallArgs [0] = k;
                                putCallArgs [1] = v;
                                AndroidJNI.CallObjectMethod(mapInstance.GetRawObject(),
                                                            putMethod, AndroidJNIHelper.CreateJNIArgArray(putCallArgs));
                            }
                        }
                        else
                        {
                            using (AndroidJavaObject v = new AndroidJavaObject("java.lang.Double", (object)value)) {
                                putCallArgs [0] = k;
                                putCallArgs [1] = v;
                                AndroidJNI.CallObjectMethod(mapInstance.GetRawObject(),
                                                            putMethod, AndroidJNIHelper.CreateJNIArgArray(putCallArgs));
                            }
                        }
                    }
                }
                else
                {
                    UnityEngine.Debug.LogError("NewRelicAndroid: Unsupported type - value must be either string or double: " + kvp.Value);
                    return(null);
                }
            }
        }

        return(mapInstance);
    }
 private static IntPtr GetStaticMethod(IntPtr classRaw, string name, string signature)
 {
     return(AndroidJNIHelper.GetMethodID(classRaw, name, signature, true));
 }
Exemple #24
0
    // Calls a custom Graph API method with the key/value pairs in the Dictionary.  Pass in a null dictionary if no parameters are needed.
    public static void graphRequest(string graphPath, string httpMethod, Dictionary <string, string> parameters)
    {
        if (Application.platform != RuntimePlatform.Android)
        {
            return;
        }

        // load up the Bundle
        using (var bundle = new AndroidJavaObject("android.os.Bundle"))
        {
            var putStringMethod = AndroidJNI.GetMethodID(bundle.GetRawClass(), "putString", "(Ljava/lang/String;Ljava/lang/String;)V");
            var args            = new object[2];

            // add all our dictionary elements into the Bundle
            if (parameters != null)
            {
                foreach (var kv in parameters)
                {
                    args[0] = new AndroidJavaObject("java.lang.String", kv.Key);
                    args[1] = new AndroidJavaObject("java.lang.String", kv.Value);
                    AndroidJNI.CallObjectMethod(bundle.GetRawObject(), putStringMethod, AndroidJNIHelper.CreateJNIArgArray(args));
                }
            }

            // call off to java land
            _facebookPlugin.Call("graphRequest", graphPath, httpMethod, bundle);
        }
    }
Exemple #25
0
    void Start()
    {
        if (!Application.isEditor)
        {
            // First, obtain the current activity context
            using (AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))
            {
                playerActivityContext = jc.GetStatic <AndroidJavaObject>("currentActivity");
            }

            // Search for our class
            IntPtr classID = AndroidJNI.FindClass("com/intel/inde/mp/samples/unity/Capturing"); // com.intel.inde.mp.samples.unity // com/intel/penelope/Capturing

            // Search for it's contructor
            constructorMethodID = AndroidJNI.GetMethodID(classID, "<init>", "(Landroid/content/Context;II)V");
            if (constructorMethodID == IntPtr.Zero)
            {
                Debug.LogError("Can't find Capturing constructor.");
                return;
            }

            // Register our methods
            initCapturingMethodID = AndroidJNI.GetMethodID(classID, "initCapturing", "(IIII)V");
            if (initCapturingMethodID == IntPtr.Zero)
            {
                Debug.LogError("Can't find initCapturing() method.");
                return;
            }
            startCapturingMethodID = AndroidJNI.GetMethodID(classID, "startCapturing", "(Ljava/lang/String;)V");
            if (startCapturingMethodID == IntPtr.Zero)
            {
                Debug.LogError("Can't find startCapturing() method.");
                return;
            }
            captureFrameMethodID = AndroidJNI.GetMethodID(classID, "captureFrame", "(I)V");
            if (captureFrameMethodID == IntPtr.Zero)
            {
                Debug.LogError("Can't find captureFrame() method.");
                return;
            }
            stopCapturingMethodID = AndroidJNI.GetMethodID(classID, "stopCapturing", "()V");
            if (stopCapturingMethodID == IntPtr.Zero)
            {
                Debug.LogError("Can't find stopCapturingMethodID() method.");
                return;
            }

            // Register and call our static method
            getDirectoryDCIMMethodID = AndroidJNI.GetStaticMethodID(classID, "getDirectoryDCIM", "()Ljava/lang/String;");
            jvalue[] args = new jvalue[0];
            videoDir = AndroidJNI.CallStaticStringMethod(classID, getDirectoryDCIMMethodID, args);

            // Create Capturing object
            jvalue[] constructorParameters = AndroidJNIHelper.CreateJNIArgArray(new object[] {
                playerActivityContext, Screen.width, Screen.height
            });
            IntPtr local_capturingObject = AndroidJNI.NewObject(classID, constructorMethodID, constructorParameters);
            if (local_capturingObject == IntPtr.Zero)
            {
                Debug.LogError("--- Can't create Capturing object.");
                return;
            }
            // Keep a global reference to it
            capturingObject = AndroidJNI.NewGlobalRef(local_capturingObject);
            AndroidJNI.DeleteLocalRef(local_capturingObject);

            AndroidJNI.DeleteLocalRef(classID);
        }
        isRunning = false;
        Debug.Log("--- videoFrameRate = " + videoFrameRate);
        Debug.Log("--- 1.0f / videoFrameRate = " + 1.0f / videoFrameRate);
    }
 public static void OnEvent(string actionId, Dictionary <string, object> parameters)
 {
     if (Application.platform != RuntimePlatform.OSXEditor && Application.platform != RuntimePlatform.WindowsEditor)
     {
         if (parameters != null && parameters.Count > 0)
         {
             int count = parameters.Count;
             AndroidJavaObject androidJavaObject = new AndroidJavaObject("java.util.HashMap", new object[]
             {
                 count
             });
             IntPtr   methodID = AndroidJNIHelper.GetMethodID(androidJavaObject.GetRawClass(), "put", "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;");
             object[] array    = new object[2];
             foreach (KeyValuePair <string, object> current in parameters)
             {
                 array[0] = new AndroidJavaObject("java.lang.String", new object[]
                 {
                     current.Key
                 });
                 if (typeof(string).IsInstanceOfType(current.Value))
                 {
                     array[1] = new AndroidJavaObject("java.lang.String", new object[]
                     {
                         current.Value
                     });
                 }
                 else
                 {
                     array[1] = new AndroidJavaObject("java.lang.Double", new object[]
                     {
                         string.Empty + current.Value
                     });
                 }
                 AndroidJNI.CallObjectMethod(androidJavaObject.GetRawObject(), methodID, AndroidJNIHelper.CreateJNIArgArray(array));
             }
             if (TalkingDataGA.agent != null)
             {
                 TalkingDataGA.agent.CallStatic("onEvent", new object[]
                 {
                     actionId,
                     androidJavaObject
                 });
             }
         }
         else if (TalkingDataGA.agent != null)
         {
             AndroidJavaObject arg_177_0 = TalkingDataGA.agent;
             string            arg_177_1 = "onEvent";
             object[]          expr_173  = new object[2];
             expr_173[0] = actionId;
             arg_177_0.CallStatic(arg_177_1, expr_173);
         }
     }
 }
            static AssetInputStream()
            {
                var classPtr = AndroidJNI.FindClass("java/io/InputStream");

                kMethodPtr_Read = AndroidJNIHelper.GetMethodID(classPtr, "read", "([B)I");
            }
Exemple #28
0
        public T InvokeCall <T>(string name, string sig, params object[] args)
        {
            Type   t      = typeof(T);
            IntPtr method = AndroidJNI.GetMethodID(RawClass, name, sig);

            if (method == IntPtr.Zero)
            {
                Debug.LogError("Cannot get method for " + name);
                throw new Exception("Cannot get method for " + name);
            }

            jvalue[] jArgs = ConstructArgArray(args);

            try
            {
                if (t == typeof(bool))
                {
                    return((T)(object)AndroidJNI.CallBooleanMethod(raw, method, jArgs));
                }
                else if (t == typeof(string))
                {
                    return((T)(object)AndroidJNI.CallStringMethod(raw, method, jArgs));
                }
                else if (t == typeof(int))
                {
                    return((T)(object)AndroidJNI.CallIntMethod(raw, method, jArgs));
                }
                else if (t == typeof(float))
                {
                    return((T)(object)AndroidJNI.CallFloatMethod(raw, method, jArgs));
                }
                else if (t == typeof(double))
                {
                    return((T)(object)AndroidJNI.CallDoubleMethod(raw, method, jArgs));
                }
                else if (t == typeof(byte))
                {
                    return((T)(object)AndroidJNI.CallByteMethod(raw, method, jArgs));
                }
                else if (t == typeof(char))
                {
                    return((T)(object)AndroidJNI.CallCharMethod(raw, method, jArgs));
                }
                else if (t == typeof(long))
                {
                    return((T)(object)AndroidJNI.CallLongMethod(raw, method, jArgs));
                }
                else if (t == typeof(short))
                {
                    return((T)(object)AndroidJNI.CallShortMethod(raw, method, jArgs));
                }
                else if (t == typeof(IntPtr))
                {
                    return((T)(object)AndroidJNI.CallObjectMethod(raw, method, jArgs));
                }
                else
                {
                    return(InvokeObjectCall <T>(name, sig, args));
                }
            }
            finally
            {
                AndroidJNIHelper.DeleteJNIArgArray(args, jArgs);
            }
        }
Exemple #29
0
        public NativeInterface(AndroidJavaObject config)
        {
            using (var unityPlayerClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))
                using (var activity = unityPlayerClass.GetStatic <AndroidJavaObject>("currentActivity"))
                    using (var context = activity.Call <AndroidJavaObject>("getApplicationContext"))
                    {
                        // lookup the NativeInterface class and set the client to the local object.
                        // all subsequent communication should go through the NativeInterface.
                        var client             = new AndroidJavaObject("com.bugsnag.android.Client", context, config);
                        var nativeInterfaceRef = AndroidJNI.FindClass("com/bugsnag/android/NativeInterface");
                        BugsnagNativeInterface = AndroidJNI.NewGlobalRef(nativeInterfaceRef);
                        AndroidJNI.DeleteLocalRef(nativeInterfaceRef);
                        var setClient = AndroidJNI.GetStaticMethodID(BugsnagNativeInterface, "setClient", "(Lcom/bugsnag/android/Client;)V");

                        jvalue[] args = AndroidJNIHelper.CreateJNIArgArray(new object[] { client });
                        AndroidJNI.CallStaticVoidMethod(BugsnagNativeInterface, setClient, args);

                        // Cache JNI refs which will be used to load report data later in the
                        // app lifecycle to avoid repeated lookups
                        var unityRef = AndroidJNI.FindClass("com/bugsnag/android/unity/BugsnagUnity");
                        BugsnagUnityClass = AndroidJNI.NewGlobalRef(unityRef);
                        AndroidJNI.DeleteLocalRef(unityRef);
                        var crumbRef = AndroidJNI.FindClass("com/bugsnag/android/Breadcrumb");
                        BreadcrumbClass = AndroidJNI.NewGlobalRef(crumbRef);
                        AndroidJNI.DeleteLocalRef(crumbRef);
                        var crumbTypeRef = AndroidJNI.FindClass("com/bugsnag/android/BreadcrumbType");
                        BreadcrumbTypeClass = AndroidJNI.NewGlobalRef(crumbTypeRef);
                        AndroidJNI.DeleteLocalRef(crumbTypeRef);
                        var collectionRef = AndroidJNI.FindClass("java/util/Collection");
                        CollectionClass = AndroidJNI.NewGlobalRef(collectionRef);
                        AndroidJNI.DeleteLocalRef(collectionRef);
                        var iterRef = AndroidJNI.FindClass("java/util/Iterator");
                        IteratorClass = AndroidJNI.NewGlobalRef(iterRef);
                        AndroidJNI.DeleteLocalRef(iterRef);
                        var listRef = AndroidJNI.FindClass("java/util/List");
                        ListClass = AndroidJNI.NewGlobalRef(listRef);
                        AndroidJNI.DeleteLocalRef(listRef);
                        var mapRef = AndroidJNI.FindClass("java/util/Map");
                        MapClass = AndroidJNI.NewGlobalRef(mapRef);
                        AndroidJNI.DeleteLocalRef(mapRef);
                        var entryRef = AndroidJNI.FindClass("java/util/Map$Entry");
                        MapEntryClass = AndroidJNI.NewGlobalRef(entryRef);
                        AndroidJNI.DeleteLocalRef(entryRef);
                        var setRef = AndroidJNI.FindClass("java/util/Set");
                        SetClass = AndroidJNI.NewGlobalRef(setRef);
                        AndroidJNI.DeleteLocalRef(setRef);

                        BreadcrumbGetMetadata  = AndroidJNI.GetMethodID(BreadcrumbClass, "getMetadata", "()Ljava/util/Map;");
                        BreadcrumbGetType      = AndroidJNI.GetMethodID(BreadcrumbClass, "getType", "()Lcom/bugsnag/android/BreadcrumbType;");
                        BreadcrumbGetTimestamp = AndroidJNI.GetMethodID(BreadcrumbClass, "getTimestamp", "()Ljava/lang/String;");
                        BreadcrumbGetName      = AndroidJNI.GetMethodID(BreadcrumbClass, "getName", "()Ljava/lang/String;");
                        CollectionIterator     = AndroidJNI.GetMethodID(CollectionClass, "iterator", "()Ljava/util/Iterator;");
                        IteratorHasNext        = AndroidJNI.GetMethodID(IteratorClass, "hasNext", "()Z");
                        IteratorNext           = AndroidJNI.GetMethodID(IteratorClass, "next", "()Ljava/lang/Object;");
                        MapEntryGetKey         = AndroidJNI.GetMethodID(MapEntryClass, "getKey", "()Ljava/lang/Object;");
                        MapEntryGetValue       = AndroidJNI.GetMethodID(MapEntryClass, "getValue", "()Ljava/lang/Object;");
                        MapEntrySet            = AndroidJNI.GetMethodID(MapClass, "entrySet", "()Ljava/util/Set;");
                        var objectRef = AndroidJNI.FindClass("java/lang/Object");
                        ObjectToString = AndroidJNI.GetMethodID(objectRef, "toString", "()Ljava/lang/String;");
                        ObjectGetClass = AndroidJNI.GetMethodID(objectRef, "getClass", "()Ljava/lang/Class;");
                        AndroidJNI.DeleteLocalRef(objectRef);
                        var classRef = AndroidJNI.FindClass("java/lang/Class");
                        ClassIsArray = AndroidJNI.GetMethodID(classRef, "isArray", "()Z");
                        AndroidJNI.DeleteLocalRef(classRef);

                        // the bugsnag-android notifier uses Activity lifecycle tracking to
                        // determine if the application is in the foreground. As the unity
                        // activity has already started at this point we need to tell the
                        // notifier about the activity and the fact that it has started.
                        using (var sessionTracker = client.Get <AndroidJavaObject>("sessionTracker"))
                            using (var activityClass = activity.Call <AndroidJavaObject>("getClass"))
                            {
                                string activityName       = null;
                                var    activityNameObject = activityClass.Call <AndroidJavaObject>("getSimpleName");
                                if (activityNameObject != null)
                                {
                                    activityName = AndroidJNI.GetStringUTFChars(activityNameObject.GetRawObject());
                                }
                                sessionTracker.Call("updateForegroundTracker", activityName, true, 0L);
                            }
                    }
        }
Exemple #30
0
    public static void TrackEventWithParameters(string eventId, string eventLabel,
                                                Dictionary <string, object> parameters)
    {
        // Call plugin only when running on real device
        if (Application.platform != RuntimePlatform.OSXEditor && Application.platform != RuntimePlatform.WindowsEditor)
        {
#if UNITY_IPHONE
            if (parameters != null && parameters.Count > 0)
            {
                int       count        = parameters.Count;
                string [] keys         = new string[count];
                string [] stringValues = new string[count];
                double [] numberValues = new double[count];
                int       index        = 0;
                foreach (KeyValuePair <string, object> kvp in parameters)
                {
                    if (kvp.Value is string)
                    {
                        keys[index]         = kvp.Key;
                        stringValues[index] = (string)kvp.Value;
                    }
                    else
                    {
                        try
                        {
                            double tmp = System.Convert.ToDouble(kvp.Value);
                            numberValues[index] = tmp;
                            keys[index]         = kvp.Key;
                        }
                        catch (System.Exception)
                        {
                            count--;
                            continue;
                        }
                    }
                    index++;
                }
                tdTrackEventParameters(eventId, eventLabel, keys, stringValues, numberValues, count);
            }
            else
            {
                tdTrackEventLabel(eventId, eventLabel);
            }
#endif
#if UNITY_ANDROID
            if (parameters != null && parameters.Count > 0)
            {
                int count             = parameters.Count;
                AndroidJavaObject map = new AndroidJavaObject("java.util.HashMap", count);

                IntPtr method_Put = AndroidJNIHelper.GetMethodID(map.GetRawClass(),
                                                                 "put", "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;");

                object[] args = new object[2];
                foreach (KeyValuePair <string, object> kvp in parameters)
                {
                    args[0] = new AndroidJavaObject("java.lang.String", kvp.Key);
                    if (typeof(System.String).IsInstanceOfType(kvp.Value))
                    {
                        args[1] = new AndroidJavaObject("java.lang.String", kvp.Value);
                    }
                    else
                    {
                        args[1] = new AndroidJavaObject("java.lang.Double", "" + kvp.Value);
                    }
                    AndroidJNI.CallObjectMethod(map.GetRawObject(), method_Put, AndroidJNIHelper.CreateJNIArgArray(args));
                }
                AndroidJavaClass  tCAgent      = new AndroidJavaClass("com.tendcloud.tenddata.TCAgent");
                AndroidJavaClass  unityClass   = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
                AndroidJavaObject currActivity = unityClass.GetStatic <AndroidJavaObject>("currentActivity");
                tCAgent.CallStatic("onEvent", currActivity, eventId, eventLabel, map);
            }
            else
            {
                AndroidJavaClass  tCAgent      = new AndroidJavaClass("com.tendcloud.tenddata.TCAgent");
                AndroidJavaClass  unityClass   = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
                AndroidJavaObject currActivity = unityClass.GetStatic <AndroidJavaObject>("currentActivity");
                tCAgent.CallStatic("onEvent", currActivity, eventId, eventLabel);
            }
#endif
        }
    }