diff options
268 files changed, 6974 insertions, 201 deletions
diff --git a/StoneIsland/platforms/android/AndroidManifest.xml b/StoneIsland/platforms/android/AndroidManifest.xml index 1a0d30c7..25ce62dd 100755 --- a/StoneIsland/platforms/android/AndroidManifest.xml +++ b/StoneIsland/platforms/android/AndroidManifest.xml @@ -41,6 +41,18 @@ </intent-filter> </service> <service android:exported="false" android:name="com.adobe.phonegap.push.RegistrationIntentService" /> + <receiver android:enabled="true" android:name="com.google.android.gms.analytics.AnalyticsReceiver"> + <intent-filter> + <action android:name="com.google.android.gms.analytics.ANALYTICS_DISPATCH" /> + </intent-filter> + </receiver> + <service android:enabled="true" android:exported="false" android:name="com.google.android.gms.analytics.AnalyticsService" /> + <receiver android:enabled="true" android:exported="true" android:name="com.google.android.gms.analytics.CampaignTrackingReceiver"> + <intent-filter> + <action android:name="com.android.vending.INSTALL_REFERRER" /> + </intent-filter> + </receiver> + <service android:enabled="true" android:exported="false" android:name="com.google.android.gms.analytics.CampaignTrackingService" /> </application> <uses-sdk android:minSdkVersion="21" android:targetSdkVersion="22" /> <uses-permission android:name="android.permission.WAKE_LOCK" /> diff --git a/StoneIsland/platforms/android/CordovaLib/build/generated/source/buildConfig/androidTest/debug/org/apache/cordova/test/BuildConfig.java b/StoneIsland/platforms/android/CordovaLib/build/generated/source/buildConfig/androidTest/debug/org/apache/cordova/test/BuildConfig.java deleted file mode 100644 index 85186877..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/generated/source/buildConfig/androidTest/debug/org/apache/cordova/test/BuildConfig.java +++ /dev/null @@ -1,13 +0,0 @@ -/** - * Automatically generated file. DO NOT MODIFY - */ -package org.apache.cordova.test; - -public final class BuildConfig { - public static final boolean DEBUG = Boolean.parseBoolean("true"); - public static final String APPLICATION_ID = "org.apache.cordova.test"; - public static final String BUILD_TYPE = "debug"; - public static final String FLAVOR = ""; - public static final int VERSION_CODE = -1; - public static final String VERSION_NAME = ""; -} diff --git a/StoneIsland/platforms/android/CordovaLib/build/generated/source/buildConfig/debug/org/apache/cordova/BuildConfig.java b/StoneIsland/platforms/android/CordovaLib/build/generated/source/buildConfig/debug/org/apache/cordova/BuildConfig.java deleted file mode 100644 index f2feb906..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/generated/source/buildConfig/debug/org/apache/cordova/BuildConfig.java +++ /dev/null @@ -1,13 +0,0 @@ -/** - * Automatically generated file. DO NOT MODIFY - */ -package org.apache.cordova; - -public final class BuildConfig { - public static final boolean DEBUG = Boolean.parseBoolean("true"); - public static final String APPLICATION_ID = "org.apache.cordova"; - public static final String BUILD_TYPE = "debug"; - public static final String FLAVOR = ""; - public static final int VERSION_CODE = 1; - public static final String VERSION_NAME = "1.0"; -} diff --git a/StoneIsland/platforms/android/CordovaLib/build/generated/source/buildConfig/release/org/apache/cordova/BuildConfig.java b/StoneIsland/platforms/android/CordovaLib/build/generated/source/buildConfig/release/org/apache/cordova/BuildConfig.java deleted file mode 100644 index 3e3c0cfe..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/generated/source/buildConfig/release/org/apache/cordova/BuildConfig.java +++ /dev/null @@ -1,13 +0,0 @@ -/** - * Automatically generated file. DO NOT MODIFY - */ -package org.apache.cordova; - -public final class BuildConfig { - public static final boolean DEBUG = false; - public static final String APPLICATION_ID = "org.apache.cordova"; - public static final String BUILD_TYPE = "release"; - public static final String FLAVOR = ""; - public static final int VERSION_CODE = 1; - public static final String VERSION_NAME = "1.0"; -} diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/bundles/debug/AndroidManifest.xml b/StoneIsland/platforms/android/CordovaLib/build/intermediates/bundles/debug/AndroidManifest.xml deleted file mode 100644 index 90863ed8..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/bundles/debug/AndroidManifest.xml +++ /dev/null @@ -1,27 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- - Licensed to the Apache Software Foundation (ASF) under one - or more contributor license agreements. See the NOTICE file - distributed with this work for additional information - regarding copyright ownership. The ASF licenses this file - to you under the Apache License, Version 2.0 (the - "License"); you may not use this file except in compliance - with the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, - software distributed under the License is distributed on an - "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - KIND, either express or implied. See the License for the - specific language governing permissions and limitations - under the License. ---> -<manifest xmlns:android="http://schemas.android.com/apk/res/android" - package="org.apache.cordova" - android:versionCode="1" - android:versionName="1.0" > - - <uses-sdk android:minSdkVersion="14" /> - -</manifest>
\ No newline at end of file diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/bundles/debug/classes.jar b/StoneIsland/platforms/android/CordovaLib/build/intermediates/bundles/debug/classes.jar Binary files differdeleted file mode 100644 index 9e8389ce..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/bundles/debug/classes.jar +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/bundles/release/AndroidManifest.xml b/StoneIsland/platforms/android/CordovaLib/build/intermediates/bundles/release/AndroidManifest.xml deleted file mode 100644 index 90863ed8..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/bundles/release/AndroidManifest.xml +++ /dev/null @@ -1,27 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- - Licensed to the Apache Software Foundation (ASF) under one - or more contributor license agreements. See the NOTICE file - distributed with this work for additional information - regarding copyright ownership. The ASF licenses this file - to you under the Apache License, Version 2.0 (the - "License"); you may not use this file except in compliance - with the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, - software distributed under the License is distributed on an - "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - KIND, either express or implied. See the License for the - specific language governing permissions and limitations - under the License. ---> -<manifest xmlns:android="http://schemas.android.com/apk/res/android" - package="org.apache.cordova" - android:versionCode="1" - android:versionName="1.0" > - - <uses-sdk android:minSdkVersion="14" /> - -</manifest>
\ No newline at end of file diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/bundles/release/classes.jar b/StoneIsland/platforms/android/CordovaLib/build/intermediates/bundles/release/classes.jar Binary files differdeleted file mode 100644 index d04b9183..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/bundles/release/classes.jar +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/AuthenticationToken.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/AuthenticationToken.class Binary files differdeleted file mode 100644 index e9d51465..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/AuthenticationToken.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/BuildConfig.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/BuildConfig.class Binary files differdeleted file mode 100644 index 4c5619f6..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/BuildConfig.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CallbackContext.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CallbackContext.class Binary files differdeleted file mode 100644 index 2ee39be7..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CallbackContext.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CallbackMap.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CallbackMap.class Binary files differdeleted file mode 100644 index 462375d9..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CallbackMap.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/Config.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/Config.class Binary files differdeleted file mode 100644 index 66cb1be9..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/Config.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/ConfigXmlParser.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/ConfigXmlParser.class Binary files differdeleted file mode 100644 index 62fa0b3d..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/ConfigXmlParser.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaActivity$1.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaActivity$1.class Binary files differdeleted file mode 100644 index c4624d15..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaActivity$1.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaActivity$2.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaActivity$2.class Binary files differdeleted file mode 100644 index 33738151..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaActivity$2.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaActivity$3.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaActivity$3.class Binary files differdeleted file mode 100644 index fabe9efa..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaActivity$3.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaActivity$4$1.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaActivity$4$1.class Binary files differdeleted file mode 100644 index 3c062db9..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaActivity$4$1.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaActivity$4.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaActivity$4.class Binary files differdeleted file mode 100644 index 76695eb5..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaActivity$4.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaActivity.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaActivity.class Binary files differdeleted file mode 100644 index bfe0c70e..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaActivity.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaArgs.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaArgs.class Binary files differdeleted file mode 100644 index 18014a39..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaArgs.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaBridge.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaBridge.class Binary files differdeleted file mode 100644 index c7f3f237..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaBridge.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaClientCertRequest.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaClientCertRequest.class Binary files differdeleted file mode 100644 index 46007d42..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaClientCertRequest.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaDialogsHelper$1.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaDialogsHelper$1.class Binary files differdeleted file mode 100644 index 683ff52e..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaDialogsHelper$1.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaDialogsHelper$2.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaDialogsHelper$2.class Binary files differdeleted file mode 100644 index c7f3d4af..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaDialogsHelper$2.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaDialogsHelper$3.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaDialogsHelper$3.class Binary files differdeleted file mode 100644 index 4cb4f9bc..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaDialogsHelper$3.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaDialogsHelper$4.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaDialogsHelper$4.class Binary files differdeleted file mode 100644 index ac24ba52..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaDialogsHelper$4.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaDialogsHelper$5.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaDialogsHelper$5.class Binary files differdeleted file mode 100644 index 3ab9531e..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaDialogsHelper$5.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaDialogsHelper$6.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaDialogsHelper$6.class Binary files differdeleted file mode 100644 index 05530d9e..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaDialogsHelper$6.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaDialogsHelper$7.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaDialogsHelper$7.class Binary files differdeleted file mode 100644 index 5cd2cb8c..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaDialogsHelper$7.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaDialogsHelper$8.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaDialogsHelper$8.class Binary files differdeleted file mode 100644 index e57fded7..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaDialogsHelper$8.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaDialogsHelper$9.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaDialogsHelper$9.class Binary files differdeleted file mode 100644 index 628d4627..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaDialogsHelper$9.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaDialogsHelper$Result.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaDialogsHelper$Result.class Binary files differdeleted file mode 100644 index c4dd9997..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaDialogsHelper$Result.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaDialogsHelper.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaDialogsHelper.class Binary files differdeleted file mode 100644 index fd873766..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaDialogsHelper.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaHttpAuthHandler.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaHttpAuthHandler.class Binary files differdeleted file mode 100644 index c912f928..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaHttpAuthHandler.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaInterface.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaInterface.class Binary files differdeleted file mode 100644 index b2059438..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaInterface.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaInterfaceImpl$ActivityResultHolder.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaInterfaceImpl$ActivityResultHolder.class Binary files differdeleted file mode 100644 index 92dae914..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaInterfaceImpl$ActivityResultHolder.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaInterfaceImpl.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaInterfaceImpl.class Binary files differdeleted file mode 100644 index 22ffbfe4..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaInterfaceImpl.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaPlugin.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaPlugin.class Binary files differdeleted file mode 100644 index d8906c9c..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaPlugin.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaPreferences.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaPreferences.class Binary files differdeleted file mode 100644 index ed0b3da5..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaPreferences.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaResourceApi$OpenForReadResult.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaResourceApi$OpenForReadResult.class Binary files differdeleted file mode 100644 index 15ab1f62..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaResourceApi$OpenForReadResult.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaResourceApi.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaResourceApi.class Binary files differdeleted file mode 100644 index f11f59a3..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaResourceApi.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaWebView.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaWebView.class Binary files differdeleted file mode 100644 index 9fb80528..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaWebView.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaWebViewEngine$Client.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaWebViewEngine$Client.class Binary files differdeleted file mode 100644 index deb6dfda..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaWebViewEngine$Client.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaWebViewEngine$EngineView.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaWebViewEngine$EngineView.class Binary files differdeleted file mode 100644 index 1149bf24..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaWebViewEngine$EngineView.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaWebViewEngine.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaWebViewEngine.class Binary files differdeleted file mode 100644 index 7a7dcb4f..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaWebViewEngine.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaWebViewImpl$1.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaWebViewImpl$1.class Binary files differdeleted file mode 100644 index 4cf05bbe..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaWebViewImpl$1.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaWebViewImpl$2.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaWebViewImpl$2.class Binary files differdeleted file mode 100644 index af9110d2..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaWebViewImpl$2.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaWebViewImpl$3.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaWebViewImpl$3.class Binary files differdeleted file mode 100644 index e5c567e3..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaWebViewImpl$3.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaWebViewImpl$EngineClient$1$1.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaWebViewImpl$EngineClient$1$1.class Binary files differdeleted file mode 100644 index 1370f669..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaWebViewImpl$EngineClient$1$1.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaWebViewImpl$EngineClient$1.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaWebViewImpl$EngineClient$1.class Binary files differdeleted file mode 100644 index a93f9374..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaWebViewImpl$EngineClient$1.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaWebViewImpl$EngineClient.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaWebViewImpl$EngineClient.class Binary files differdeleted file mode 100644 index 4df9559c..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaWebViewImpl$EngineClient.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaWebViewImpl.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaWebViewImpl.class Binary files differdeleted file mode 100644 index a8921a41..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaWebViewImpl.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CoreAndroid$1.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CoreAndroid$1.class Binary files differdeleted file mode 100644 index 5365b497..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CoreAndroid$1.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CoreAndroid$2.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CoreAndroid$2.class Binary files differdeleted file mode 100644 index 7509891d..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CoreAndroid$2.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CoreAndroid$3.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CoreAndroid$3.class Binary files differdeleted file mode 100644 index 6f01ec94..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CoreAndroid$3.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CoreAndroid$4.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CoreAndroid$4.class Binary files differdeleted file mode 100644 index 12c2685d..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CoreAndroid$4.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CoreAndroid$5.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CoreAndroid$5.class Binary files differdeleted file mode 100644 index 306f92b6..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CoreAndroid$5.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CoreAndroid.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CoreAndroid.class Binary files differdeleted file mode 100644 index 324266e6..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CoreAndroid.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/ExposedJsApi.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/ExposedJsApi.class Binary files differdeleted file mode 100644 index 6e675205..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/ExposedJsApi.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/ICordovaClientCertRequest.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/ICordovaClientCertRequest.class Binary files differdeleted file mode 100644 index 18ad39ec..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/ICordovaClientCertRequest.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/ICordovaCookieManager.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/ICordovaCookieManager.class Binary files differdeleted file mode 100644 index 142b69c9..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/ICordovaCookieManager.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/ICordovaHttpAuthHandler.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/ICordovaHttpAuthHandler.class Binary files differdeleted file mode 100644 index ac03d2d9..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/ICordovaHttpAuthHandler.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/LOG.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/LOG.class Binary files differdeleted file mode 100644 index 11bd8f7c..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/LOG.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/NativeToJsMessageQueue$BridgeMode.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/NativeToJsMessageQueue$BridgeMode.class Binary files differdeleted file mode 100644 index 1d25e8d1..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/NativeToJsMessageQueue$BridgeMode.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/NativeToJsMessageQueue$EvalBridgeMode$1.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/NativeToJsMessageQueue$EvalBridgeMode$1.class Binary files differdeleted file mode 100644 index 9f380c55..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/NativeToJsMessageQueue$EvalBridgeMode$1.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/NativeToJsMessageQueue$EvalBridgeMode.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/NativeToJsMessageQueue$EvalBridgeMode.class Binary files differdeleted file mode 100644 index 8bae598b..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/NativeToJsMessageQueue$EvalBridgeMode.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/NativeToJsMessageQueue$JsMessage.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/NativeToJsMessageQueue$JsMessage.class Binary files differdeleted file mode 100644 index 599bdc02..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/NativeToJsMessageQueue$JsMessage.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/NativeToJsMessageQueue$LoadUrlBridgeMode$1.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/NativeToJsMessageQueue$LoadUrlBridgeMode$1.class Binary files differdeleted file mode 100644 index 1f58f471..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/NativeToJsMessageQueue$LoadUrlBridgeMode$1.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/NativeToJsMessageQueue$LoadUrlBridgeMode.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/NativeToJsMessageQueue$LoadUrlBridgeMode.class Binary files differdeleted file mode 100644 index 58ab6eea..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/NativeToJsMessageQueue$LoadUrlBridgeMode.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/NativeToJsMessageQueue$NoOpBridgeMode.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/NativeToJsMessageQueue$NoOpBridgeMode.class Binary files differdeleted file mode 100644 index 5befb5dd..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/NativeToJsMessageQueue$NoOpBridgeMode.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/NativeToJsMessageQueue$OnlineEventsBridgeMode$1.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/NativeToJsMessageQueue$OnlineEventsBridgeMode$1.class Binary files differdeleted file mode 100644 index 3d637415..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/NativeToJsMessageQueue$OnlineEventsBridgeMode$1.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/NativeToJsMessageQueue$OnlineEventsBridgeMode$2.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/NativeToJsMessageQueue$OnlineEventsBridgeMode$2.class Binary files differdeleted file mode 100644 index 58299a40..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/NativeToJsMessageQueue$OnlineEventsBridgeMode$2.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/NativeToJsMessageQueue$OnlineEventsBridgeMode$OnlineEventsBridgeModeDelegate.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/NativeToJsMessageQueue$OnlineEventsBridgeMode$OnlineEventsBridgeModeDelegate.class Binary files differdeleted file mode 100644 index c3848041..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/NativeToJsMessageQueue$OnlineEventsBridgeMode$OnlineEventsBridgeModeDelegate.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/NativeToJsMessageQueue$OnlineEventsBridgeMode.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/NativeToJsMessageQueue$OnlineEventsBridgeMode.class Binary files differdeleted file mode 100644 index 4281bfde..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/NativeToJsMessageQueue$OnlineEventsBridgeMode.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/NativeToJsMessageQueue.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/NativeToJsMessageQueue.class Binary files differdeleted file mode 100644 index 7048a7b4..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/NativeToJsMessageQueue.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/PluginEntry.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/PluginEntry.class Binary files differdeleted file mode 100644 index 4adc8d03..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/PluginEntry.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/PluginManager.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/PluginManager.class Binary files differdeleted file mode 100644 index c59578c4..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/PluginManager.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/PluginResult$Status.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/PluginResult$Status.class Binary files differdeleted file mode 100644 index d9ff981f..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/PluginResult$Status.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/PluginResult.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/PluginResult.class Binary files differdeleted file mode 100644 index dfefc658..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/PluginResult.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/ResumeCallback.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/ResumeCallback.class Binary files differdeleted file mode 100644 index fc6a4d13..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/ResumeCallback.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/Whitelist$URLPattern.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/Whitelist$URLPattern.class Binary files differdeleted file mode 100644 index 05973c38..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/Whitelist$URLPattern.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/Whitelist.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/Whitelist.class Binary files differdeleted file mode 100644 index 1be2bfca..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/Whitelist.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/engine/SystemCookieManager.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/engine/SystemCookieManager.class Binary files differdeleted file mode 100644 index 4d1199c6..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/engine/SystemCookieManager.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/engine/SystemExposedJsApi.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/engine/SystemExposedJsApi.class Binary files differdeleted file mode 100644 index 8511795f..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/engine/SystemExposedJsApi.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/engine/SystemWebChromeClient$1.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/engine/SystemWebChromeClient$1.class Binary files differdeleted file mode 100644 index 9b3e91ee..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/engine/SystemWebChromeClient$1.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/engine/SystemWebChromeClient$2.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/engine/SystemWebChromeClient$2.class Binary files differdeleted file mode 100644 index 2d0ac1a4..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/engine/SystemWebChromeClient$2.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/engine/SystemWebChromeClient$3.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/engine/SystemWebChromeClient$3.class Binary files differdeleted file mode 100644 index 5c6f1a01..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/engine/SystemWebChromeClient$3.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/engine/SystemWebChromeClient$4.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/engine/SystemWebChromeClient$4.class Binary files differdeleted file mode 100644 index d7817b09..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/engine/SystemWebChromeClient$4.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/engine/SystemWebChromeClient$5.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/engine/SystemWebChromeClient$5.class Binary files differdeleted file mode 100644 index 797cdd71..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/engine/SystemWebChromeClient$5.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/engine/SystemWebChromeClient.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/engine/SystemWebChromeClient.class Binary files differdeleted file mode 100644 index f4959cc7..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/engine/SystemWebChromeClient.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/engine/SystemWebView.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/engine/SystemWebView.class Binary files differdeleted file mode 100644 index 9dfe6ede..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/engine/SystemWebView.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/engine/SystemWebViewClient.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/engine/SystemWebViewClient.class Binary files differdeleted file mode 100644 index 4ded5789..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/engine/SystemWebViewClient.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/engine/SystemWebViewEngine$1.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/engine/SystemWebViewEngine$1.class Binary files differdeleted file mode 100644 index 88b63e1e..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/engine/SystemWebViewEngine$1.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/engine/SystemWebViewEngine$2.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/engine/SystemWebViewEngine$2.class Binary files differdeleted file mode 100644 index 2502947c..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/engine/SystemWebViewEngine$2.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/engine/SystemWebViewEngine.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/engine/SystemWebViewEngine.class Binary files differdeleted file mode 100644 index 8ea85524..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/engine/SystemWebViewEngine.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/AuthenticationToken.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/AuthenticationToken.class Binary files differdeleted file mode 100644 index e9d51465..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/AuthenticationToken.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/BuildConfig.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/BuildConfig.class Binary files differdeleted file mode 100644 index bf0083a2..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/BuildConfig.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CallbackContext.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CallbackContext.class Binary files differdeleted file mode 100644 index 2ee39be7..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CallbackContext.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CallbackMap.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CallbackMap.class Binary files differdeleted file mode 100644 index 462375d9..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CallbackMap.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/Config.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/Config.class Binary files differdeleted file mode 100644 index 66cb1be9..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/Config.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/ConfigXmlParser.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/ConfigXmlParser.class Binary files differdeleted file mode 100644 index 62fa0b3d..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/ConfigXmlParser.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaActivity$1.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaActivity$1.class Binary files differdeleted file mode 100644 index c4624d15..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaActivity$1.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaActivity$2.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaActivity$2.class Binary files differdeleted file mode 100644 index 33738151..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaActivity$2.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaActivity$3.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaActivity$3.class Binary files differdeleted file mode 100644 index fabe9efa..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaActivity$3.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaActivity$4$1.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaActivity$4$1.class Binary files differdeleted file mode 100644 index 3c062db9..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaActivity$4$1.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaActivity$4.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaActivity$4.class Binary files differdeleted file mode 100644 index 76695eb5..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaActivity$4.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaActivity.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaActivity.class Binary files differdeleted file mode 100644 index bfe0c70e..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaActivity.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaArgs.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaArgs.class Binary files differdeleted file mode 100644 index 18014a39..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaArgs.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaBridge.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaBridge.class Binary files differdeleted file mode 100644 index c7f3f237..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaBridge.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaClientCertRequest.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaClientCertRequest.class Binary files differdeleted file mode 100644 index 46007d42..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaClientCertRequest.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaDialogsHelper$1.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaDialogsHelper$1.class Binary files differdeleted file mode 100644 index 683ff52e..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaDialogsHelper$1.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaDialogsHelper$2.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaDialogsHelper$2.class Binary files differdeleted file mode 100644 index c7f3d4af..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaDialogsHelper$2.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaDialogsHelper$3.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaDialogsHelper$3.class Binary files differdeleted file mode 100644 index 4cb4f9bc..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaDialogsHelper$3.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaDialogsHelper$4.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaDialogsHelper$4.class Binary files differdeleted file mode 100644 index ac24ba52..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaDialogsHelper$4.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaDialogsHelper$5.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaDialogsHelper$5.class Binary files differdeleted file mode 100644 index 3ab9531e..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaDialogsHelper$5.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaDialogsHelper$6.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaDialogsHelper$6.class Binary files differdeleted file mode 100644 index 05530d9e..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaDialogsHelper$6.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaDialogsHelper$7.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaDialogsHelper$7.class Binary files differdeleted file mode 100644 index 5cd2cb8c..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaDialogsHelper$7.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaDialogsHelper$8.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaDialogsHelper$8.class Binary files differdeleted file mode 100644 index e57fded7..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaDialogsHelper$8.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaDialogsHelper$9.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaDialogsHelper$9.class Binary files differdeleted file mode 100644 index 628d4627..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaDialogsHelper$9.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaDialogsHelper$Result.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaDialogsHelper$Result.class Binary files differdeleted file mode 100644 index c4dd9997..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaDialogsHelper$Result.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaDialogsHelper.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaDialogsHelper.class Binary files differdeleted file mode 100644 index fd873766..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaDialogsHelper.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaHttpAuthHandler.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaHttpAuthHandler.class Binary files differdeleted file mode 100644 index c912f928..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaHttpAuthHandler.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaInterface.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaInterface.class Binary files differdeleted file mode 100644 index b2059438..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaInterface.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaInterfaceImpl$ActivityResultHolder.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaInterfaceImpl$ActivityResultHolder.class Binary files differdeleted file mode 100644 index 92dae914..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaInterfaceImpl$ActivityResultHolder.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaInterfaceImpl.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaInterfaceImpl.class Binary files differdeleted file mode 100644 index 22ffbfe4..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaInterfaceImpl.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaPlugin.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaPlugin.class Binary files differdeleted file mode 100644 index d8906c9c..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaPlugin.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaPreferences.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaPreferences.class Binary files differdeleted file mode 100644 index ed0b3da5..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaPreferences.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaResourceApi$OpenForReadResult.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaResourceApi$OpenForReadResult.class Binary files differdeleted file mode 100644 index 15ab1f62..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaResourceApi$OpenForReadResult.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaResourceApi.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaResourceApi.class Binary files differdeleted file mode 100644 index f11f59a3..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaResourceApi.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaWebView.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaWebView.class Binary files differdeleted file mode 100644 index 9fb80528..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaWebView.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaWebViewEngine$Client.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaWebViewEngine$Client.class Binary files differdeleted file mode 100644 index deb6dfda..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaWebViewEngine$Client.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaWebViewEngine$EngineView.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaWebViewEngine$EngineView.class Binary files differdeleted file mode 100644 index 1149bf24..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaWebViewEngine$EngineView.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaWebViewEngine.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaWebViewEngine.class Binary files differdeleted file mode 100644 index 7a7dcb4f..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaWebViewEngine.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaWebViewImpl$1.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaWebViewImpl$1.class Binary files differdeleted file mode 100644 index 4cf05bbe..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaWebViewImpl$1.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaWebViewImpl$2.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaWebViewImpl$2.class Binary files differdeleted file mode 100644 index af9110d2..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaWebViewImpl$2.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaWebViewImpl$3.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaWebViewImpl$3.class Binary files differdeleted file mode 100644 index e5c567e3..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaWebViewImpl$3.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaWebViewImpl$EngineClient$1$1.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaWebViewImpl$EngineClient$1$1.class Binary files differdeleted file mode 100644 index 1370f669..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaWebViewImpl$EngineClient$1$1.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaWebViewImpl$EngineClient$1.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaWebViewImpl$EngineClient$1.class Binary files differdeleted file mode 100644 index a93f9374..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaWebViewImpl$EngineClient$1.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaWebViewImpl$EngineClient.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaWebViewImpl$EngineClient.class Binary files differdeleted file mode 100644 index 4df9559c..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaWebViewImpl$EngineClient.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaWebViewImpl.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaWebViewImpl.class Binary files differdeleted file mode 100644 index a8921a41..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaWebViewImpl.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CoreAndroid$1.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CoreAndroid$1.class Binary files differdeleted file mode 100644 index 5365b497..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CoreAndroid$1.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CoreAndroid$2.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CoreAndroid$2.class Binary files differdeleted file mode 100644 index 7509891d..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CoreAndroid$2.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CoreAndroid$3.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CoreAndroid$3.class Binary files differdeleted file mode 100644 index 6f01ec94..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CoreAndroid$3.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CoreAndroid$4.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CoreAndroid$4.class Binary files differdeleted file mode 100644 index 12c2685d..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CoreAndroid$4.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CoreAndroid$5.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CoreAndroid$5.class Binary files differdeleted file mode 100644 index 306f92b6..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CoreAndroid$5.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CoreAndroid.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CoreAndroid.class Binary files differdeleted file mode 100644 index 324266e6..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CoreAndroid.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/ExposedJsApi.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/ExposedJsApi.class Binary files differdeleted file mode 100644 index 6e675205..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/ExposedJsApi.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/ICordovaClientCertRequest.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/ICordovaClientCertRequest.class Binary files differdeleted file mode 100644 index 18ad39ec..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/ICordovaClientCertRequest.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/ICordovaCookieManager.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/ICordovaCookieManager.class Binary files differdeleted file mode 100644 index 142b69c9..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/ICordovaCookieManager.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/ICordovaHttpAuthHandler.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/ICordovaHttpAuthHandler.class Binary files differdeleted file mode 100644 index ac03d2d9..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/ICordovaHttpAuthHandler.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/LOG.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/LOG.class Binary files differdeleted file mode 100644 index 11bd8f7c..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/LOG.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/NativeToJsMessageQueue$BridgeMode.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/NativeToJsMessageQueue$BridgeMode.class Binary files differdeleted file mode 100644 index 1d25e8d1..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/NativeToJsMessageQueue$BridgeMode.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/NativeToJsMessageQueue$EvalBridgeMode$1.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/NativeToJsMessageQueue$EvalBridgeMode$1.class Binary files differdeleted file mode 100644 index 9f380c55..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/NativeToJsMessageQueue$EvalBridgeMode$1.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/NativeToJsMessageQueue$EvalBridgeMode.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/NativeToJsMessageQueue$EvalBridgeMode.class Binary files differdeleted file mode 100644 index 8bae598b..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/NativeToJsMessageQueue$EvalBridgeMode.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/NativeToJsMessageQueue$JsMessage.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/NativeToJsMessageQueue$JsMessage.class Binary files differdeleted file mode 100644 index 599bdc02..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/NativeToJsMessageQueue$JsMessage.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/NativeToJsMessageQueue$LoadUrlBridgeMode$1.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/NativeToJsMessageQueue$LoadUrlBridgeMode$1.class Binary files differdeleted file mode 100644 index 1f58f471..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/NativeToJsMessageQueue$LoadUrlBridgeMode$1.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/NativeToJsMessageQueue$LoadUrlBridgeMode.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/NativeToJsMessageQueue$LoadUrlBridgeMode.class Binary files differdeleted file mode 100644 index 58ab6eea..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/NativeToJsMessageQueue$LoadUrlBridgeMode.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/NativeToJsMessageQueue$NoOpBridgeMode.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/NativeToJsMessageQueue$NoOpBridgeMode.class Binary files differdeleted file mode 100644 index 5befb5dd..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/NativeToJsMessageQueue$NoOpBridgeMode.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/NativeToJsMessageQueue$OnlineEventsBridgeMode$1.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/NativeToJsMessageQueue$OnlineEventsBridgeMode$1.class Binary files differdeleted file mode 100644 index 3d637415..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/NativeToJsMessageQueue$OnlineEventsBridgeMode$1.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/NativeToJsMessageQueue$OnlineEventsBridgeMode$2.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/NativeToJsMessageQueue$OnlineEventsBridgeMode$2.class Binary files differdeleted file mode 100644 index 58299a40..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/NativeToJsMessageQueue$OnlineEventsBridgeMode$2.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/NativeToJsMessageQueue$OnlineEventsBridgeMode$OnlineEventsBridgeModeDelegate.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/NativeToJsMessageQueue$OnlineEventsBridgeMode$OnlineEventsBridgeModeDelegate.class Binary files differdeleted file mode 100644 index c3848041..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/NativeToJsMessageQueue$OnlineEventsBridgeMode$OnlineEventsBridgeModeDelegate.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/NativeToJsMessageQueue$OnlineEventsBridgeMode.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/NativeToJsMessageQueue$OnlineEventsBridgeMode.class Binary files differdeleted file mode 100644 index 4281bfde..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/NativeToJsMessageQueue$OnlineEventsBridgeMode.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/NativeToJsMessageQueue.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/NativeToJsMessageQueue.class Binary files differdeleted file mode 100644 index 7048a7b4..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/NativeToJsMessageQueue.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/PluginEntry.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/PluginEntry.class Binary files differdeleted file mode 100644 index 4adc8d03..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/PluginEntry.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/PluginManager.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/PluginManager.class Binary files differdeleted file mode 100644 index c59578c4..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/PluginManager.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/PluginResult$Status.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/PluginResult$Status.class Binary files differdeleted file mode 100644 index d9ff981f..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/PluginResult$Status.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/PluginResult.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/PluginResult.class Binary files differdeleted file mode 100644 index dfefc658..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/PluginResult.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/ResumeCallback.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/ResumeCallback.class Binary files differdeleted file mode 100644 index fc6a4d13..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/ResumeCallback.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/Whitelist$URLPattern.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/Whitelist$URLPattern.class Binary files differdeleted file mode 100644 index 05973c38..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/Whitelist$URLPattern.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/Whitelist.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/Whitelist.class Binary files differdeleted file mode 100644 index 1be2bfca..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/Whitelist.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemCookieManager.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemCookieManager.class Binary files differdeleted file mode 100644 index 4d1199c6..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemCookieManager.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemExposedJsApi.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemExposedJsApi.class Binary files differdeleted file mode 100644 index 8511795f..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemExposedJsApi.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemWebChromeClient$1.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemWebChromeClient$1.class Binary files differdeleted file mode 100644 index 9b3e91ee..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemWebChromeClient$1.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemWebChromeClient$2.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemWebChromeClient$2.class Binary files differdeleted file mode 100644 index 2d0ac1a4..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemWebChromeClient$2.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemWebChromeClient$3.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemWebChromeClient$3.class Binary files differdeleted file mode 100644 index 5c6f1a01..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemWebChromeClient$3.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemWebChromeClient$4.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemWebChromeClient$4.class Binary files differdeleted file mode 100644 index d7817b09..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemWebChromeClient$4.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemWebChromeClient$5.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemWebChromeClient$5.class Binary files differdeleted file mode 100644 index 797cdd71..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemWebChromeClient$5.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemWebChromeClient.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemWebChromeClient.class Binary files differdeleted file mode 100644 index f4959cc7..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemWebChromeClient.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemWebView.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemWebView.class Binary files differdeleted file mode 100644 index 9dfe6ede..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemWebView.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemWebViewClient.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemWebViewClient.class Binary files differdeleted file mode 100644 index 4ded5789..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemWebViewClient.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemWebViewEngine$1.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemWebViewEngine$1.class Binary files differdeleted file mode 100644 index 88b63e1e..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemWebViewEngine$1.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemWebViewEngine$2.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemWebViewEngine$2.class Binary files differdeleted file mode 100644 index 2502947c..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemWebViewEngine$2.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemWebViewEngine.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemWebViewEngine.class Binary files differdeleted file mode 100644 index 8ea85524..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemWebViewEngine.class +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental-safeguard/debug/tag.txt b/StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental-safeguard/debug/tag.txt deleted file mode 100644 index c01a13dc..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental-safeguard/debug/tag.txt +++ /dev/null @@ -1 +0,0 @@ -incremental task execution
\ No newline at end of file diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental-safeguard/release/tag.txt b/StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental-safeguard/release/tag.txt deleted file mode 100644 index c01a13dc..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental-safeguard/release/tag.txt +++ /dev/null @@ -1 +0,0 @@ -incremental task execution
\ No newline at end of file diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental/compileDebugAidl/dependency.store b/StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental/compileDebugAidl/dependency.store Binary files differdeleted file mode 100644 index 8b8400dc..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental/compileDebugAidl/dependency.store +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental/compileDebugAndroidTestAidl/dependency.store b/StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental/compileDebugAndroidTestAidl/dependency.store Binary files differdeleted file mode 100644 index 8b8400dc..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental/compileDebugAndroidTestAidl/dependency.store +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental/compileReleaseAidl/dependency.store b/StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental/compileReleaseAidl/dependency.store Binary files differdeleted file mode 100644 index 8b8400dc..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental/compileReleaseAidl/dependency.store +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental/mergeDebugAndroidTestResources/compile-file-map.properties b/StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental/mergeDebugAndroidTestResources/compile-file-map.properties deleted file mode 100644 index bac4bafe..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental/mergeDebugAndroidTestResources/compile-file-map.properties +++ /dev/null @@ -1 +0,0 @@ -#Thu Mar 02 23:48:55 CET 2017 diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental/mergeDebugAndroidTestResources/merger.xml b/StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental/mergeDebugAndroidTestResources/merger.xml deleted file mode 100644 index 319e8e1e..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental/mergeDebugAndroidTestResources/merger.xml +++ /dev/null @@ -1,2 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<merger version="3"><dataSet config="debug$Generated" generated="true"><source path="/Users/user/Sites/stone-island/StoneIsland/platforms/android/CordovaLib/build/intermediates/bundles/debug/res"/></dataSet><dataSet config="main$Generated" generated="true"><source path="/Users/user/Sites/stone-island/StoneIsland/platforms/android/CordovaLib/src/androidTest/res"/><source path="/Users/user/Sites/stone-island/StoneIsland/platforms/android/CordovaLib/build/generated/res/rs/androidTest/debug"/><source path="/Users/user/Sites/stone-island/StoneIsland/platforms/android/CordovaLib/build/generated/res/resValues/androidTest/debug"/></dataSet><dataSet config="debug" from-dependency="true" generated-set="debug$Generated"><source path="/Users/user/Sites/stone-island/StoneIsland/platforms/android/CordovaLib/build/intermediates/bundles/debug/res"/></dataSet><dataSet config="main" generated-set="main$Generated"><source path="/Users/user/Sites/stone-island/StoneIsland/platforms/android/CordovaLib/src/androidTest/res"/><source path="/Users/user/Sites/stone-island/StoneIsland/platforms/android/CordovaLib/build/generated/res/rs/androidTest/debug"/><source path="/Users/user/Sites/stone-island/StoneIsland/platforms/android/CordovaLib/build/generated/res/resValues/androidTest/debug"/></dataSet><mergedItems/></merger>
\ No newline at end of file diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental/mergeDebugAssets/merger.xml b/StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental/mergeDebugAssets/merger.xml deleted file mode 100644 index b925a276..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental/mergeDebugAssets/merger.xml +++ /dev/null @@ -1,2 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<merger version="3"><dataSet config="main"><source path="/Users/user/Sites/stone-island/StoneIsland/platforms/android/CordovaLib/assets"/><source path="/Users/user/Sites/stone-island/StoneIsland/platforms/android/CordovaLib/build/generated/assets/shaders/debug"/></dataSet><dataSet config="debug"><source path="/Users/user/Sites/stone-island/StoneIsland/platforms/android/CordovaLib/src/debug/assets"/></dataSet></merger>
\ No newline at end of file diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental/mergeDebugJniLibFolders/merger.xml b/StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental/mergeDebugJniLibFolders/merger.xml deleted file mode 100644 index 56e891d1..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental/mergeDebugJniLibFolders/merger.xml +++ /dev/null @@ -1,2 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<merger version="3"><dataSet config="main"><source path="/Users/user/Sites/stone-island/StoneIsland/platforms/android/CordovaLib/src/main/jniLibs"/></dataSet><dataSet config="debug"><source path="/Users/user/Sites/stone-island/StoneIsland/platforms/android/CordovaLib/src/debug/jniLibs"/></dataSet></merger>
\ No newline at end of file diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental/mergeDebugShaders/merger.xml b/StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental/mergeDebugShaders/merger.xml deleted file mode 100644 index b3dfb877..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental/mergeDebugShaders/merger.xml +++ /dev/null @@ -1,2 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<merger version="3"><dataSet config="main"><source path="/Users/user/Sites/stone-island/StoneIsland/platforms/android/CordovaLib/src/main/shaders"/></dataSet><dataSet config="debug"><source path="/Users/user/Sites/stone-island/StoneIsland/platforms/android/CordovaLib/src/debug/shaders"/></dataSet></merger>
\ No newline at end of file diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental/mergeReleaseAssets/merger.xml b/StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental/mergeReleaseAssets/merger.xml deleted file mode 100644 index 931d5465..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental/mergeReleaseAssets/merger.xml +++ /dev/null @@ -1,2 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<merger version="3"><dataSet config="main"><source path="/Users/user/Sites/stone-island/StoneIsland/platforms/android/CordovaLib/assets"/><source path="/Users/user/Sites/stone-island/StoneIsland/platforms/android/CordovaLib/build/generated/assets/shaders/release"/></dataSet><dataSet config="release"><source path="/Users/user/Sites/stone-island/StoneIsland/platforms/android/CordovaLib/src/release/assets"/></dataSet></merger>
\ No newline at end of file diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental/mergeReleaseJniLibFolders/merger.xml b/StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental/mergeReleaseJniLibFolders/merger.xml deleted file mode 100644 index 241302c2..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental/mergeReleaseJniLibFolders/merger.xml +++ /dev/null @@ -1,2 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<merger version="3"><dataSet config="main"><source path="/Users/user/Sites/stone-island/StoneIsland/platforms/android/CordovaLib/src/main/jniLibs"/></dataSet><dataSet config="release"><source path="/Users/user/Sites/stone-island/StoneIsland/platforms/android/CordovaLib/src/release/jniLibs"/></dataSet></merger>
\ No newline at end of file diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental/mergeReleaseShaders/merger.xml b/StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental/mergeReleaseShaders/merger.xml deleted file mode 100644 index 7a2c8288..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental/mergeReleaseShaders/merger.xml +++ /dev/null @@ -1,2 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<merger version="3"><dataSet config="main"><source path="/Users/user/Sites/stone-island/StoneIsland/platforms/android/CordovaLib/src/main/shaders"/></dataSet><dataSet config="release"><source path="/Users/user/Sites/stone-island/StoneIsland/platforms/android/CordovaLib/src/release/shaders"/></dataSet></merger>
\ No newline at end of file diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental/packageDebugResources/compile-file-map.properties b/StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental/packageDebugResources/compile-file-map.properties deleted file mode 100644 index af099dc5..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental/packageDebugResources/compile-file-map.properties +++ /dev/null @@ -1 +0,0 @@ -#Thu Mar 02 23:48:50 CET 2017 diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental/packageDebugResources/merger.xml b/StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental/packageDebugResources/merger.xml deleted file mode 100644 index a1d3d35e..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental/packageDebugResources/merger.xml +++ /dev/null @@ -1,2 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<merger version="3"><dataSet config="main$Generated" generated="true"><source path="/Users/user/Sites/stone-island/StoneIsland/platforms/android/CordovaLib/res"/><source path="/Users/user/Sites/stone-island/StoneIsland/platforms/android/CordovaLib/build/generated/res/rs/debug"/><source path="/Users/user/Sites/stone-island/StoneIsland/platforms/android/CordovaLib/build/generated/res/resValues/debug"/></dataSet><dataSet config="debug$Generated" generated="true"><source path="/Users/user/Sites/stone-island/StoneIsland/platforms/android/CordovaLib/src/debug/res"/></dataSet><dataSet config="main" generated-set="main$Generated"><source path="/Users/user/Sites/stone-island/StoneIsland/platforms/android/CordovaLib/res"/><source path="/Users/user/Sites/stone-island/StoneIsland/platforms/android/CordovaLib/build/generated/res/rs/debug"/><source path="/Users/user/Sites/stone-island/StoneIsland/platforms/android/CordovaLib/build/generated/res/resValues/debug"/></dataSet><dataSet config="debug" generated-set="debug$Generated"><source path="/Users/user/Sites/stone-island/StoneIsland/platforms/android/CordovaLib/src/debug/res"/></dataSet><mergedItems/></merger>
\ No newline at end of file diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental/packageReleaseResources/compile-file-map.properties b/StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental/packageReleaseResources/compile-file-map.properties deleted file mode 100644 index bac4bafe..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental/packageReleaseResources/compile-file-map.properties +++ /dev/null @@ -1 +0,0 @@ -#Thu Mar 02 23:48:55 CET 2017 diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental/packageReleaseResources/merger.xml b/StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental/packageReleaseResources/merger.xml deleted file mode 100644 index 116d54b4..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental/packageReleaseResources/merger.xml +++ /dev/null @@ -1,2 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<merger version="3"><dataSet config="main$Generated" generated="true"><source path="/Users/user/Sites/stone-island/StoneIsland/platforms/android/CordovaLib/res"/><source path="/Users/user/Sites/stone-island/StoneIsland/platforms/android/CordovaLib/build/generated/res/rs/release"/><source path="/Users/user/Sites/stone-island/StoneIsland/platforms/android/CordovaLib/build/generated/res/resValues/release"/></dataSet><dataSet config="release$Generated" generated="true"><source path="/Users/user/Sites/stone-island/StoneIsland/platforms/android/CordovaLib/src/release/res"/></dataSet><dataSet config="main" generated-set="main$Generated"><source path="/Users/user/Sites/stone-island/StoneIsland/platforms/android/CordovaLib/res"/><source path="/Users/user/Sites/stone-island/StoneIsland/platforms/android/CordovaLib/build/generated/res/rs/release"/><source path="/Users/user/Sites/stone-island/StoneIsland/platforms/android/CordovaLib/build/generated/res/resValues/release"/></dataSet><dataSet config="release" generated-set="release$Generated"><source path="/Users/user/Sites/stone-island/StoneIsland/platforms/android/CordovaLib/src/release/res"/></dataSet><mergedItems/></merger>
\ No newline at end of file diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/manifest/androidTest/debug/AndroidManifest.xml b/StoneIsland/platforms/android/CordovaLib/build/intermediates/manifest/androidTest/debug/AndroidManifest.xml deleted file mode 100644 index 47d41c84..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/manifest/androidTest/debug/AndroidManifest.xml +++ /dev/null @@ -1,20 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<manifest xmlns:android="http://schemas.android.com/apk/res/android" - package="org.apache.cordova.test" > - - <uses-sdk - android:minSdkVersion="14" - android:targetSdkVersion="14" /> - - <instrumentation - android:name="android.test.InstrumentationTestRunner" - android:functionalTest="false" - android:handleProfiling="false" - android:label="Tests for org.apache.cordova.test" - android:targetPackage="org.apache.cordova.test" /> - - <application> - <uses-library android:name="android.test.runner" /> - </application> - -</manifest>
\ No newline at end of file diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/manifests/aapt/debug/AndroidManifest.xml b/StoneIsland/platforms/android/CordovaLib/build/intermediates/manifests/aapt/debug/AndroidManifest.xml deleted file mode 100644 index 90863ed8..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/manifests/aapt/debug/AndroidManifest.xml +++ /dev/null @@ -1,27 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- - Licensed to the Apache Software Foundation (ASF) under one - or more contributor license agreements. See the NOTICE file - distributed with this work for additional information - regarding copyright ownership. The ASF licenses this file - to you under the Apache License, Version 2.0 (the - "License"); you may not use this file except in compliance - with the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, - software distributed under the License is distributed on an - "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - KIND, either express or implied. See the License for the - specific language governing permissions and limitations - under the License. ---> -<manifest xmlns:android="http://schemas.android.com/apk/res/android" - package="org.apache.cordova" - android:versionCode="1" - android:versionName="1.0" > - - <uses-sdk android:minSdkVersion="14" /> - -</manifest>
\ No newline at end of file diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/manifests/aapt/release/AndroidManifest.xml b/StoneIsland/platforms/android/CordovaLib/build/intermediates/manifests/aapt/release/AndroidManifest.xml deleted file mode 100644 index 90863ed8..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/manifests/aapt/release/AndroidManifest.xml +++ /dev/null @@ -1,27 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- - Licensed to the Apache Software Foundation (ASF) under one - or more contributor license agreements. See the NOTICE file - distributed with this work for additional information - regarding copyright ownership. The ASF licenses this file - to you under the Apache License, Version 2.0 (the - "License"); you may not use this file except in compliance - with the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, - software distributed under the License is distributed on an - "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - KIND, either express or implied. See the License for the - specific language governing permissions and limitations - under the License. ---> -<manifest xmlns:android="http://schemas.android.com/apk/res/android" - package="org.apache.cordova" - android:versionCode="1" - android:versionName="1.0" > - - <uses-sdk android:minSdkVersion="14" /> - -</manifest>
\ No newline at end of file diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/res/resources-debug-androidTest.ap_ b/StoneIsland/platforms/android/CordovaLib/build/intermediates/res/resources-debug-androidTest.ap_ Binary files differdeleted file mode 100644 index 16e06416..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/res/resources-debug-androidTest.ap_ +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/outputs/aar/CordovaLib-debug.aar b/StoneIsland/platforms/android/CordovaLib/build/outputs/aar/CordovaLib-debug.aar Binary files differdeleted file mode 100644 index b5dc0c93..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/outputs/aar/CordovaLib-debug.aar +++ /dev/null diff --git a/StoneIsland/platforms/android/CordovaLib/build/outputs/aar/CordovaLib-release.aar b/StoneIsland/platforms/android/CordovaLib/build/outputs/aar/CordovaLib-release.aar Binary files differdeleted file mode 100644 index 095a7996..00000000 --- a/StoneIsland/platforms/android/CordovaLib/build/outputs/aar/CordovaLib-release.aar +++ /dev/null diff --git a/StoneIsland/platforms/android/android.json b/StoneIsland/platforms/android/android.json index e93b27be..d30b7891 100755 --- a/StoneIsland/platforms/android/android.json +++ b/StoneIsland/platforms/android/android.json @@ -51,6 +51,10 @@ { "xml": "<feature name=\"PushNotification\"><param name=\"android-package\" value=\"com.adobe.phonegap.push.PushPlugin\" /></feature>", "count": 1 + }, + { + "xml": "<feature name=\"UniversalAnalytics\"><param name=\"android-package\" value=\"com.danielcwilson.plugins.analytics.UniversalAnalyticsPlugin\" /></feature>", + "count": 1 } ] } @@ -81,6 +85,22 @@ { "xml": "<service android:exported=\"false\" android:name=\"com.adobe.phonegap.push.RegistrationIntentService\" />", "count": 1 + }, + { + "xml": "<receiver android:enabled=\"true\" android:name=\"com.google.android.gms.analytics.AnalyticsReceiver\"><intent-filter><action android:name=\"com.google.android.gms.analytics.ANALYTICS_DISPATCH\" /></intent-filter></receiver>", + "count": 1 + }, + { + "xml": "<service android:enabled=\"true\" android:exported=\"false\" android:name=\"com.google.android.gms.analytics.AnalyticsService\" />", + "count": 1 + }, + { + "xml": "<receiver android:enabled=\"true\" android:exported=\"true\" android:name=\"com.google.android.gms.analytics.CampaignTrackingReceiver\"><intent-filter><action android:name=\"com.android.vending.INSTALL_REFERRER\" /></intent-filter></receiver>", + "count": 1 + }, + { + "xml": "<service android:enabled=\"true\" android:exported=\"false\" android:name=\"com.google.android.gms.analytics.CampaignTrackingService\" />", + "count": 1 } ], "/manifest": [ @@ -129,7 +149,7 @@ }, { "xml": "<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\" />", - "count": 1 + "count": 2 }, { "xml": "<uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\" />", @@ -142,6 +162,10 @@ { "xml": "<uses-feature android:name=\"android.hardware.location.gps\" />", "count": 1 + }, + { + "xml": "<uses-permission android:name=\"android.permission.INTERNET\" />", + "count": 1 } ], "/manifest/application/activity": [ @@ -217,6 +241,9 @@ "phonegap-plugin-push": { "SENDER_ID": "XXXXXXX", "PACKAGE_NAME": "us.okfoc.stoneisland" + }, + "cordova-plugin-google-analytics": { + "PACKAGE_NAME": "us.okfoc.stoneisland" } }, "dependent_plugins": {}, @@ -325,6 +352,15 @@ "clobbers": [ "PushNotification" ] + }, + { + "id": "cordova-plugin-google-analytics.UniversalAnalytics", + "file": "plugins/cordova-plugin-google-analytics/www/analytics.js", + "pluginId": "cordova-plugin-google-analytics", + "clobbers": [ + "analytics", + "ga" + ] } ], "plugin_metadata": { @@ -340,6 +376,7 @@ "cordova-plugin-compat": "1.1.0", "cordova-plugin-geolocation": "2.4.0", "ionic-plugin-keyboard": "2.2.1", - "phonegap-plugin-push": "1.9.2" + "phonegap-plugin-push": "1.9.2", + "cordova-plugin-google-analytics": "1.8.3" } }
\ No newline at end of file diff --git a/StoneIsland/platforms/android/assets/www/cordova_plugins.js b/StoneIsland/platforms/android/assets/www/cordova_plugins.js index 3db0cfd0..564d770b 100755 --- a/StoneIsland/platforms/android/assets/www/cordova_plugins.js +++ b/StoneIsland/platforms/android/assets/www/cordova_plugins.js @@ -104,6 +104,15 @@ module.exports = [ "clobbers": [ "PushNotification" ] + }, + { + "id": "cordova-plugin-google-analytics.UniversalAnalytics", + "file": "plugins/cordova-plugin-google-analytics/www/analytics.js", + "pluginId": "cordova-plugin-google-analytics", + "clobbers": [ + "analytics", + "ga" + ] } ]; module.exports.metadata = @@ -121,7 +130,8 @@ module.exports.metadata = "cordova-plugin-compat": "1.1.0", "cordova-plugin-geolocation": "2.4.0", "ionic-plugin-keyboard": "2.2.1", - "phonegap-plugin-push": "1.9.2" + "phonegap-plugin-push": "1.9.2", + "cordova-plugin-google-analytics": "1.8.3" }; // BOTTOM OF METADATA });
\ No newline at end of file diff --git a/StoneIsland/platforms/android/assets/www/plugins/cordova-plugin-google-analytics/www/analytics.js b/StoneIsland/platforms/android/assets/www/plugins/cordova-plugin-google-analytics/www/analytics.js new file mode 100644 index 00000000..b46b19ea --- /dev/null +++ b/StoneIsland/platforms/android/assets/www/plugins/cordova-plugin-google-analytics/www/analytics.js @@ -0,0 +1,130 @@ +cordova.define("cordova-plugin-google-analytics.UniversalAnalytics", function(require, exports, module) { +function UniversalAnalyticsPlugin() {} + +UniversalAnalyticsPlugin.prototype.startTrackerWithId = function(id, dispatchPeriod, success, error) { + if (typeof dispatchPeriod === 'undefined' || dispatchPeriod === null) { + dispatchPeriod = 30; + } else if (typeof dispatchPeriod === 'function' && typeof error === 'undefined') { + // Called without dispatchPeriod but with a callback. + // Looks like the original API was used so shift parameters over to remain compatible. + error = success; + success = dispatchPeriod; + dispatchPeriod = 30; + } + cordova.exec(success, error, 'UniversalAnalytics', 'startTrackerWithId', [id, dispatchPeriod]); +}; + +UniversalAnalyticsPlugin.prototype.setAllowIDFACollection = function(enable, success, error) { + cordova.exec(success, error, 'UniversalAnalytics', 'setAllowIDFACollection', [enable]); +}; + +UniversalAnalyticsPlugin.prototype.setUserId = function(id, success, error) { + cordova.exec(success, error, 'UniversalAnalytics', 'setUserId', [id]); +}; + +UniversalAnalyticsPlugin.prototype.setAnonymizeIp = function(anonymize, success, error) { + cordova.exec(success, error, 'UniversalAnalytics', 'setAnonymizeIp', [anonymize]); +}; + +UniversalAnalyticsPlugin.prototype.setOptOut = function(optout, success, error) { + cordova.exec(success, error, 'UniversalAnalytics', 'setOptOut', [optout]); +}; + +UniversalAnalyticsPlugin.prototype.setAppVersion = function(version, success, error) { + cordova.exec(success, error, 'UniversalAnalytics', 'setAppVersion', [version]); +}; + +UniversalAnalyticsPlugin.prototype.getVar = function(variable, success, error) { + cordova.exec(success, error, 'UniversalAnalytics', 'getVar', [variable]); +}; + +UniversalAnalyticsPlugin.prototype.setVar = function(variable, value, success, error) { + cordova.exec(success, error, 'UniversalAnalytics', 'setVar', [variable, value]); +}; + +UniversalAnalyticsPlugin.prototype.dispatch = function(success, error) { + cordova.exec(success, error, 'UniversalAnalytics', 'dispatch', []); +}; + +/* enables verbose logging */ +UniversalAnalyticsPlugin.prototype.debugMode = function(success, error) { + cordova.exec(success, error, 'UniversalAnalytics', 'debugMode', []); +}; + +UniversalAnalyticsPlugin.prototype.trackMetric = function(key, value, success, error) { + cordova.exec(success, error, 'UniversalAnalytics', 'trackMetric', [key, value]); +}; + +UniversalAnalyticsPlugin.prototype.trackView = function(screen, campaignUrl, newSession, success, error) { + if (typeof campaignUrl === 'undefined' || campaignUrl === null) { + campaignUrl = ''; + } + + if (typeof newSession === 'undefined' || newSession === null) { + newSession = false; + } + + cordova.exec(success, error, 'UniversalAnalytics', 'trackView', [screen, campaignUrl, newSession]); +}; + +UniversalAnalyticsPlugin.prototype.addCustomDimension = function(key, value, success, error) { + if (typeof key !== "number") { + throw Error("key must be a valid integer not '" + typeof key + "'"); + } + cordova.exec(success, error, 'UniversalAnalytics', 'addCustomDimension', [key, value]); +}; + +UniversalAnalyticsPlugin.prototype.trackEvent = function(category, action, label, value, newSession, success, error) { + if (typeof label === 'undefined' || label === null) { + label = ''; + } + if (typeof value === 'undefined' || value === null) { + value = 0; + } + + if (typeof newSession === 'undefined' || newSession === null) { + newSession = false; + } + + cordova.exec(success, error, 'UniversalAnalytics', 'trackEvent', [category, action, label, value, newSession]); +}; + +/** + * https://developers.google.com/analytics/devguides/collection/android/v3/exceptions + */ +UniversalAnalyticsPlugin.prototype.trackException = function(description, fatal, success, error) { + cordova.exec(success, error, 'UniversalAnalytics', 'trackException', [description, fatal]); +}; + +UniversalAnalyticsPlugin.prototype.trackTiming = function(category, intervalInMilliseconds, name, label, success, error) { + if (typeof intervalInMilliseconds === 'undefined' || intervalInMilliseconds === null) { + intervalInMilliseconds = 0; + } + if (typeof name === 'undefined' || name === null) { + name = ''; + } + if (typeof label === 'undefined' || label === null) { + label = ''; + } + + cordova.exec(success, error, 'UniversalAnalytics', 'trackTiming', [category, intervalInMilliseconds, name, label]); +}; + +/* Google Analytics e-Commerce Tracking */ +/* https://developers.google.com/analytics/devguides/collection/analyticsjs/ecommerce */ +UniversalAnalyticsPlugin.prototype.addTransaction = function(transactionId, affiliation, revenue, tax, shipping, currencyCode, success, error) { + cordova.exec(success, error, 'UniversalAnalytics', 'addTransaction', [transactionId, affiliation, revenue, tax, shipping, currencyCode]); +}; + +UniversalAnalyticsPlugin.prototype.addTransactionItem = function(transactionId, name ,sku, category, price, quantity, currencyCode, success, error) { + cordova.exec(success, error, 'UniversalAnalytics', 'addTransactionItem', [transactionId, name ,sku, category, price, quantity, currencyCode]); +}; + +/* automatic uncaught exception tracking */ +UniversalAnalyticsPlugin.prototype.enableUncaughtExceptionReporting = function (enable, success, error) { + cordova.exec(success, error, 'UniversalAnalytics', 'enableUncaughtExceptionReporting', [enable]); +}; + +module.exports = new UniversalAnalyticsPlugin(); + +}); diff --git a/StoneIsland/platforms/android/build.gradle b/StoneIsland/platforms/android/build.gradle index df341800..a6e144c5 100644 --- a/StoneIsland/platforms/android/build.gradle +++ b/StoneIsland/platforms/android/build.gradle @@ -255,6 +255,7 @@ dependencies { compile "com.android.support:support-v13:23+" compile "com.google.android.gms:play-services-gcm:9.8+" compile "me.leolin:ShortcutBadger:1.1.11@aar" + compile "com.google.android.gms:play-services-analytics:+" // SUB-PROJECT DEPENDENCIES END } diff --git a/StoneIsland/platforms/android/platform_www/cordova_plugins.js b/StoneIsland/platforms/android/platform_www/cordova_plugins.js index 3db0cfd0..564d770b 100755 --- a/StoneIsland/platforms/android/platform_www/cordova_plugins.js +++ b/StoneIsland/platforms/android/platform_www/cordova_plugins.js @@ -104,6 +104,15 @@ module.exports = [ "clobbers": [ "PushNotification" ] + }, + { + "id": "cordova-plugin-google-analytics.UniversalAnalytics", + "file": "plugins/cordova-plugin-google-analytics/www/analytics.js", + "pluginId": "cordova-plugin-google-analytics", + "clobbers": [ + "analytics", + "ga" + ] } ]; module.exports.metadata = @@ -121,7 +130,8 @@ module.exports.metadata = "cordova-plugin-compat": "1.1.0", "cordova-plugin-geolocation": "2.4.0", "ionic-plugin-keyboard": "2.2.1", - "phonegap-plugin-push": "1.9.2" + "phonegap-plugin-push": "1.9.2", + "cordova-plugin-google-analytics": "1.8.3" }; // BOTTOM OF METADATA });
\ No newline at end of file diff --git a/StoneIsland/platforms/android/platform_www/plugins/cordova-plugin-google-analytics/www/analytics.js b/StoneIsland/platforms/android/platform_www/plugins/cordova-plugin-google-analytics/www/analytics.js new file mode 100644 index 00000000..b46b19ea --- /dev/null +++ b/StoneIsland/platforms/android/platform_www/plugins/cordova-plugin-google-analytics/www/analytics.js @@ -0,0 +1,130 @@ +cordova.define("cordova-plugin-google-analytics.UniversalAnalytics", function(require, exports, module) { +function UniversalAnalyticsPlugin() {} + +UniversalAnalyticsPlugin.prototype.startTrackerWithId = function(id, dispatchPeriod, success, error) { + if (typeof dispatchPeriod === 'undefined' || dispatchPeriod === null) { + dispatchPeriod = 30; + } else if (typeof dispatchPeriod === 'function' && typeof error === 'undefined') { + // Called without dispatchPeriod but with a callback. + // Looks like the original API was used so shift parameters over to remain compatible. + error = success; + success = dispatchPeriod; + dispatchPeriod = 30; + } + cordova.exec(success, error, 'UniversalAnalytics', 'startTrackerWithId', [id, dispatchPeriod]); +}; + +UniversalAnalyticsPlugin.prototype.setAllowIDFACollection = function(enable, success, error) { + cordova.exec(success, error, 'UniversalAnalytics', 'setAllowIDFACollection', [enable]); +}; + +UniversalAnalyticsPlugin.prototype.setUserId = function(id, success, error) { + cordova.exec(success, error, 'UniversalAnalytics', 'setUserId', [id]); +}; + +UniversalAnalyticsPlugin.prototype.setAnonymizeIp = function(anonymize, success, error) { + cordova.exec(success, error, 'UniversalAnalytics', 'setAnonymizeIp', [anonymize]); +}; + +UniversalAnalyticsPlugin.prototype.setOptOut = function(optout, success, error) { + cordova.exec(success, error, 'UniversalAnalytics', 'setOptOut', [optout]); +}; + +UniversalAnalyticsPlugin.prototype.setAppVersion = function(version, success, error) { + cordova.exec(success, error, 'UniversalAnalytics', 'setAppVersion', [version]); +}; + +UniversalAnalyticsPlugin.prototype.getVar = function(variable, success, error) { + cordova.exec(success, error, 'UniversalAnalytics', 'getVar', [variable]); +}; + +UniversalAnalyticsPlugin.prototype.setVar = function(variable, value, success, error) { + cordova.exec(success, error, 'UniversalAnalytics', 'setVar', [variable, value]); +}; + +UniversalAnalyticsPlugin.prototype.dispatch = function(success, error) { + cordova.exec(success, error, 'UniversalAnalytics', 'dispatch', []); +}; + +/* enables verbose logging */ +UniversalAnalyticsPlugin.prototype.debugMode = function(success, error) { + cordova.exec(success, error, 'UniversalAnalytics', 'debugMode', []); +}; + +UniversalAnalyticsPlugin.prototype.trackMetric = function(key, value, success, error) { + cordova.exec(success, error, 'UniversalAnalytics', 'trackMetric', [key, value]); +}; + +UniversalAnalyticsPlugin.prototype.trackView = function(screen, campaignUrl, newSession, success, error) { + if (typeof campaignUrl === 'undefined' || campaignUrl === null) { + campaignUrl = ''; + } + + if (typeof newSession === 'undefined' || newSession === null) { + newSession = false; + } + + cordova.exec(success, error, 'UniversalAnalytics', 'trackView', [screen, campaignUrl, newSession]); +}; + +UniversalAnalyticsPlugin.prototype.addCustomDimension = function(key, value, success, error) { + if (typeof key !== "number") { + throw Error("key must be a valid integer not '" + typeof key + "'"); + } + cordova.exec(success, error, 'UniversalAnalytics', 'addCustomDimension', [key, value]); +}; + +UniversalAnalyticsPlugin.prototype.trackEvent = function(category, action, label, value, newSession, success, error) { + if (typeof label === 'undefined' || label === null) { + label = ''; + } + if (typeof value === 'undefined' || value === null) { + value = 0; + } + + if (typeof newSession === 'undefined' || newSession === null) { + newSession = false; + } + + cordova.exec(success, error, 'UniversalAnalytics', 'trackEvent', [category, action, label, value, newSession]); +}; + +/** + * https://developers.google.com/analytics/devguides/collection/android/v3/exceptions + */ +UniversalAnalyticsPlugin.prototype.trackException = function(description, fatal, success, error) { + cordova.exec(success, error, 'UniversalAnalytics', 'trackException', [description, fatal]); +}; + +UniversalAnalyticsPlugin.prototype.trackTiming = function(category, intervalInMilliseconds, name, label, success, error) { + if (typeof intervalInMilliseconds === 'undefined' || intervalInMilliseconds === null) { + intervalInMilliseconds = 0; + } + if (typeof name === 'undefined' || name === null) { + name = ''; + } + if (typeof label === 'undefined' || label === null) { + label = ''; + } + + cordova.exec(success, error, 'UniversalAnalytics', 'trackTiming', [category, intervalInMilliseconds, name, label]); +}; + +/* Google Analytics e-Commerce Tracking */ +/* https://developers.google.com/analytics/devguides/collection/analyticsjs/ecommerce */ +UniversalAnalyticsPlugin.prototype.addTransaction = function(transactionId, affiliation, revenue, tax, shipping, currencyCode, success, error) { + cordova.exec(success, error, 'UniversalAnalytics', 'addTransaction', [transactionId, affiliation, revenue, tax, shipping, currencyCode]); +}; + +UniversalAnalyticsPlugin.prototype.addTransactionItem = function(transactionId, name ,sku, category, price, quantity, currencyCode, success, error) { + cordova.exec(success, error, 'UniversalAnalytics', 'addTransactionItem', [transactionId, name ,sku, category, price, quantity, currencyCode]); +}; + +/* automatic uncaught exception tracking */ +UniversalAnalyticsPlugin.prototype.enableUncaughtExceptionReporting = function (enable, success, error) { + cordova.exec(success, error, 'UniversalAnalytics', 'enableUncaughtExceptionReporting', [enable]); +}; + +module.exports = new UniversalAnalyticsPlugin(); + +}); diff --git a/StoneIsland/platforms/android/project.properties b/StoneIsland/platforms/android/project.properties index 6936daa2..edb81941 100755 --- a/StoneIsland/platforms/android/project.properties +++ b/StoneIsland/platforms/android/project.properties @@ -15,4 +15,5 @@ android.library.reference.1=CordovaLib cordova.gradle.include.1=phonegap-plugin-push/stoneisland-push.gradle cordova.system.library.1=com.android.support:support-v13:23+ cordova.system.library.2=com.google.android.gms:play-services-gcm:9.8+ -cordova.system.library.3=me.leolin:ShortcutBadger:1.1.11@aar
\ No newline at end of file +cordova.system.library.3=me.leolin:ShortcutBadger:1.1.11@aar +cordova.system.library.4=com.google.android.gms:play-services-analytics:+
\ No newline at end of file diff --git a/StoneIsland/platforms/android/res/xml/config.xml b/StoneIsland/platforms/android/res/xml/config.xml index c0998d2c..1bcdbb83 100644 --- a/StoneIsland/platforms/android/res/xml/config.xml +++ b/StoneIsland/platforms/android/res/xml/config.xml @@ -69,4 +69,7 @@ <preference name="AllowInlineMediaPlayback" value="true" /> <preference name="AndroidLaunchMode" value="singleTop" /> <preference name="android-minSdkVersion" value="21" /> + <feature name="UniversalAnalytics"> + <param name="android-package" value="com.danielcwilson.plugins.analytics.UniversalAnalyticsPlugin" /> + </feature> </widget> diff --git a/StoneIsland/platforms/android/src/com/danielcwilson/plugins/analytics/UniversalAnalyticsPlugin.java b/StoneIsland/platforms/android/src/com/danielcwilson/plugins/analytics/UniversalAnalyticsPlugin.java new file mode 100644 index 00000000..23c20023 --- /dev/null +++ b/StoneIsland/platforms/android/src/com/danielcwilson/plugins/analytics/UniversalAnalyticsPlugin.java @@ -0,0 +1,469 @@ +package com.danielcwilson.plugins.analytics; + +import com.google.android.gms.analytics.GoogleAnalytics; +import com.google.android.gms.analytics.Logger.LogLevel; +import com.google.android.gms.analytics.HitBuilders; +import com.google.android.gms.analytics.Tracker; + +import org.apache.cordova.CordovaPlugin; +import org.apache.cordova.CallbackContext; + +import org.json.JSONArray; +import org.json.JSONException; + +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.HashMap; +import java.util.Map.Entry; + +public class UniversalAnalyticsPlugin extends CordovaPlugin { + public static final String START_TRACKER = "startTrackerWithId"; + public static final String TRACK_VIEW = "trackView"; + public static final String TRACK_EVENT = "trackEvent"; + public static final String TRACK_EXCEPTION = "trackException"; + public static final String TRACK_TIMING = "trackTiming"; + public static final String TRACK_METRIC = "trackMetric"; + public static final String ADD_DIMENSION = "addCustomDimension"; + public static final String ADD_TRANSACTION = "addTransaction"; + public static final String ADD_TRANSACTION_ITEM = "addTransactionItem"; + + public static final String SET_ALLOW_IDFA_COLLECTION = "setAllowIDFACollection"; + public static final String SET_USER_ID = "setUserId"; + public static final String SET_ANONYMIZE_IP = "setAnonymizeIp"; + public static final String SET_OPT_OUT = "setOptOut"; + public static final String SET_APP_VERSION = "setAppVersion"; + public static final String GET_VAR = "getVar"; + public static final String SET_VAR = "setVar"; + public static final String DISPATCH = "dispatch"; + public static final String DEBUG_MODE = "debugMode"; + public static final String ENABLE_UNCAUGHT_EXCEPTION_REPORTING = "enableUncaughtExceptionReporting"; + + public Boolean trackerStarted = false; + public Boolean debugModeEnabled = false; + public HashMap<Integer, String> customDimensions = new HashMap<Integer, String>(); + + public Tracker tracker; + + @Override + public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException { + if (START_TRACKER.equals(action)) { + String id = args.getString(0); + int dispatchPeriod = args.length() > 1 ? args.getInt(1) : 30; + this.startTracker(id, dispatchPeriod, callbackContext); + return true; + } else if (TRACK_VIEW.equals(action)) { + int length = args.length(); + String screen = args.getString(0); + this.trackView(screen, length > 1 && !args.isNull(1) ? args.getString(1) : "", length > 2 && !args.isNull(2) ? args.getBoolean(2) : false, callbackContext); + return true; + } else if (TRACK_EVENT.equals(action)) { + int length = args.length(); + if (length > 0) { + this.trackEvent( + args.getString(0), + length > 1 ? args.getString(1) : "", + length > 2 ? args.getString(2) : "", + length > 3 ? args.getLong(3) : 0, + length > 4 ? args.getBoolean(4) : false, + callbackContext); + } + return true; + } else if (TRACK_EXCEPTION.equals(action)) { + String description = args.getString(0); + Boolean fatal = args.getBoolean(1); + this.trackException(description, fatal, callbackContext); + return true; + } else if (TRACK_TIMING.equals(action)) { + int length = args.length(); + if (length > 0) { + this.trackTiming(args.getString(0), length > 1 ? args.getLong(1) : 0, length > 2 ? args.getString(2) : "", length > 3 ? args.getString(3) : "", callbackContext); + } + return true; + } else if (TRACK_METRIC.equals(action)) { + int length = args.length(); + if (length > 0) { + this.trackMetric(args.getInt(0), length > 1 ? args.getString(1) : "", callbackContext); + } + return true; + } else if (ADD_DIMENSION.equals(action)) { + Integer key = args.getInt(0); + String value = args.getString(1); + this.addCustomDimension(key, value, callbackContext); + return true; + } else if (ADD_TRANSACTION.equals(action)) { + int length = args.length(); + if (length > 0) { + this.addTransaction( + args.getString(0), + length > 1 ? args.getString(1) : "", + length > 2 ? args.getDouble(2) : 0, + length > 3 ? args.getDouble(3) : 0, + length > 4 ? args.getDouble(4) : 0, + length > 5 ? args.getString(5) : null, + callbackContext); + } + return true; + } else if (ADD_TRANSACTION_ITEM.equals(action)) { + int length = args.length(); + if (length > 0) { + this.addTransactionItem( + args.getString(0), + length > 1 ? args.getString(1) : "", + length > 2 ? args.getString(2) : "", + length > 3 ? args.getString(3) : "", + length > 4 ? args.getDouble(4) : 0, + length > 5 ? args.getLong(5) : 0, + length > 6 ? args.getString(6) : null, + callbackContext); + } + return true; + } else if (SET_ALLOW_IDFA_COLLECTION.equals(action)) { + this.setAllowIDFACollection(args.getBoolean(0), callbackContext); + } else if (SET_USER_ID.equals(action)) { + String userId = args.getString(0); + this.setUserId(userId, callbackContext); + } else if (SET_ANONYMIZE_IP.equals(action)) { + boolean anonymize = args.getBoolean(0); + this.setAnonymizeIp(anonymize, callbackContext); + } else if (SET_OPT_OUT.equals(action)) { + boolean optout = args.getBoolean(0); + this.setOptOut(optout, callbackContext); + } else if (SET_APP_VERSION.equals(action)) { + String version = args.getString(0); + this.setAppVersion(version, callbackContext); + } else if (GET_VAR.equals(action)) { + String variable = args.getString(0); + this.getVar(variable, callbackContext); + } else if (SET_VAR.equals(action)) { + String variable = args.getString(0); + String value = args.getString(1); + this.setVar(variable, value, callbackContext); + return true; + } else if (DISPATCH.equals(action)) { + this.dispatch(callbackContext); + return true; + } else if (DEBUG_MODE.equals(action)) { + this.debugMode(callbackContext); + } else if (ENABLE_UNCAUGHT_EXCEPTION_REPORTING.equals(action)) { + Boolean enable = args.getBoolean(0); + this.enableUncaughtExceptionReporting(enable, callbackContext); + } + return false; + } + + private void startTracker(String id, int dispatchPeriod, CallbackContext callbackContext) { + if (null != id && id.length() > 0) { + tracker = GoogleAnalytics.getInstance(this.cordova.getActivity()).newTracker(id); + callbackContext.success("tracker started"); + trackerStarted = true; + GoogleAnalytics.getInstance(this.cordova.getActivity()).setLocalDispatchPeriod(dispatchPeriod); + } else { + callbackContext.error("tracker id is not valid"); + } + } + + private void addCustomDimension(Integer key, String value, CallbackContext callbackContext) { + if (key <= 0) { + callbackContext.error("Expected positive integer argument for key."); + return; + } + + if (null == value || value.length() == 0) { + callbackContext.error("Expected non-empty string argument for value."); + return; + } + + customDimensions.put(key, value); + callbackContext.success("custom dimension started"); + } + + private <T> void addCustomDimensionsToHitBuilder(T builder) { + //unfortunately the base HitBuilders.HitBuilder class is not public, therefore have to use reflection to use + //the common setCustomDimension (int index, String dimension) method + try { + Method builderMethod = builder.getClass().getMethod("setCustomDimension", Integer.TYPE, String.class); + + for (Entry<Integer, String> entry : customDimensions.entrySet()) { + Integer key = entry.getKey(); + String value = entry.getValue(); + try { + builderMethod.invoke(builder, (key), value); + } catch (IllegalArgumentException e) { + } catch (IllegalAccessException e) { + } catch (InvocationTargetException e) { + } + } + } catch (SecurityException e) { + } catch (NoSuchMethodException e) { + } + } + + private void trackView(String screenname, String campaignUrl, boolean newSession, CallbackContext callbackContext) { + if (! trackerStarted ) { + callbackContext.error("Tracker not started"); + return; + } + + if (null != screenname && screenname.length() > 0) { + tracker.setScreenName(screenname); + + HitBuilders.ScreenViewBuilder hitBuilder = new HitBuilders.ScreenViewBuilder(); + addCustomDimensionsToHitBuilder(hitBuilder); + + if(!campaignUrl.equals("")){ + hitBuilder.setCampaignParamsFromUrl(campaignUrl); + } + + if(!newSession) { + tracker.send(hitBuilder.build()); + } else { + tracker.send(hitBuilder.setNewSession().build()); + } + + callbackContext.success("Track Screen: " + screenname); + } else { + callbackContext.error("Expected one non-empty string argument."); + } + } + + private void trackEvent(String category, String action, String label, long value, boolean newSession, CallbackContext callbackContext) { + if (!trackerStarted) { + callbackContext.error("Tracker not started"); + return; + } + + if (null != category && category.length() > 0) { + HitBuilders.EventBuilder hitBuilder = new HitBuilders.EventBuilder(); + addCustomDimensionsToHitBuilder(hitBuilder); + + if(!newSession){ + tracker.send(hitBuilder + .setCategory(category) + .setAction(action) + .setLabel(label) + .setValue(value) + .build()); + } else { + tracker.send(hitBuilder + .setCategory(category) + .setAction(action) + .setLabel(label) + .setValue(value) + .setNewSession() + .build()); + } + + callbackContext.success("Track Event: " + category); + } else { + callbackContext.error("Expected non-empty string arguments."); + } + } + + private void trackMetric(Integer key, String value, CallbackContext callbackContext) { + if (!trackerStarted) { + callbackContext.error("Tracker not started"); + return; + } + + if (key >= 0) { + HitBuilders.ScreenViewBuilder hitBuilder = new HitBuilders.ScreenViewBuilder(); + tracker.send(hitBuilder + .setCustomMetric(key, Float.parseFloat(value)) + .build() + ); + callbackContext.success("Track Metric: " + key + ", value: " + value); + } else { + callbackContext.error("Expected integer key: " + key + ", and string value: " + value); + } + } + + private void trackException(String description, Boolean fatal, CallbackContext callbackContext) { + if (!trackerStarted) { + callbackContext.error("Tracker not started"); + return; + } + + if (null != description && description.length() > 0) { + HitBuilders.ExceptionBuilder hitBuilder = new HitBuilders.ExceptionBuilder(); + addCustomDimensionsToHitBuilder(hitBuilder); + + tracker.send(hitBuilder + .setDescription(description) + .setFatal(fatal) + .build() + ); + callbackContext.success("Track Exception: " + description); + } else { + callbackContext.error("Expected non-empty string arguments."); + } + } + + private void trackTiming(String category, long intervalInMilliseconds, String name, String label, CallbackContext callbackContext) { + if (!trackerStarted) { + callbackContext.error("Tracker not started"); + return; + } + + if (null != category && category.length() > 0) { + HitBuilders.TimingBuilder hitBuilder = new HitBuilders.TimingBuilder(); + addCustomDimensionsToHitBuilder(hitBuilder); + + tracker.send(hitBuilder + .setCategory(category) + .setValue(intervalInMilliseconds) + .setVariable(name) + .setLabel(label) + .build() + ); + callbackContext.success("Track Timing: " + category); + } else { + callbackContext.error("Expected non-empty string arguments."); + } + } + + private void addTransaction(String id, String affiliation, double revenue, double tax, double shipping, String currencyCode, CallbackContext callbackContext) { + if (!trackerStarted) { + callbackContext.error("Tracker not started"); + return; + } + + if (null != id && id.length() > 0) { + HitBuilders.TransactionBuilder hitBuilder = new HitBuilders.TransactionBuilder(); + addCustomDimensionsToHitBuilder(hitBuilder); + + tracker.send(hitBuilder + .setTransactionId(id) + .setAffiliation(affiliation) + .setRevenue(revenue).setTax(tax) + .setShipping(shipping) + .setCurrencyCode(currencyCode) + .build() + ); //Deprecated + callbackContext.success("Add Transaction: " + id); + } else { + callbackContext.error("Expected non-empty ID."); + } + } + + private void addTransactionItem(String id, String name, String sku, String category, double price, long quantity, String currencyCode, CallbackContext callbackContext) { + if (!trackerStarted) { + callbackContext.error("Tracker not started"); + return; + } + + if (null != id && id.length() > 0) { + HitBuilders.ItemBuilder hitBuilder = new HitBuilders.ItemBuilder(); + addCustomDimensionsToHitBuilder(hitBuilder); + + tracker.send(hitBuilder + .setTransactionId(id) + .setName(name) + .setSku(sku) + .setCategory(category) + .setPrice(price) + .setQuantity(quantity) + .setCurrencyCode(currencyCode) + .build() + ); //Deprecated + callbackContext.success("Add Transaction Item: " + id); + } else { + callbackContext.error("Expected non-empty ID."); + } + } + + private void setAllowIDFACollection(Boolean enable, CallbackContext callbackContext) { + if (!trackerStarted) { + callbackContext.error("Tracker not started"); + return; + } + + tracker.enableAdvertisingIdCollection(enable); + callbackContext.success("Enable Advertising Id Collection: " + enable); + } + + private void setVar(String variable, String value, CallbackContext callbackContext) { + if (!trackerStarted) { + callbackContext.error("Tracker not started"); + return; + } + + tracker.set(variable, value); + callbackContext.success("Set variable " + variable + "to " + value); + } + private void dispatch(CallbackContext callbackContext) { + if (!trackerStarted) { + callbackContext.error("Tracker not started"); + return; + } + + GoogleAnalytics.getInstance(this.cordova.getActivity()).dispatchLocalHits(); + callbackContext.success("dispatch sent"); + } + + private void getVar(String variable, CallbackContext callbackContext) { + if (!trackerStarted) { + callbackContext.error("Tracker not started"); + return; + } + + String result = tracker.get(variable); + callbackContext.success(result); + } + + private void debugMode(CallbackContext callbackContext) { + GoogleAnalytics.getInstance(this.cordova.getActivity()).getLogger().setLogLevel(LogLevel.VERBOSE); + + this.debugModeEnabled = true; + callbackContext.success("debugMode enabled"); + } + + private void setAnonymizeIp(boolean anonymize, CallbackContext callbackContext) { + if (!trackerStarted) { + callbackContext.error("Tracker not started"); + return; + } + + tracker.setAnonymizeIp(anonymize); + callbackContext.success("Set AnonymizeIp " + anonymize); + } + + private void setOptOut(boolean optout, CallbackContext callbackContext) { + if (!trackerStarted) { + callbackContext.error("Tracker not started"); + return; + } + + GoogleAnalytics.getInstance(this.cordova.getActivity()).setAppOptOut(optout); + callbackContext.success("Set Opt-Out " + optout); + } + + private void setUserId(String userId, CallbackContext callbackContext) { + if (!trackerStarted) { + callbackContext.error("Tracker not started"); + return; + } + + tracker.set("&uid", userId); + callbackContext.success("Set user id" + userId); + } + + private void setAppVersion(String version, CallbackContext callbackContext) { + if (!trackerStarted) { + callbackContext.error("Tracker not started"); + return; + } + + tracker.set("&av", version); + callbackContext.success("Set app version: " + version); + } + + private void enableUncaughtExceptionReporting(Boolean enable, CallbackContext callbackContext) { + if (!trackerStarted) { + callbackContext.error("Tracker not started"); + return; + } + + tracker.enableExceptionReporting(enable); + callbackContext.success((enable ? "Enabled" : "Disabled") + " uncaught exception reporting"); + } +} diff --git a/StoneIsland/platforms/ios/Stone Island.xcodeproj/project.pbxproj b/StoneIsland/platforms/ios/Stone Island.xcodeproj/project.pbxproj index e2303cfe..9b8aa41d 100755 --- a/StoneIsland/platforms/ios/Stone Island.xcodeproj/project.pbxproj +++ b/StoneIsland/platforms/ios/Stone Island.xcodeproj/project.pbxproj @@ -5,7 +5,6 @@ }; objectVersion = 46; objects = { - /* Begin PBXBuildFile section */ 0207DA581B56EA530066E2B4 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 0207DA571B56EA530066E2B4 /* Images.xcassets */; }; 099C5D0E05AF43F4B95AAA4A /* CDVNotification.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 2F49F2111FC649498658CF3B /* CDVNotification.bundle */; }; @@ -39,6 +38,13 @@ EF28FE2B49A344FBA3F7306F /* CDVInAppBrowser.m in Sources */ = {isa = PBXBuildFile; fileRef = 729B6141DF9D4C1BB64A7097 /* CDVInAppBrowser.m */; }; F4862C5594894163A3C3AB06 /* CDVConnection.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E7CCBA15DC14F20830BD1B3 /* CDVConnection.m */; }; F990B4C12C3746EAA8C30F8D /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 6465D215A1B148A387730F27 /* libz.tbd */; }; + EE465A3641884122A7088AC5 /* UniversalAnalyticsPlugin.m in Sources */ = {isa = PBXBuildFile; fileRef = FFB5E8C21AD14D10A7088119 /* UniversalAnalyticsPlugin.m */; }; + 600310C41D3B400498A5890B /* libGoogleAnalyticsServices.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 281039EFAD1B4A8C90FDC17F /* libGoogleAnalyticsServices.a */; }; + C4E60C33635D44649CAAF727 /* libAdIdAccess.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 92230324A2954C6AADBA989A /* libAdIdAccess.a */; }; + 7739C5D961784F519029D858 /* CoreData.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BBF0272D99FA4D308445B382 /* CoreData.framework */; }; + D54B6FB071A94BED99CBF7E6 /* AdSupport.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A3D8D77BE5A0496891F24BF9 /* AdSupport.framework */; }; + 6B52986769BB47ED98DF12F6 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 5133B28F80C74DA0A4EF900A /* libz.dylib */; }; + 0245BD3C98FD4F04A11BBCAA /* libsqlite3.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 4A4D6FDE815144E3BC47859B /* libsqlite3.dylib */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -118,6 +124,24 @@ F6093E605D6D49D1918413AA /* CDVDevice.m */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.objc; name = CDVDevice.m; path = "cordova-plugin-device/CDVDevice.m"; sourceTree = "<group>"; }; F840E1F0165FE0F500CFE078 /* config.xml */ = {isa = PBXFileReference; lastKnownFileType = text.xml; name = config.xml; path = "Stone Island/config.xml"; sourceTree = "<group>"; }; FCCC22BF4385472E88382D56 /* MessageUI.framework */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = wrapper.framework; name = MessageUI.framework; path = System/Library/Frameworks/MessageUI.framework; sourceTree = SDKROOT; }; + FFB5E8C21AD14D10A7088119 /* UniversalAnalyticsPlugin.m */ = {isa = PBXFileReference; name = "UniversalAnalyticsPlugin.m"; path = "cordova-plugin-google-analytics/UniversalAnalyticsPlugin.m"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; explicitFileType = undefined; includeInIndex = 0; }; + 281039EFAD1B4A8C90FDC17F /* libGoogleAnalyticsServices.a */ = {isa = PBXFileReference; name = "libGoogleAnalyticsServices.a"; path = "Stone Island/Plugins/cordova-plugin-google-analytics/libGoogleAnalyticsServices.a"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = archive.ar; explicitFileType = undefined; includeInIndex = 0; }; + 92230324A2954C6AADBA989A /* libAdIdAccess.a */ = {isa = PBXFileReference; name = "libAdIdAccess.a"; path = "Stone Island/Plugins/cordova-plugin-google-analytics/libAdIdAccess.a"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = archive.ar; explicitFileType = undefined; includeInIndex = 0; }; + A37B0133EF7A42B6BAF5F317 /* UniversalAnalyticsPlugin.h */ = {isa = PBXFileReference; name = "UniversalAnalyticsPlugin.h"; path = "cordova-plugin-google-analytics/UniversalAnalyticsPlugin.h"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; explicitFileType = undefined; includeInIndex = 0; }; + 36C6224E10CC4C1DB3DEAAF4 /* GAIDictionaryBuilder.h */ = {isa = PBXFileReference; name = "GAIDictionaryBuilder.h"; path = "cordova-plugin-google-analytics/GAIDictionaryBuilder.h"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; explicitFileType = undefined; includeInIndex = 0; }; + 1380CC4A1CFE434BB20950B7 /* GAIFields.h */ = {isa = PBXFileReference; name = "GAIFields.h"; path = "cordova-plugin-google-analytics/GAIFields.h"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; explicitFileType = undefined; includeInIndex = 0; }; + 71D1AD5902B0425F8154F30F /* GAILogger.h */ = {isa = PBXFileReference; name = "GAILogger.h"; path = "cordova-plugin-google-analytics/GAILogger.h"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; explicitFileType = undefined; includeInIndex = 0; }; + 9A8A8193C2794F48888355D3 /* GAITrackedViewController.h */ = {isa = PBXFileReference; name = "GAITrackedViewController.h"; path = "cordova-plugin-google-analytics/GAITrackedViewController.h"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; explicitFileType = undefined; includeInIndex = 0; }; + 7EECC2D2BFEA43FE966814C6 /* GAI.h */ = {isa = PBXFileReference; name = "GAI.h"; path = "cordova-plugin-google-analytics/GAI.h"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; explicitFileType = undefined; includeInIndex = 0; }; + F52665B1E3624AACB50A72B1 /* GAITracker.h */ = {isa = PBXFileReference; name = "GAITracker.h"; path = "cordova-plugin-google-analytics/GAITracker.h"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; explicitFileType = undefined; includeInIndex = 0; }; + 2953CC1328564E13AE3FE7CD /* GAIEcommerceFields.h */ = {isa = PBXFileReference; name = "GAIEcommerceFields.h"; path = "cordova-plugin-google-analytics/GAIEcommerceFields.h"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; explicitFileType = undefined; includeInIndex = 0; }; + CAAD7EE259C942989156C616 /* GAIEcommerceProduct.h */ = {isa = PBXFileReference; name = "GAIEcommerceProduct.h"; path = "cordova-plugin-google-analytics/GAIEcommerceProduct.h"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; explicitFileType = undefined; includeInIndex = 0; }; + 8A49AF7CDE3040039CE14E5A /* GAIEcommerceProductAction.h */ = {isa = PBXFileReference; name = "GAIEcommerceProductAction.h"; path = "cordova-plugin-google-analytics/GAIEcommerceProductAction.h"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; explicitFileType = undefined; includeInIndex = 0; }; + E2AFABA192234A0E9C198427 /* GAIEcommercePromotion.h */ = {isa = PBXFileReference; name = "GAIEcommercePromotion.h"; path = "cordova-plugin-google-analytics/GAIEcommercePromotion.h"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; explicitFileType = undefined; includeInIndex = 0; }; + BBF0272D99FA4D308445B382 /* CoreData.framework */ = {isa = PBXFileReference; name = "CoreData.framework"; path = "System/Library/Frameworks/CoreData.framework"; sourceTree = SDKROOT; fileEncoding = undefined; lastKnownFileType = wrapper.framework; explicitFileType = undefined; includeInIndex = 0; }; + A3D8D77BE5A0496891F24BF9 /* AdSupport.framework */ = {isa = PBXFileReference; name = "AdSupport.framework"; path = "System/Library/Frameworks/AdSupport.framework"; sourceTree = SDKROOT; fileEncoding = undefined; lastKnownFileType = wrapper.framework; explicitFileType = undefined; includeInIndex = 0; }; + 5133B28F80C74DA0A4EF900A /* libz.dylib */ = {isa = PBXFileReference; name = "libz.dylib"; path = "usr/lib/libz.dylib"; sourceTree = SDKROOT; fileEncoding = undefined; lastKnownFileType = compiled.mach-o.dylib; explicitFileType = undefined; includeInIndex = 0; }; + 4A4D6FDE815144E3BC47859B /* libsqlite3.dylib */ = {isa = PBXFileReference; name = "libsqlite3.dylib"; path = "usr/lib/libsqlite3.dylib"; sourceTree = SDKROOT; fileEncoding = undefined; lastKnownFileType = compiled.mach-o.dylib; explicitFileType = undefined; includeInIndex = 0; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -136,6 +160,12 @@ A9267928B9A04BE29B534458 /* AddressBook.framework in Frameworks */, 36186AA3639F426384682A75 /* libsqlite3.tbd in Frameworks */, F990B4C12C3746EAA8C30F8D /* libz.tbd in Frameworks */, + 600310C41D3B400498A5890B /* libGoogleAnalyticsServices.a in Frameworks */, + C4E60C33635D44649CAAF727 /* libAdIdAccess.a in Frameworks */, + 7739C5D961784F519029D858 /* CoreData.framework in Frameworks */, + D54B6FB071A94BED99CBF7E6 /* AdSupport.framework in Frameworks */, + 6B52986769BB47ED98DF12F6 /* libz.dylib in Frameworks */, + 0245BD3C98FD4F04A11BBCAA /* libsqlite3.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -218,6 +248,12 @@ 6940DEA5B3084B54B48BD8F1 /* AddressBook.framework */, 014A3BF81C154724B8D195A5 /* libsqlite3.tbd */, 6465D215A1B148A387730F27 /* libz.tbd */, + 281039EFAD1B4A8C90FDC17F /* libGoogleAnalyticsServices.a */, + 92230324A2954C6AADBA989A /* libAdIdAccess.a */, + BBF0272D99FA4D308445B382 /* CoreData.framework */, + A3D8D77BE5A0496891F24BF9 /* AdSupport.framework */, + 5133B28F80C74DA0A4EF900A /* libz.dylib */, + 4A4D6FDE815144E3BC47859B /* libsqlite3.dylib */, ); name = Frameworks; sourceTree = "<group>"; @@ -271,6 +307,18 @@ B195BD92B31445039168DCCC /* PushPlugin.m */, 40CE234F002F419597A039E4 /* AppDelegate+notification.h */, 9AA8E7740E114B6E967452F8 /* PushPlugin.h */, + FFB5E8C21AD14D10A7088119 /* UniversalAnalyticsPlugin.m */, + A37B0133EF7A42B6BAF5F317 /* UniversalAnalyticsPlugin.h */, + 36C6224E10CC4C1DB3DEAAF4 /* GAIDictionaryBuilder.h */, + 1380CC4A1CFE434BB20950B7 /* GAIFields.h */, + 71D1AD5902B0425F8154F30F /* GAILogger.h */, + 9A8A8193C2794F48888355D3 /* GAITrackedViewController.h */, + 7EECC2D2BFEA43FE966814C6 /* GAI.h */, + F52665B1E3624AACB50A72B1 /* GAITracker.h */, + 2953CC1328564E13AE3FE7CD /* GAIEcommerceFields.h */, + CAAD7EE259C942989156C616 /* GAIEcommerceProduct.h */, + 8A49AF7CDE3040039CE14E5A /* GAIEcommerceProductAction.h */, + E2AFABA192234A0E9C198427 /* GAIEcommercePromotion.h */, ); name = Plugins; path = "Stone Island/Plugins"; @@ -463,6 +511,7 @@ E162E7029FC24C4595D1D82D /* IonicKeyboard.m in Sources */, 35DC9CF8FDC24E6DA829674B /* AppDelegate+notification.m in Sources */, 76C30D264E504728A7F0FD0C /* PushPlugin.m in Sources */, + EE465A3641884122A7088AC5 /* UniversalAnalyticsPlugin.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -505,6 +554,11 @@ LD_RUNPATH_SEARCH_PATHS = "@executable_path/Frameworks"; PRODUCT_NAME = "Stone Island"; TARGETED_DEVICE_FAMILY = "1,2"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "\"$(SRCROOT)/Stone Island/Plugins/cordova-plugin-google-analytics\"", + "\"$(SRCROOT)/Stone Island/Plugins/cordova-plugin-google-analytics\"", + ); }; name = Debug; }; @@ -534,6 +588,11 @@ LD_RUNPATH_SEARCH_PATHS = "@executable_path/Frameworks"; PRODUCT_NAME = "Stone Island"; TARGETED_DEVICE_FAMILY = "1,2"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "\"$(SRCROOT)/Stone Island/Plugins/cordova-plugin-google-analytics\"", + "\"$(SRCROOT)/Stone Island/Plugins/cordova-plugin-google-analytics\"", + ); }; name = Release; }; diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/GAI.h b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/GAI.h new file mode 100644 index 00000000..7f3f7029 --- /dev/null +++ b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/GAI.h @@ -0,0 +1,192 @@ +/*! + @header GAI.h + @abstract Google Analytics iOS SDK Header + @version 3.14 + @copyright Copyright 2015 Google Inc. All rights reserved. + */ + +#import <Foundation/Foundation.h> + +#import "GAILogger.h" +#import "GAITrackedViewController.h" +#import "GAITracker.h" + +typedef NS_ENUM(NSUInteger, GAIDispatchResult) { + kGAIDispatchNoData, + kGAIDispatchGood, + kGAIDispatchError +}; + +/*! Google Analytics product string. */ +extern NSString *const kGAIProduct; + +/*! Google Analytics version string. */ +extern NSString *const kGAIVersion; + +/*! + NSError objects returned by the Google Analytics SDK may have this error domain + to indicate that the error originated in the Google Analytics SDK. + */ +extern NSString *const kGAIErrorDomain; + +/*! Google Analytics error codes. */ +typedef enum { + // This error code indicates that there was no error. Never used. + kGAINoError = 0, + + // This error code indicates that there was a database-related error. + kGAIDatabaseError, + + // This error code indicates that there was a network-related error. + kGAINetworkError, +} GAIErrorCode; + +/*! + Google Analytics iOS top-level class. Provides facilities to create trackers + and set behaviorial flags. + */ +@interface GAI : NSObject + +/*! + For convenience, this class exposes a default tracker instance. + This is initialized to `nil` and will be set to the first tracker that is + instantiated in trackerWithTrackingId:. It may be overridden as desired. + + The GAITrackedViewController class will, by default, use this tracker instance. + */ +@property(nonatomic, assign) id<GAITracker> defaultTracker; + +/*! + The GAILogger to use. + */ +@property(nonatomic, retain) id<GAILogger> logger; + +/*! + When this is true, no tracking information will be gathered; tracking calls + will effectively become no-ops. When set to true, all tracking information that + has not yet been submitted. The value of this flag will be persisted + automatically by the SDK. Developers can optionally use this flag to implement + an opt-out setting in the app to allows users to opt out of Google Analytics + tracking. + + This is set to `NO` the first time the Google Analytics SDK is used on a + device, and is persisted thereafter. + */ +@property(nonatomic, assign) BOOL optOut; + +/*! + If this value is positive, tracking information will be automatically + dispatched every dispatchInterval seconds. Otherwise, tracking information must + be sent manually by calling dispatch. + + By default, this is set to `120`, which indicates tracking information should + be dispatched automatically every 120 seconds. + */ +@property(nonatomic, assign) NSTimeInterval dispatchInterval; + +/*! + When set to true, the SDK will record the currently registered uncaught + exception handler, and then register an uncaught exception handler which tracks + the exceptions that occurred using defaultTracker. If defaultTracker is not + `nil`, this function will track the exception on the tracker and attempt to + dispatch any outstanding tracking information for 5 seconds. It will then call + the previously registered exception handler, if any. When set back to false, + the previously registered uncaught exception handler will be restored. + */ +@property(nonatomic, assign) BOOL trackUncaughtExceptions; + +/*! + When this is 'YES', no tracking information will be sent. Defaults to 'NO'. + */ +@property(nonatomic, assign) BOOL dryRun; + +/*! Get the shared instance of the Google Analytics for iOS class. */ ++ (GAI *)sharedInstance; + +/*! + Creates or retrieves a GAITracker implementation with the specified name and + tracking ID. If the tracker for the specified name does not already exist, then + it will be created and returned; otherwise, the existing tracker will be + returned. If the existing tracker for the respective name has a different + tracking ID, that tracking ID is not changed by this method. If defaultTracker + is not set, it will be set to the tracker instance returned here. + + @param name The name of this tracker. Must not be `nil` or empty. + + @param trackingId The tracking ID to use for this tracker. It should be of + the form `UA-xxxxx-y`. + + @return A GAITracker associated with the specified name. The tracker + can be used to send tracking data to Google Analytics. The first time this + method is called with a particular name, the tracker for that name will be + returned, and subsequent calls with the same name will return the same + instance. It is not necessary to retain the tracker because the tracker will be + retained internally by the library. + + If an error occurs or the name is not valid, this method will return + `nil`. + */ +- (id<GAITracker>)trackerWithName:(NSString *)name + trackingId:(NSString *)trackingId; + +/*! + Creates or retrieves a GAITracker implementation with name equal to + the specified tracking ID. If the tracker for the respective name does not + already exist, it is created, has it's tracking ID set to |trackingId|, + and is returned; otherwise, the existing tracker is returned. If the existing + tracker for the respective name has a different tracking ID, that tracking ID + is not changed by this method. If defaultTracker is not set, it is set to the + tracker instance returned here. + + @param trackingId The tracking ID to use for this tracker. It should be of + the form `UA-xxxxx-y`. The name of the tracker will be the same as trackingID. + + @return A GAITracker associated with the specified trackingID. The tracker + can be used to send tracking data to Google Analytics. The first time this + method is called with a particular trackingID, the tracker for the respective + name will be returned, and subsequent calls with the same trackingID + will return the same instance. It is not necessary to retain the tracker + because the tracker will be retained internally by the library. + + If an error occurs or the trackingId is not valid, this method will return + `nil`. + */ +- (id<GAITracker>)trackerWithTrackingId:(NSString *)trackingId; + +/*! + Remove a tracker from the trackers dictionary. If it is the default tracker, + clears the default tracker as well. + + @param name The name of the tracker. + */ +- (void)removeTrackerByName:(NSString *)name; + +/*! + Dispatches any pending tracking information. + + Note that this does not have any effect on dispatchInterval, and can be used in + conjunction with periodic dispatch. */ +- (void)dispatch; + +/*! + Dispatches the next tracking beacon in the queue, calling completionHandler when + the tracking beacon has either been sent (returning kGAIDispatchGood) or an error has resulted + (returning kGAIDispatchError). If there is no network connection or there is no data to send, + kGAIDispatchNoData is returned. + + Note that calling this method with a non-nil completionHandler disables periodic dispatch. + Periodic dispatch can be reenabled by setting the dispatchInterval to a positive number when + the app resumes from the background. + + Calling this method with a nil completionHandler is the same as calling the dispatch + above. + + This method can be used for background data fetching in iOS 7.0 or later. It would be wise to + call this when the application is exiting to initiate the submission of any unsubmitted + tracking information. + + @param completionHandler The block to run after a single dispatch request. The GAIDispatchResult + param indicates whether the dispatch succeeded, had an error, or had no hits to dispatch. + */ +- (void)dispatchWithCompletionHandler:(void (^)(GAIDispatchResult result))completionHandler; +@end diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/GAIDictionaryBuilder.h b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/GAIDictionaryBuilder.h new file mode 100644 index 00000000..b8c5fdab --- /dev/null +++ b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/GAIDictionaryBuilder.h @@ -0,0 +1,217 @@ +/*! + @header GAIDictionaryBuilder.h + @abstract Google Analytics iOS SDK Hit Format Header + @copyright Copyright 2013 Google Inc. All rights reserved. + */ + +#import <Foundation/Foundation.h> + +#import "GAIEcommerceProduct.h" +#import "GAIEcommerceProductAction.h" +#import "GAIEcommercePromotion.h" + +/*! + * Helper class to build a dictionary of hit parameters and values. + * <br> + * Examples: + * <code> + * id<GAITracker> t = // get a tracker. + * [t send:[[[GAIDictionaryBuilder createEventWithCategory:@"EventCategory" + * action:@"EventAction" + * label:nil + * value:nil] + * set:@"dimension1" forKey:[GAIFields customDimensionForIndex:1]] build]]; + * </code> + * This will send an event hit type with the specified parameters + * and a custom dimension parameter. + * <br> + * If you want to send a parameter with all hits, set it on GAITracker directly. + * <code> + * [t set:kGAIScreenName value:@"Home"]; + * [t send:[[GAIDictionaryBuilder createSocialWithNetwork:@"Google+" + * action:@"PlusOne" + * target:@"SOME_URL"] build]]; + * [t send:[[GAIDictionaryBuilder createSocialWithNetwork:@"Google+" + * action:@"Share" + * target:@"SOME_POST"] build]]; + * [t send:[[GAIDictionaryBuilder createSocialWithNetwork:@"Google+" + * action:@"HangOut" + * target:@"SOME_CIRCLE"] + * build]]; + * </code> + * You can override a value set on the tracker by adding it to the dictionary. + * <code> + * [t set:kGAIScreenName value:@"Home"]; + * [t send:...]; + * [t send[[[GAIDictionaryBuilder createEventWithCategory:@"click" + * action:@"popup" + * label:nil + * value:nil] + * set:@"popup title" forKey:kGAIScreenName] build]]; + * </code> + * The values set via [GAIDictionaryBuilder set] or + * [GAIDictionaryBuilder setAll] will override any existing values in the + * GAIDictionaryBuilder object (i.e. initialized by + * [GAIDictionaryBuilder createXYZ]). e.g. + * <code> + * GAIDictionaryBuilder *m = + * GAIDictionaryBuilder createTimingWithCategory:@"category" + * interval:@0 + * name:@"name" + * label:nil]; + * [t send:[m.set:@"10" forKey:kGAITimingVar] build]; + * [t send:[m.set:@"20" forKey:kGAITimingVar] build]; + * </code> + */ +@interface GAIDictionaryBuilder : NSObject + +- (GAIDictionaryBuilder *)set:(NSString *)value + forKey:(NSString *)key; + +/*! + * Copies all the name-value pairs from params into this object, ignoring any + * keys that are not NSString and any values that are neither NSString or + * NSNull. + */ +- (GAIDictionaryBuilder *)setAll:(NSDictionary *)params; + +/*! + * Returns the value for the input parameter paramName, or nil if paramName + * is not present. + */ +- (NSString *)get:(NSString *)paramName; + +/*! + * Return an NSMutableDictionary object with all the parameters set in this + */ +- (NSMutableDictionary *)build; + +/*! + * Parses and translates utm campaign parameters to analytics campaign param + * and returns them as a map. + * + * @param urlString url containing utm campaign parameters. + * + * Valid campaign parameters are: + * <ul> + * <li>utm_id</li> + * <li>utm_campaign</li> + * <li>utm_content</li> + * <li>utm_medium</li> + * <li>utm_source</li> + * <li>utm_term</li> + * <li>dclid</li> + * <li>gclid</li> + * <li>gmob_t</li> + * <li>aclid</li> + * <li>anid</li> + * </ul> + * <p> + * Example: + * http://my.site.com/index.html?utm_campaign=wow&utm_source=source + * utm_campaign=wow&utm_source=source. + * <p> + * For more information on auto-tagging, see + * http://support.google.com/googleanalytics/bin/answer.py?hl=en&answer=55590 + * <p> + * For more information on manual tagging, see + * http://support.google.com/googleanalytics/bin/answer.py?hl=en&answer=55518 + */ +- (GAIDictionaryBuilder *)setCampaignParametersFromUrl:(NSString *)urlString; + +/*! + Returns a GAIDictionaryBuilder object with parameters specific to an appview + hit. + + Note that using this method will not set the screen name for followon hits. To + do that you need to call set:kGAIDescription value:<screenName> on the + GAITracker instance. + + This method is deprecated. Use createScreenView instead. + */ ++ (GAIDictionaryBuilder *)createAppView DEPRECATED_MSG_ATTRIBUTE("Use createScreenView instead."); + +/*! + Returns a GAIDictionaryBuilder object with parameters specific to a screenview + hit. + + Note that using this method will not set the screen name for followon hits. To + do that you need to call set:kGAIDescription value:<screenName> on the + GAITracker instance. + */ ++ (GAIDictionaryBuilder *)createScreenView; + +/*! + Returns a GAIDictionaryBuilder object with parameters specific to an event hit. + */ ++ (GAIDictionaryBuilder *)createEventWithCategory:(NSString *)category + action:(NSString *)action + label:(NSString *)label + value:(NSNumber *)value; + +/*! + Returns a GAIDictionaryBuilder object with parameters specific to an exception + hit. + */ ++ (GAIDictionaryBuilder *)createExceptionWithDescription:(NSString *)description + withFatal:(NSNumber *)fatal; + +/*! + Returns a GAIDictionaryBuilder object with parameters specific to an item hit. + */ ++ (GAIDictionaryBuilder *)createItemWithTransactionId:(NSString *)transactionId + name:(NSString *)name + sku:(NSString *)sku + category:(NSString *)category + price:(NSNumber *)price + quantity:(NSNumber *)quantity + currencyCode:(NSString *)currencyCode; + +/*! + Returns a GAIDictionaryBuilder object with parameters specific to a social hit. + */ ++ (GAIDictionaryBuilder *)createSocialWithNetwork:(NSString *)network + action:(NSString *)action + target:(NSString *)target; + +/*! + Returns a GAIDictionaryBuilder object with parameters specific to a timing hit. + */ ++ (GAIDictionaryBuilder *)createTimingWithCategory:(NSString *)category + interval:(NSNumber *)intervalMillis + name:(NSString *)name + label:(NSString *)label; + +/*! + Returns a GAIDictionaryBuilder object with parameters specific to a transaction + hit. + */ ++ (GAIDictionaryBuilder *)createTransactionWithId:(NSString *)transactionId + affiliation:(NSString *)affiliation + revenue:(NSNumber *)revenue + tax:(NSNumber *)tax + shipping:(NSNumber *)shipping + currencyCode:(NSString *)currencyCode; + +/*! + Set the product action field for this hit. + */ +- (GAIDictionaryBuilder *)setProductAction:(GAIEcommerceProductAction *)productAction; + +/*! + Adds a product to this hit. + */ +- (GAIDictionaryBuilder *)addProduct:(GAIEcommerceProduct *)product; + +/*! + Add a product impression to this hit. + */ +- (GAIDictionaryBuilder *)addProductImpression:(GAIEcommerceProduct *)product + impressionList:(NSString *)name + impressionSource:(NSString *)source; + +/*! + Add a promotion to this hit. + */ +- (GAIDictionaryBuilder *)addPromotion:(GAIEcommercePromotion *)promotion; +@end diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/GAIEcommerceFields.h b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/GAIEcommerceFields.h new file mode 100644 index 00000000..b3ba60ae --- /dev/null +++ b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/GAIEcommerceFields.h @@ -0,0 +1,124 @@ +/*! + @header GAIEcommerceFields.h + @abstract Google Analytics iOS SDK Ecommerce Hit Format Header + @copyright Copyright 2014 Google Inc. All rights reserved. + */ + +#import <Foundation/Foundation.h> + +/*! + This class provides several fields and methods useful as wire format parameters for + Enhanced Ecommerce. See the online developer guides for Enhanced Ecommerce for details + on how to use the Enhanced Ecommerce features. + */ + +// Enhanced Ecommerce Product fields +extern NSString *const kGAIProductId; +extern NSString *const kGAIProductName; +extern NSString *const kGAIProductBrand; +extern NSString *const kGAIProductCategory; +extern NSString *const kGAIProductVariant; +extern NSString *const kGAIProductPrice; +extern NSString *const kGAIProductQuantity; +extern NSString *const kGAIProductCouponCode; +extern NSString *const kGAIProductPosition; + +extern NSString *const kGAIProductAction; + +// product action values +extern NSString *const kGAIPADetail; +extern NSString *const kGAIPAClick; +extern NSString *const kGAIPAAdd; +extern NSString *const kGAIPARemove; +extern NSString *const kGAIPACheckout; +extern NSString *const kGAIPACheckoutOption; +extern NSString *const kGAIPAPurchase; +extern NSString *const kGAIPARefund; + +// product action fields +// used for 'purchase' and 'refund' actions +extern NSString *const kGAIPATransactionId; +extern NSString *const kGAIPAAffiliation; +extern NSString *const kGAIPARevenue; +extern NSString *const kGAIPATax; +extern NSString *const kGAIPAShipping; +extern NSString *const kGAIPACouponCode; +// used for 'checkout' action +extern NSString *const kGAICheckoutStep; +extern NSString *const kGAICheckoutOption; +// used for 'detail' and 'click' actions +extern NSString *const kGAIProductActionList; +extern NSString *const kGAIProductListSource; + +// Enhanced Ecommerce Impressions fields +extern NSString *const kGAIImpressionName; +extern NSString *const kGAIImpressionListSource; +extern NSString *const kGAIImpressionProduct; +extern NSString *const kGAIImpressionProductId; +extern NSString *const kGAIImpressionProductName; +extern NSString *const kGAIImpressionProductBrand; +extern NSString *const kGAIImpressionProductCategory; +extern NSString *const kGAIImpressionProductVariant; +extern NSString *const kGAIImpressionProductPosition; +extern NSString *const kGAIImpressionProductPrice; + +// Enhanced Ecommerce Promotions fields +extern NSString *const kGAIPromotionId; +extern NSString *const kGAIPromotionName; +extern NSString *const kGAIPromotionCreative; +extern NSString *const kGAIPromotionPosition; + +// Promotion actions +extern NSString *const kGAIPromotionAction; +extern NSString *const kGAIPromotionView; +extern NSString *const kGAIPromotionClick; + +@interface GAIEcommerceFields : NSObject + +/*! + Generates an enhanced ecommerce product field. Note that field names generated by + customDimensionForIndex and customMetricForIndex can be used as suffixes. + + @param index the index of the product + @param suffix the product field suffix (such as kGAIProductPrice). + + @return an NSString representing the product field parameter + */ ++ (NSString *)productFieldForIndex:(NSUInteger)index suffix:(NSString *)suffix; + +/*! + Genrates an enhanced ecommerce impression list field name with an index. The return value of + this method should also be used as input to the productImpressionForList method below. + + @param index the index of the impression list + + @return an NSString representing the impression list parameter + */ ++ (NSString *)impressionListForIndex:(NSUInteger)index; + +/*! + Generates an enhanced ecommerce product impression field with the impression list, product index + and product suffix as parameters. The output of the method impressionListForIndex above should be + used as the input list for this method. The output of customDimensionForIndex and + customMetricForIndex can be used as suffixes. + + @param list the impression list for this product impression + @param index the index of this product in the impression list + @param suffix the product impression suffix for this field + + @return an NSString representing this product impression field parameter + */ ++ (NSString *)productImpressionForList:(NSString *)list + index:(NSUInteger)index + suffix:(NSString *)Suffix; + +/*! + Generates an enhanced ecommerce promotion field with an index and suffix. + + @param index the index of the promotion + @param suffix the promotion suffix (such as kGAIPromotionId) + + @return an NSString representing this promotion field paramter + */ ++ (NSString *)promotionForIndex:(NSUInteger)index suffix:(NSString *)suffix; +@end diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/GAIEcommerceProduct.h b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/GAIEcommerceProduct.h new file mode 100644 index 00000000..029f7638 --- /dev/null +++ b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/GAIEcommerceProduct.h @@ -0,0 +1,102 @@ +/*! + @header GAIEcommerceProduct.h + @abstract Google Analytics iOS SDK Hit Format Header + @copyright Copyright 2014 Google Inc. All rights reserved. + */ + +#import <Foundation/Foundation.h> + +/*! + * Class to construct product related information for a Google Analytics beacon. Use this class to + * report information about products sold by merchants or impressions of products seen by users. + * Instances of this class can be associated with both Product Actions and Product + * Impression Lists. + * <br> + * Typical usage: + * <code> + * [tracker set:kGAIScreenName value:@"MyScreen"]; + * GAIDictionaryBuilder *builder = [GAIDictionaryBuilder createScreenView]; + * GAIEcommerceProduct *product = [[GAIEcommerceProduct alloc] init]; + * [product setId:@""PID-1234""]; + * [product setName:@"Space Monkeys!"]; + * [product setPrice:@100]; + * [product setQuantity:@2]; + * [builder addProductImpression:product impressionList:@"listName"]; + * [tracker send:[builder build]]; + * </code> + */ +@interface GAIEcommerceProduct : NSObject + +/*! + Sets the id that is used to identify a product in GA reports. + */ +- (GAIEcommerceProduct *)setId:(NSString *)productId; + +/*! + Sets the name that is used to indentify the product in GA reports. + */ +- (GAIEcommerceProduct *)setName:(NSString *)productName; + +/*! + Sets the brand associated with the product in GA reports. + */ +- (GAIEcommerceProduct *)setBrand:(NSString *)productBrand; + +/*! + Sets the category associated with the product in GA reports. + */ +- (GAIEcommerceProduct *)setCategory:(NSString *)productCategory; + +/*! + Sets the variant of the product. + */ +- (GAIEcommerceProduct *)setVariant:(NSString *)productVariant; + +/*! + Sets the price of the product. + */ +- (GAIEcommerceProduct *)setPrice:(NSNumber *)productPrice; + +/*! + Sets the quantity of the product. This field is usually not used with product impressions. + */ +- (GAIEcommerceProduct *)setQuantity:(NSNumber *)productQuantity; + +/*! + Sets the coupon code associated with the product. This field is usually not used with product + impressions. + */ +- (GAIEcommerceProduct *)setCouponCode:(NSString *)productCouponCode; + +/*! + Sets the position of the product on the screen/product impression list, etc. + */ +- (GAIEcommerceProduct *)setPosition:(NSNumber *)productPosition; + +/*! + Sets the custom dimension associated with this product. + */ +- (GAIEcommerceProduct *)setCustomDimension:(NSUInteger)index value:(NSString *)value; + +/*! + Sets the custom metric associated with this product. + */ +- (GAIEcommerceProduct *)setCustomMetric:(NSUInteger)index value:(NSNumber *)value; + +/*! + Builds an NSDictionary of fields stored in this instance suitable for a product action. The + index parameter is the index of this product in the product action list. + <br> + Normally, users will have no need to call this method. + */ +- (NSDictionary *)buildWithIndex:(NSUInteger)index; + +/*! + Builds an NSDictionary of fields stored in this instance suitable for an impression list. The + lIndex parameter is the index of the product impression list while the index parameter is the + index of this product in that impression list. + <br> + Normally, users will have no need to call this method. + */ +- (NSDictionary *)buildWithListIndex:(NSUInteger)lIndex index:(NSUInteger)index; +@end diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/GAIEcommerceProductAction.h b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/GAIEcommerceProductAction.h new file mode 100644 index 00000000..e3da1c15 --- /dev/null +++ b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/GAIEcommerceProductAction.h @@ -0,0 +1,107 @@ +/*! + @header GAIProductAction.h + @abstract Google Analytics iOS SDK Hit Format Header + @copyright Copyright 2014 Google Inc. All rights reserved. + */ + +#import <Foundation/Foundation.h> + +/*! + * Class to construct transaction/checkout or other product interaction related information for a + * Google Analytics hit. Use this class to report information about products sold, viewed or + * refunded. This class is intended to be used with GAIDictionaryBuilder. + * <br> + * Typical usage: + * <code> + * [tracker set:kGAIScreenName value:@"MyScreen"]; + * GAIDictionaryBuilder *builder = [GAIDictionaryBuilder createScreenView]; + * GAIEcommerceProductAction *action = [[GAIEcommerceProductAction alloc] init]; + * [action setAction:kGAIPAPurchase]; + * [action setTransactionId:@"TT-1234"]; + * [action setRevenue:@3.14]; + * [action setCouponCode:@"EXTRA100"]; + * [builder setProductAction:action]; + * GAIEcommerceProduct *product = [[GAIEcommerceProduct alloc] init]; + * [product setId:@""PID-1234""]; + * [product setName:@"Space Monkeys!"]; + * [product setPrice:@100]; + * [product setQuantity:@2]; + * [builder addProduct:product]; + * [tracker send:[builder build]]; + * </code> + */ +@interface GAIEcommerceProductAction : NSObject + +/*! + Sets the product action field for this product action. Valid values can be found in + GAIEcommerceFields.h under "product action values". + */ +- (GAIEcommerceProductAction *)setAction:(NSString *)productAction; + +/*! + The unique id associated with the transaction. This value is used for kGAIPAPurchase and + kGAIPARefund product actions. + */ +- (GAIEcommerceProductAction *)setTransactionId:(NSString *)transactionId; + +/*! + Sets the transaction's affiliation value. This value is used for kGAIPAPurchase and + kGAIPARefund product actions. + */ +- (GAIEcommerceProductAction *)setAffiliation:(NSString *)affiliation; + +/*! + Sets the transaction's total revenue. This value is used for kGAIPAPurchase and kGAIPARefund + product actions. + */ +- (GAIEcommerceProductAction *)setRevenue:(NSNumber *)revenue; + +/*! + Sets the transaction's total tax. This value is used for kGAIPAPurchase and kGAIPARefund + product actions. + */ +- (GAIEcommerceProductAction *)setTax:(NSNumber *)tax; + +/*! + Sets the transaction's total shipping costs. This value is used for kGAIPAPurchase and + kGAIPARefund product actions. + */ +- (GAIEcommerceProductAction *)setShipping:(NSNumber *)shipping; + +/*! + Sets the coupon code used in this transaction. This value is used for kGAIPAPurchase and + kGAIPARefund product actions. + */ +- (GAIEcommerceProductAction *)setCouponCode:(NSString *)couponCode; + +/*! + Sets the checkout process's progress. This value is used for kGAICheckout and + kGAICheckoutOptions product actions. + */ +- (GAIEcommerceProductAction *)setCheckoutStep:(NSNumber *)checkoutStep; + +/*! + Sets the option associated with the checkout. This value is used for kGAICheckout and + kGAICheckoutOptions product actions. + */ +- (GAIEcommerceProductAction *)setCheckoutOption:(NSString *)checkoutOption; + +/*! + Sets the list name associated with the products in Google Analytics beacons. This value is + used in kGAIPADetail and kGAIPAClick product actions. + */ +- (GAIEcommerceProductAction *)setProductActionList:(NSString *)productActionList; + +/*! + Sets the list source name associated with the products in Google Analytics beacons. This value + is used in kGAIPADetail and kGAIPAClick product actions. + */ +- (GAIEcommerceProductAction *)setProductListSource:(NSString *)productListSource; + +/*! + Builds an NSDictionary of fields stored in this instance representing this product action. + <br> + Normally, users will have no need to call this method. + */ +- (NSDictionary *)build; +@end diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/GAIEcommercePromotion.h b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/GAIEcommercePromotion.h new file mode 100644 index 00000000..c7bf25af --- /dev/null +++ b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/GAIEcommercePromotion.h @@ -0,0 +1,54 @@ +/*! + @header GAIEcommercePromotion.h + @abstract Google Analytics iOS SDK Hit Format Header + @copyright Copyright 2014 Google Inc. All rights reserved. + */ + +#import <Foundation/Foundation.h> + +/*! + * Class to construct promotion related fields for Google Analytics hits. The fields from this class + * can be used to represent internal promotions that run within an app, such as banners, banner ads + * etc. + * + * Typical usage: + * <code> + * GAIDictionaryBuilder *builder = [GAIDictionaryBuilder createScreenView]; + * GAIEcommercePromotion *promotion = [[GAIEcommercePromotion alloc] init]; + * [promotion setId:@"PROMO-ID1234"]; + * [promotion setName:@"Home screen banner"]; + * [builder set:kGAIPromotionClick forKey:kGAIPromotionAction]; + * [builder addPromotion:promotion]; + * [tracker send:builder.build]]; + * </code> + */ +@interface GAIEcommercePromotion : NSObject + +/*! + Sets the id that is used to identify a promotion in GA reports. + */ +- (GAIEcommercePromotion *)setId:(NSString *)pid; + +/*! + Sets the name that is used to identify a promotion in GA reports. + */ +- (GAIEcommercePromotion *)setName:(NSString *)name; + +/*! + Sets the name of the creative associated with the promotion. + */ +- (GAIEcommercePromotion *)setCreative:(NSString *)creative; + +/*! + Sets the position of the promotion. + */ +- (GAIEcommercePromotion *)setPosition:(NSString *)position; + +/*! + Builds an NSDictionary of fields stored in this instance. The index parameter is the + index of this promotion in that promotion list. + <br> + Normally, users will have no need to call this method. + */ +- (NSDictionary *)buildWithIndex:(NSUInteger)index; +@end diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/GAIFields.h b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/GAIFields.h new file mode 100644 index 00000000..e54cef03 --- /dev/null +++ b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/GAIFields.h @@ -0,0 +1,133 @@ +/*! + @header GAIFields.h + @abstract Google Analytics iOS SDK Hit Format Header + @copyright Copyright 2013 Google Inc. All rights reserved. + */ + +#import <Foundation/Foundation.h> + +/*! + These fields can be used for the wire format parameter names required by + the |GAITracker| get, set and send methods as well as the set methods in the + |GAIDictionaryBuilder| class. + */ +extern NSString *const kGAIUseSecure; + +extern NSString *const kGAIHitType; +extern NSString *const kGAITrackingId; +extern NSString *const kGAIClientId; +extern NSString *const kGAIDataSource; +extern NSString *const kGAIAnonymizeIp; +extern NSString *const kGAISessionControl; +extern NSString *const kGAIDeviceModelVersion; +extern NSString *const kGAIScreenResolution; +extern NSString *const kGAIViewportSize; +extern NSString *const kGAIEncoding; +extern NSString *const kGAIScreenColors; +extern NSString *const kGAILanguage; +extern NSString *const kGAIJavaEnabled; +extern NSString *const kGAIFlashVersion; +extern NSString *const kGAINonInteraction; +extern NSString *const kGAIReferrer; +extern NSString *const kGAILocation; +extern NSString *const kGAIHostname; +extern NSString *const kGAIPage; +extern NSString *const kGAIDescription; // synonym for kGAIScreenName +extern NSString *const kGAIScreenName; // synonym for kGAIDescription +extern NSString *const kGAITitle; +extern NSString *const kGAIAdMobHitId; +extern NSString *const kGAIAppName; +extern NSString *const kGAIAppVersion; +extern NSString *const kGAIAppId; +extern NSString *const kGAIAppInstallerId; +extern NSString *const kGAIUserId; + +extern NSString *const kGAIEventCategory; +extern NSString *const kGAIEventAction; +extern NSString *const kGAIEventLabel; +extern NSString *const kGAIEventValue; + +extern NSString *const kGAISocialNetwork; +extern NSString *const kGAISocialAction; +extern NSString *const kGAISocialTarget; + +extern NSString *const kGAITransactionId; +extern NSString *const kGAITransactionAffiliation; +extern NSString *const kGAITransactionRevenue; +extern NSString *const kGAITransactionShipping; +extern NSString *const kGAITransactionTax; +extern NSString *const kGAICurrencyCode; + +extern NSString *const kGAIItemPrice; +extern NSString *const kGAIItemQuantity; +extern NSString *const kGAIItemSku; +extern NSString *const kGAIItemName; +extern NSString *const kGAIItemCategory; + +extern NSString *const kGAICampaignSource; +extern NSString *const kGAICampaignMedium; +extern NSString *const kGAICampaignName; +extern NSString *const kGAICampaignKeyword; +extern NSString *const kGAICampaignContent; +extern NSString *const kGAICampaignId; +extern NSString *const kGAICampaignAdNetworkClickId; +extern NSString *const kGAICampaignAdNetworkId; + +extern NSString *const kGAITimingCategory; +extern NSString *const kGAITimingVar; +extern NSString *const kGAITimingValue; +extern NSString *const kGAITimingLabel; + +extern NSString *const kGAIExDescription; +extern NSString *const kGAIExFatal; + +extern NSString *const kGAISampleRate; + +extern NSString *const kGAIIdfa; +extern NSString *const kGAIAdTargetingEnabled; + +// hit types +extern NSString *const kGAIAppView DEPRECATED_MSG_ATTRIBUTE("Use kGAIScreenView instead."); +extern NSString *const kGAIScreenView; +extern NSString *const kGAIEvent; +extern NSString *const kGAISocial; +extern NSString *const kGAITransaction; +extern NSString *const kGAIItem; +extern NSString *const kGAIException; +extern NSString *const kGAITiming; + +/*! + This class provides several fields and methods useful as wire format parameter + names. The methods are used for wire format parameter names that are indexed. + */ + +@interface GAIFields : NSObject + +/*! + Generates the correct parameter name for a content group with an index. + + @param index the index of the content group. + + @return an NSString representing the content group parameter for the index. + */ ++ (NSString *)contentGroupForIndex:(NSUInteger)index; + +/*! + Generates the correct parameter name for a custon dimension with an index. + + @param index the index of the custom dimension. + + @return an NSString representing the custom dimension parameter for the index. + */ ++ (NSString *)customDimensionForIndex:(NSUInteger)index; + +/*! + Generates the correct parameter name for a custom metric with an index. + + @param index the index of the custom metric. + + @return an NSString representing the custom metric parameter for the index. + */ ++ (NSString *)customMetricForIndex:(NSUInteger)index; + +@end diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/GAILogger.h b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/GAILogger.h new file mode 100644 index 00000000..06291f2c --- /dev/null +++ b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/GAILogger.h @@ -0,0 +1,49 @@ +/*! + @header GAILogger.h + @abstract Google Analytics iOS SDK Source + @copyright Copyright 2011 Google Inc. All rights reserved. + */ + +#import <Foundation/Foundation.h> + +typedef NS_ENUM(NSUInteger, GAILogLevel) { + kGAILogLevelNone = 0, + kGAILogLevelError = 1, + kGAILogLevelWarning = 2, + kGAILogLevelInfo = 3, + kGAILogLevelVerbose = 4 +}; + +/*! + Protocol to be used for logging debug and informational messages from the SDK. + Implementations of this protocol can be provided to the |GAI| class, + to be used as the logger by the SDK. See the |logger| property in GAI.h. + */ +@protocol GAILogger<NSObject> +@required + +/*! + Only messages of |logLevel| and below are logged. + */ +@property (nonatomic, assign) GAILogLevel logLevel; + +/*! + Logs message with log level |kGAILogLevelVerbose|. + */ +- (void)verbose:(NSString *)message; + +/*! + Logs message with log level |kGAILogLevelInfo|. + */ +- (void)info:(NSString *)message; + +/*! + Logs message with log level |kGAILogLevelWarning|. + */ +- (void)warning:(NSString *)message; + +/*! + Logs message with log level |kGAILogLevelError|. + */ +- (void)error:(NSString *)message; +@end diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/GAITrackedViewController.h b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/GAITrackedViewController.h new file mode 100644 index 00000000..de19def0 --- /dev/null +++ b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/GAITrackedViewController.h @@ -0,0 +1,33 @@ +/*! + @header GAITrackedViewController.h + @abstract Google Analytics for iOS Tracked View Controller Header + @copyright Copyright 2012 Google Inc. All rights reserved. + */ + +#import <Foundation/Foundation.h> +#import <UIKit/UIKit.h> + +@protocol GAITracker; + +/*! + Extends UIViewController to generate Google Analytics screenview calls + whenever the view appears; this is done by overriding the `viewDidAppear:` + method. The screen name must be set for any tracking calls to be made. + + By default, this will use [GAI defaultTracker] for tracking calls, but one can + override this by setting the tracker property. + */ +@interface GAITrackedViewController : UIViewController + +/*! + The tracker on which view tracking calls are be made, or `nil`, in which case + [GAI defaultTracker] will be used. + */ +@property(nonatomic, assign) id<GAITracker> tracker; +/*! + The screen name, for purposes of Google Analytics tracking. If this is `nil`, + no tracking calls will be made. + */ +@property(nonatomic, copy) NSString *screenName; + +@end diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/GAITracker.h b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/GAITracker.h new file mode 100644 index 00000000..fdc5c5df --- /dev/null +++ b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/GAITracker.h @@ -0,0 +1,57 @@ +/*! + @header GAITracker.h + @abstract Google Analytics iOS SDK Tracker Header + @copyright Copyright 2013 Google Inc. All rights reserved. +*/ + +#import <Foundation/Foundation.h> + +/*! + Google Analytics tracking interface. Obtain instances of this interface from + [GAI trackerWithTrackingId:] to track screens, events, transactions, timing, + and exceptions. The implementation of this interface is thread-safe, and no + calls are expected to block or take a long time. All network and disk activity + will take place in the background. + */ +@protocol GAITracker<NSObject> + +/*! + Name of this tracker. + */ +@property(nonatomic, readonly) NSString *name; + +/*! + Allow collection of IDFA and related fields if set to true. Default is false. + */ +@property(nonatomic) BOOL allowIDFACollection; + +/*! + Set a tracking parameter. + + @param parameterName The parameter name. + + @param value The value to set for the parameter. If this is nil, the + value for the parameter will be cleared. + */ +- (void)set:(NSString *)parameterName + value:(NSString *)value; + +/*! + Get a tracking parameter. + + @param parameterName The parameter name. + + @returns The parameter value, or nil if no value for the given parameter is + set. + */ +- (NSString *)get:(NSString *)parameterName; + +/*! + Queue tracking information with the given parameter values. + + @param parameters A map from parameter names to parameter values which will be + set just for this piece of tracking information, or nil for none. + */ +- (void)send:(NSDictionary *)parameters; + +@end diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/UniversalAnalyticsPlugin.h b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/UniversalAnalyticsPlugin.h new file mode 100644 index 00000000..dde480ac --- /dev/null +++ b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/UniversalAnalyticsPlugin.h @@ -0,0 +1,34 @@ +//UniversalAnalyticsPlugin.h +//Created by Daniel Wilson 2013-09-19 + +#import <Foundation/Foundation.h> +#import <Cordova/CDV.h> +#import "GAI.h" + +@interface UniversalAnalyticsPlugin : CDVPlugin { + bool _trackerStarted; + bool _debugMode; + NSMutableDictionary *_customDimensions; +} + +- (void) startTrackerWithId: (CDVInvokedUrlCommand*)command; +- (void) setAllowIDFACollection: (CDVInvokedUrlCommand*) command; +- (void) setUserId: (CDVInvokedUrlCommand*)command; +- (void) setAppVersion: (CDVInvokedUrlCommand*)command; +- (void) getVar: (CDVInvokedUrlCommand*)command; +- (void) setVar: (CDVInvokedUrlCommand*)command; +- (void) dispatch: (CDVInvokedUrlCommand*)command; +- (void) debugMode: (CDVInvokedUrlCommand*)command; +- (void) setOptOut: (CDVInvokedUrlCommand*)command; +- (void) enableUncaughtExceptionReporting: (CDVInvokedUrlCommand*)command; +- (void) addCustomDimension: (CDVInvokedUrlCommand*)command; +- (void) trackEvent: (CDVInvokedUrlCommand*)command; +- (void) trackMetric: (CDVInvokedUrlCommand*)command; +- (void) trackTiming: (CDVInvokedUrlCommand*)command; +- (void) trackView: (CDVInvokedUrlCommand*)command; +- (void) trackException: (CDVInvokedUrlCommand*)command; +- (void) addTransaction: (CDVInvokedUrlCommand*)command; +- (void) addTransactionItem: (CDVInvokedUrlCommand*)command; + +@end + diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/UniversalAnalyticsPlugin.m b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/UniversalAnalyticsPlugin.m new file mode 100644 index 00000000..12355da6 --- /dev/null +++ b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/UniversalAnalyticsPlugin.m @@ -0,0 +1,543 @@ +//UniversalAnalyticsPlugin.m +//Created by Daniel Wilson 2013-09-19 + +#import "UniversalAnalyticsPlugin.h" +#import "GAI.h" +#import "GAIDictionaryBuilder.h" +#import "GAIFields.h" + +@implementation UniversalAnalyticsPlugin + +- (void) pluginInitialize +{ + _debugMode = false; + _trackerStarted = false; + _customDimensions = nil; +} + +- (void) startTrackerWithId: (CDVInvokedUrlCommand*)command +{ + [self.commandDelegate runInBackground:^{ + CDVPluginResult* pluginResult = nil; + NSString* accountId = [command.arguments objectAtIndex:0]; + NSNumber* dispatchPeriod = [command.arguments objectAtIndex:1]; + + if ([dispatchPeriod isKindOfClass:[NSNumber class]]) + [GAI sharedInstance].dispatchInterval = [dispatchPeriod doubleValue]; + else + [GAI sharedInstance].dispatchInterval = 30; + + [[GAI sharedInstance] trackerWithTrackingId:accountId]; + + _trackerStarted = true; + pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK]; + [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId]; + }]; + /* NSLog(@"successfully started GAI tracker"); */ +} + +- (void) setAllowIDFACollection: (CDVInvokedUrlCommand*) command +{ + CDVPluginResult* pluginResult = nil; + if ( ! _trackerStarted) { + pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Tracker not started"]; + [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId]; + return; + } + + id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker]; + tracker.allowIDFACollection = [[command argumentAtIndex:0 withDefault:@(NO)] boolValue]; +} + +- (void) addCustomDimensionsToTracker: (id<GAITracker>)tracker +{ + if (_customDimensions) { + for (NSString *key in _customDimensions.allKeys) { + NSString *value = [_customDimensions objectForKey:key]; + + NSNumberFormatter *f = [[NSNumberFormatter alloc] init]; + f.numberStyle = NSNumberFormatterDecimalStyle; + NSNumber *myKey = [f numberFromString:key]; + + /* NSLog(@"Setting tracker dimension slot %@: <%@>", key, value); */ + [tracker set:[GAIFields customDimensionForIndex:myKey.unsignedIntegerValue] + value:value]; + } + } +} + +- (void) getVar: (CDVInvokedUrlCommand*) command +{ + [self.commandDelegate runInBackground:^{ + CDVPluginResult* pluginResult = nil; + if ( ! _trackerStarted) { + pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Tracker not started"]; + [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId]; + return; + } + + id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker]; + NSString* parameterName = [command.arguments objectAtIndex:0]; + NSString* result = [tracker get:parameterName]; + + pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString:result]; + [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId]; + }]; +} + +- (void) setVar: (CDVInvokedUrlCommand*) command +{ + [self.commandDelegate runInBackground:^{ + CDVPluginResult* pluginResult = nil; + if ( ! _trackerStarted) { + pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Tracker not started"]; + [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId]; + return; + } + + id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker]; + NSString* parameterName = [command.arguments objectAtIndex:0]; + NSString* parameter = [command.arguments objectAtIndex:1]; + [tracker set:parameterName value:parameter]; + + pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK]; + [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId]; + }]; +} + +- (void) dispatch: (CDVInvokedUrlCommand*) command +{ + [[GAI sharedInstance] dispatch]; +} + +- (void) debugMode: (CDVInvokedUrlCommand*) command +{ + _debugMode = true; + [[GAI sharedInstance].logger setLogLevel:kGAILogLevelVerbose]; +} + +- (void) setUserId: (CDVInvokedUrlCommand*)command +{ + CDVPluginResult* pluginResult = nil; + NSString* userId = [command.arguments objectAtIndex:0]; + + if ( ! _trackerStarted) { + pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Tracker not started"]; + [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId]; + return; + } + + id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker]; + [tracker set:@"&uid" value: userId]; + + pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK]; + [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId]; +} + +- (void) setAnonymizeIp: (CDVInvokedUrlCommand*)command +{ + CDVPluginResult* pluginResult = nil; + NSString* anonymize = [command.arguments objectAtIndex:0]; + + if ( ! _trackerStarted) { + pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Tracker not started"]; + [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId]; + return; + } + + id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker]; + [tracker set:kGAIAnonymizeIp value:anonymize]; + + pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK]; + [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId]; +} + +- (void) setOptOut: (CDVInvokedUrlCommand*)command +{ + CDVPluginResult* pluginResult = nil; + bool optout = [[command.arguments objectAtIndex:0] boolValue]; + + if ( ! _trackerStarted) { + pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Tracker not started"]; + [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId]; + return; + } + + [[GAI sharedInstance] setOptOut:optout]; + + pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK]; + [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId]; +} + +- (void) setAppVersion: (CDVInvokedUrlCommand*)command +{ + CDVPluginResult* pluginResult = nil; + NSString* version = [command.arguments objectAtIndex:0]; + + if ( ! _trackerStarted) { + pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Tracker not started"]; + [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId]; + return; + } + + id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker]; + [tracker set:@"&av" value: version]; + + pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK]; + [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId]; +} + +- (void) enableUncaughtExceptionReporting: (CDVInvokedUrlCommand*)command +{ + CDVPluginResult* pluginResult = nil; + + if ( ! _trackerStarted) { + pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Tracker not started"]; + [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId]; + return; + } + + bool enabled = [[command.arguments objectAtIndex:0] boolValue]; + [[GAI sharedInstance] setTrackUncaughtExceptions:enabled]; + + pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK]; + [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId]; +} + +- (void) addCustomDimension: (CDVInvokedUrlCommand*)command +{ + CDVPluginResult* pluginResult = nil; + NSNumber* key = [command.arguments objectAtIndex:0]; + NSString* value = [command.arguments objectAtIndex:1]; + + if ( ! _customDimensions) { + _customDimensions = [[NSMutableDictionary alloc] init]; + } + + _customDimensions[key.stringValue] = value; + + pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK]; + [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId]; +} + +- (void) trackMetric: (CDVInvokedUrlCommand*)command +{ + CDVPluginResult* pluginResult = nil; + + if ( ! _trackerStarted) { + pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Tracker not started"]; + [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId]; + return; + } + + [self.commandDelegate runInBackground:^{ + CDVPluginResult* pluginResult = nil; + NSNumber *key = nil; + NSString *value = nil; + + if ([command.arguments count] > 0) + key = [command.arguments objectAtIndex:0]; + + if ([command.arguments count] > 1) + value = [command.arguments objectAtIndex:1]; + + id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker]; + + [tracker set:[GAIFields customMetricForIndex:[key intValue]] value:value]; + + + pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK]; + [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId]; + }]; +} + +- (void) trackEvent: (CDVInvokedUrlCommand*)command +{ + CDVPluginResult* pluginResult = nil; + + if ( ! _trackerStarted) { + pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Tracker not started"]; + [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId]; + return; + } + + [self.commandDelegate runInBackground:^{ + CDVPluginResult* pluginResult = nil; + NSString *category = nil; + NSString *action = nil; + NSString *label = nil; + NSNumber *value = nil; + + if ([command.arguments count] > 0) + category = [command.arguments objectAtIndex:0]; + + if ([command.arguments count] > 1) + action = [command.arguments objectAtIndex:1]; + + if ([command.arguments count] > 2) + label = [command.arguments objectAtIndex:2]; + + if ([command.arguments count] > 3) + value = [command.arguments objectAtIndex:3]; + + bool newSession = [[command argumentAtIndex:4 withDefault:@(NO)] boolValue]; + + id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker]; + + [self addCustomDimensionsToTracker:tracker]; + + GAIDictionaryBuilder *builder = [GAIDictionaryBuilder + createEventWithCategory: category //required + action: action //required + label: label + value: value]; + if(newSession){ + [builder set:@"start" forKey:kGAISessionControl]; + } + [tracker send:[builder build]]; + + pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK]; + [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId]; + + }]; + +} + +- (void) trackException: (CDVInvokedUrlCommand*)command +{ + CDVPluginResult* pluginResult = nil; + + if ( ! _trackerStarted) { + pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Tracker not started"]; + [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId]; + return; + } + + [self.commandDelegate runInBackground:^{ + CDVPluginResult* pluginResult = nil; + NSString *description = nil; + NSNumber *fatal = nil; + + if ([command.arguments count] > 0) + description = [command.arguments objectAtIndex:0]; + + if ([command.arguments count] > 1) + fatal = [command.arguments objectAtIndex:1]; + + id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker]; + + [self addCustomDimensionsToTracker:tracker]; + + [tracker send:[[GAIDictionaryBuilder createScreenView] build]]; + + [tracker send:[[GAIDictionaryBuilder + createExceptionWithDescription: description + withFatal: fatal] build]]; + + pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK]; + [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId]; + }]; +} + +- (void) trackView: (CDVInvokedUrlCommand*)command +{ + CDVPluginResult* pluginResult = nil; + + if ( ! _trackerStarted) { + pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Tracker not started"]; + [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId]; + return; + } + + [self.commandDelegate runInBackground:^{ + CDVPluginResult* pluginResult = nil; + NSString* screenName = [command.arguments objectAtIndex:0]; + + id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker]; + [self addCustomDimensionsToTracker:tracker]; + + NSString* deepLinkUrl = [command.arguments objectAtIndex:1]; + GAIDictionaryBuilder* openParams = [[GAIDictionaryBuilder alloc] init]; + + if (deepLinkUrl && deepLinkUrl != (NSString *)[NSNull null]) { + [[openParams setCampaignParametersFromUrl:deepLinkUrl] build]; + } + + bool newSession = [[command argumentAtIndex:2 withDefault:@(NO)] boolValue]; + if(newSession){ + [openParams set:@"start" forKey:kGAISessionControl]; + } + + NSDictionary *hitParamsDict = [openParams build]; + + [tracker set:kGAIScreenName value:screenName]; + [tracker send:[[[GAIDictionaryBuilder createScreenView] setAll:hitParamsDict] build]]; + + pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK]; + [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId]; + }]; +} + +- (void) trackTiming: (CDVInvokedUrlCommand*)command +{ + CDVPluginResult* pluginResult = nil; + + if ( ! _trackerStarted) { + pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Tracker not started"]; + [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId]; + return; + } + + [self.commandDelegate runInBackground:^{ + CDVPluginResult* pluginResult = nil; + + NSString *category = nil; + NSNumber *intervalInMilliseconds = nil; + NSString *name = nil; + NSString *label = nil; + + if ([command.arguments count] > 0) + category = [command.arguments objectAtIndex:0]; + + if ([command.arguments count] > 1) + intervalInMilliseconds = [command.arguments objectAtIndex:1]; + + if ([command.arguments count] > 2) + name = [command.arguments objectAtIndex:2]; + + if ([command.arguments count] > 3) + label = [command.arguments objectAtIndex:3]; + + id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker]; + + [self addCustomDimensionsToTracker:tracker]; + + [tracker send:[[GAIDictionaryBuilder + createTimingWithCategory: category //required + interval: intervalInMilliseconds //required + name: name + label: label] build]]; + + pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK]; + [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId]; + }]; +} + +- (void) addTransaction: (CDVInvokedUrlCommand*)command +{ + CDVPluginResult* pluginResult = nil; + + if ( ! _trackerStarted) { + pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Tracker not started"]; + [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId]; + return; + } + + [self.commandDelegate runInBackground:^{ + CDVPluginResult* pluginResult = nil; + + NSString *transactionId = nil; + NSString *affiliation = nil; + NSNumber *revenue = nil; + NSNumber *tax = nil; + NSNumber *shipping = nil; + NSString *currencyCode = nil; + + + if ([command.arguments count] > 0) + transactionId = [command.arguments objectAtIndex:0]; + + if ([command.arguments count] > 1) + affiliation = [command.arguments objectAtIndex:1]; + + if ([command.arguments count] > 2) + revenue = [command.arguments objectAtIndex:2]; + + if ([command.arguments count] > 3) + tax = [command.arguments objectAtIndex:3]; + + if ([command.arguments count] > 4) + shipping = [command.arguments objectAtIndex:4]; + + if ([command.arguments count] > 5) + currencyCode = [command.arguments objectAtIndex:5]; + + id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker]; + + + [tracker send:[[GAIDictionaryBuilder createTransactionWithId:transactionId // (NSString) Transaction ID + affiliation:affiliation // (NSString) Affiliation + revenue:revenue // (NSNumber) Order revenue (including tax and shipping) + tax:tax // (NSNumber) Tax + shipping:shipping // (NSNumber) Shipping + currencyCode:currencyCode] build]]; // (NSString) Currency code + + + pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK]; + [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId]; + }]; +} + + + +- (void) addTransactionItem: (CDVInvokedUrlCommand*)command +{ + CDVPluginResult* pluginResult = nil; + + if ( ! _trackerStarted) { + pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Tracker not started"]; + [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId]; + return; + } + + [self.commandDelegate runInBackground:^{ + + CDVPluginResult* pluginResult = nil; + NSString *transactionId = nil; + NSString *name = nil; + NSString *sku = nil; + NSString *category = nil; + NSNumber *price = nil; + NSNumber *quantity = nil; + NSString *currencyCode = nil; + + + if ([command.arguments count] > 0) + transactionId = [command.arguments objectAtIndex:0]; + + if ([command.arguments count] > 1) + name = [command.arguments objectAtIndex:1]; + + if ([command.arguments count] > 2) + sku = [command.arguments objectAtIndex:2]; + + if ([command.arguments count] > 3) + category = [command.arguments objectAtIndex:3]; + + if ([command.arguments count] > 4) + price = [command.arguments objectAtIndex:4]; + + if ([command.arguments count] > 5) + quantity = [command.arguments objectAtIndex:5]; + + if ([command.arguments count] > 6) + currencyCode = [command.arguments objectAtIndex:6]; + + id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker]; + + + [tracker send:[[GAIDictionaryBuilder createItemWithTransactionId:transactionId // (NSString) Transaction ID + name:name // (NSString) Product Name + sku:sku // (NSString) Product SKU + category:category // (NSString) Product category + price:price // (NSNumber) Product price + quantity:quantity // (NSNumber) Product quantity + currencyCode:currencyCode] build]]; // (NSString) Currency code + + + pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK]; + [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId]; + }]; +} + +@end diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/libAdIdAccess.a b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/libAdIdAccess.a Binary files differnew file mode 100644 index 00000000..9813beaf --- /dev/null +++ b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/libAdIdAccess.a diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/libGoogleAnalyticsServices.a b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/libGoogleAnalyticsServices.a Binary files differnew file mode 100644 index 00000000..45ca87e8 --- /dev/null +++ b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/libGoogleAnalyticsServices.a diff --git a/StoneIsland/platforms/ios/Stone Island/config.xml b/StoneIsland/platforms/ios/Stone Island/config.xml index 19f7b057..89ade77f 100755 --- a/StoneIsland/platforms/ios/Stone Island/config.xml +++ b/StoneIsland/platforms/ios/Stone Island/config.xml @@ -86,4 +86,7 @@ <preference name="SplashMaintainAspectRatio" value="true" /> <preference name="ShowSplashScreenSpinner" value="false" /> <preference name="AutoHideSplashScreen" value="false" /> + <feature name="UniversalAnalytics"> + <param name="ios-package" value="UniversalAnalyticsPlugin" /> + </feature> </widget> diff --git a/StoneIsland/platforms/ios/frameworks.json b/StoneIsland/platforms/ios/frameworks.json index 6cb97880..dc881b1d 100644 --- a/StoneIsland/platforms/ios/frameworks.json +++ b/StoneIsland/platforms/ios/frameworks.json @@ -2,10 +2,14 @@ "AudioToolbox.framework": 1, "CoreLocation.framework": 1, "Social.framework": 1, - "SystemConfiguration.framework": 1, + "SystemConfiguration.framework": 2, "CoreTelephony.framework": 1, "MessageUI.framework": 1, "AddressBook.framework": 1, "libsqlite3.tbd": 1, - "libz.tbd": 1 + "libz.tbd": 1, + "CoreData.framework": 1, + "AdSupport.framework": 1, + "libz.dylib": 1, + "libsqlite3.dylib": 1 }
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/ios.json b/StoneIsland/platforms/ios/ios.json index 0a8ab85c..800f8e02 100644 --- a/StoneIsland/platforms/ios/ios.json +++ b/StoneIsland/platforms/ios/ios.json @@ -47,6 +47,10 @@ { "xml": "<feature name=\"PushNotification\"><param name=\"ios-package\" value=\"PushPlugin\" /></feature>", "count": 1 + }, + { + "xml": "<feature name=\"UniversalAnalytics\"><param name=\"ios-package\" value=\"UniversalAnalyticsPlugin\" /></feature>", + "count": 1 } ] } @@ -148,6 +152,9 @@ "phonegap-plugin-push": { "SENDER_ID": "XXXXXXX", "PACKAGE_NAME": "us.okfoc.stoneisland" + }, + "cordova-plugin-google-analytics": { + "PACKAGE_NAME": "us.okfoc.stoneisland" } }, "dependent_plugins": {}, @@ -282,6 +289,15 @@ "clobbers": [ "PushNotification" ] + }, + { + "id": "cordova-plugin-google-analytics.UniversalAnalytics", + "file": "plugins/cordova-plugin-google-analytics/www/analytics.js", + "pluginId": "cordova-plugin-google-analytics", + "clobbers": [ + "analytics", + "ga" + ] } ], "plugin_metadata": { @@ -297,6 +313,7 @@ "cordova-plugin-whitelist": "1.3.0", "cordova-plugin-x-socialsharing": "5.1.3", "ionic-plugin-keyboard": "2.2.1", - "phonegap-plugin-push": "1.9.2" + "phonegap-plugin-push": "1.9.2", + "cordova-plugin-google-analytics": "1.8.3" } }
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/platform_www/cordova_plugins.js b/StoneIsland/platforms/ios/platform_www/cordova_plugins.js index 4c67a219..878291ea 100644 --- a/StoneIsland/platforms/ios/platform_www/cordova_plugins.js +++ b/StoneIsland/platforms/ios/platform_www/cordova_plugins.js @@ -130,6 +130,15 @@ module.exports = [ "clobbers": [ "PushNotification" ] + }, + { + "id": "cordova-plugin-google-analytics.UniversalAnalytics", + "file": "plugins/cordova-plugin-google-analytics/www/analytics.js", + "pluginId": "cordova-plugin-google-analytics", + "clobbers": [ + "analytics", + "ga" + ] } ]; module.exports.metadata = @@ -147,7 +156,8 @@ module.exports.metadata = "cordova-plugin-whitelist": "1.3.0", "cordova-plugin-x-socialsharing": "5.1.3", "ionic-plugin-keyboard": "2.2.1", - "phonegap-plugin-push": "1.9.2" + "phonegap-plugin-push": "1.9.2", + "cordova-plugin-google-analytics": "1.8.3" }; // BOTTOM OF METADATA });
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/platform_www/plugins/cordova-plugin-google-analytics/www/analytics.js b/StoneIsland/platforms/ios/platform_www/plugins/cordova-plugin-google-analytics/www/analytics.js new file mode 100644 index 00000000..b46b19ea --- /dev/null +++ b/StoneIsland/platforms/ios/platform_www/plugins/cordova-plugin-google-analytics/www/analytics.js @@ -0,0 +1,130 @@ +cordova.define("cordova-plugin-google-analytics.UniversalAnalytics", function(require, exports, module) { +function UniversalAnalyticsPlugin() {} + +UniversalAnalyticsPlugin.prototype.startTrackerWithId = function(id, dispatchPeriod, success, error) { + if (typeof dispatchPeriod === 'undefined' || dispatchPeriod === null) { + dispatchPeriod = 30; + } else if (typeof dispatchPeriod === 'function' && typeof error === 'undefined') { + // Called without dispatchPeriod but with a callback. + // Looks like the original API was used so shift parameters over to remain compatible. + error = success; + success = dispatchPeriod; + dispatchPeriod = 30; + } + cordova.exec(success, error, 'UniversalAnalytics', 'startTrackerWithId', [id, dispatchPeriod]); +}; + +UniversalAnalyticsPlugin.prototype.setAllowIDFACollection = function(enable, success, error) { + cordova.exec(success, error, 'UniversalAnalytics', 'setAllowIDFACollection', [enable]); +}; + +UniversalAnalyticsPlugin.prototype.setUserId = function(id, success, error) { + cordova.exec(success, error, 'UniversalAnalytics', 'setUserId', [id]); +}; + +UniversalAnalyticsPlugin.prototype.setAnonymizeIp = function(anonymize, success, error) { + cordova.exec(success, error, 'UniversalAnalytics', 'setAnonymizeIp', [anonymize]); +}; + +UniversalAnalyticsPlugin.prototype.setOptOut = function(optout, success, error) { + cordova.exec(success, error, 'UniversalAnalytics', 'setOptOut', [optout]); +}; + +UniversalAnalyticsPlugin.prototype.setAppVersion = function(version, success, error) { + cordova.exec(success, error, 'UniversalAnalytics', 'setAppVersion', [version]); +}; + +UniversalAnalyticsPlugin.prototype.getVar = function(variable, success, error) { + cordova.exec(success, error, 'UniversalAnalytics', 'getVar', [variable]); +}; + +UniversalAnalyticsPlugin.prototype.setVar = function(variable, value, success, error) { + cordova.exec(success, error, 'UniversalAnalytics', 'setVar', [variable, value]); +}; + +UniversalAnalyticsPlugin.prototype.dispatch = function(success, error) { + cordova.exec(success, error, 'UniversalAnalytics', 'dispatch', []); +}; + +/* enables verbose logging */ +UniversalAnalyticsPlugin.prototype.debugMode = function(success, error) { + cordova.exec(success, error, 'UniversalAnalytics', 'debugMode', []); +}; + +UniversalAnalyticsPlugin.prototype.trackMetric = function(key, value, success, error) { + cordova.exec(success, error, 'UniversalAnalytics', 'trackMetric', [key, value]); +}; + +UniversalAnalyticsPlugin.prototype.trackView = function(screen, campaignUrl, newSession, success, error) { + if (typeof campaignUrl === 'undefined' || campaignUrl === null) { + campaignUrl = ''; + } + + if (typeof newSession === 'undefined' || newSession === null) { + newSession = false; + } + + cordova.exec(success, error, 'UniversalAnalytics', 'trackView', [screen, campaignUrl, newSession]); +}; + +UniversalAnalyticsPlugin.prototype.addCustomDimension = function(key, value, success, error) { + if (typeof key !== "number") { + throw Error("key must be a valid integer not '" + typeof key + "'"); + } + cordova.exec(success, error, 'UniversalAnalytics', 'addCustomDimension', [key, value]); +}; + +UniversalAnalyticsPlugin.prototype.trackEvent = function(category, action, label, value, newSession, success, error) { + if (typeof label === 'undefined' || label === null) { + label = ''; + } + if (typeof value === 'undefined' || value === null) { + value = 0; + } + + if (typeof newSession === 'undefined' || newSession === null) { + newSession = false; + } + + cordova.exec(success, error, 'UniversalAnalytics', 'trackEvent', [category, action, label, value, newSession]); +}; + +/** + * https://developers.google.com/analytics/devguides/collection/android/v3/exceptions + */ +UniversalAnalyticsPlugin.prototype.trackException = function(description, fatal, success, error) { + cordova.exec(success, error, 'UniversalAnalytics', 'trackException', [description, fatal]); +}; + +UniversalAnalyticsPlugin.prototype.trackTiming = function(category, intervalInMilliseconds, name, label, success, error) { + if (typeof intervalInMilliseconds === 'undefined' || intervalInMilliseconds === null) { + intervalInMilliseconds = 0; + } + if (typeof name === 'undefined' || name === null) { + name = ''; + } + if (typeof label === 'undefined' || label === null) { + label = ''; + } + + cordova.exec(success, error, 'UniversalAnalytics', 'trackTiming', [category, intervalInMilliseconds, name, label]); +}; + +/* Google Analytics e-Commerce Tracking */ +/* https://developers.google.com/analytics/devguides/collection/analyticsjs/ecommerce */ +UniversalAnalyticsPlugin.prototype.addTransaction = function(transactionId, affiliation, revenue, tax, shipping, currencyCode, success, error) { + cordova.exec(success, error, 'UniversalAnalytics', 'addTransaction', [transactionId, affiliation, revenue, tax, shipping, currencyCode]); +}; + +UniversalAnalyticsPlugin.prototype.addTransactionItem = function(transactionId, name ,sku, category, price, quantity, currencyCode, success, error) { + cordova.exec(success, error, 'UniversalAnalytics', 'addTransactionItem', [transactionId, name ,sku, category, price, quantity, currencyCode]); +}; + +/* automatic uncaught exception tracking */ +UniversalAnalyticsPlugin.prototype.enableUncaughtExceptionReporting = function (enable, success, error) { + cordova.exec(success, error, 'UniversalAnalytics', 'enableUncaughtExceptionReporting', [enable]); +}; + +module.exports = new UniversalAnalyticsPlugin(); + +}); diff --git a/StoneIsland/platforms/ios/www/cordova_plugins.js b/StoneIsland/platforms/ios/www/cordova_plugins.js index 4c67a219..878291ea 100644 --- a/StoneIsland/platforms/ios/www/cordova_plugins.js +++ b/StoneIsland/platforms/ios/www/cordova_plugins.js @@ -130,6 +130,15 @@ module.exports = [ "clobbers": [ "PushNotification" ] + }, + { + "id": "cordova-plugin-google-analytics.UniversalAnalytics", + "file": "plugins/cordova-plugin-google-analytics/www/analytics.js", + "pluginId": "cordova-plugin-google-analytics", + "clobbers": [ + "analytics", + "ga" + ] } ]; module.exports.metadata = @@ -147,7 +156,8 @@ module.exports.metadata = "cordova-plugin-whitelist": "1.3.0", "cordova-plugin-x-socialsharing": "5.1.3", "ionic-plugin-keyboard": "2.2.1", - "phonegap-plugin-push": "1.9.2" + "phonegap-plugin-push": "1.9.2", + "cordova-plugin-google-analytics": "1.8.3" }; // BOTTOM OF METADATA });
\ No newline at end of file diff --git a/StoneIsland/platforms/ios/www/plugins/cordova-plugin-google-analytics/www/analytics.js b/StoneIsland/platforms/ios/www/plugins/cordova-plugin-google-analytics/www/analytics.js new file mode 100644 index 00000000..b46b19ea --- /dev/null +++ b/StoneIsland/platforms/ios/www/plugins/cordova-plugin-google-analytics/www/analytics.js @@ -0,0 +1,130 @@ +cordova.define("cordova-plugin-google-analytics.UniversalAnalytics", function(require, exports, module) { +function UniversalAnalyticsPlugin() {} + +UniversalAnalyticsPlugin.prototype.startTrackerWithId = function(id, dispatchPeriod, success, error) { + if (typeof dispatchPeriod === 'undefined' || dispatchPeriod === null) { + dispatchPeriod = 30; + } else if (typeof dispatchPeriod === 'function' && typeof error === 'undefined') { + // Called without dispatchPeriod but with a callback. + // Looks like the original API was used so shift parameters over to remain compatible. + error = success; + success = dispatchPeriod; + dispatchPeriod = 30; + } + cordova.exec(success, error, 'UniversalAnalytics', 'startTrackerWithId', [id, dispatchPeriod]); +}; + +UniversalAnalyticsPlugin.prototype.setAllowIDFACollection = function(enable, success, error) { + cordova.exec(success, error, 'UniversalAnalytics', 'setAllowIDFACollection', [enable]); +}; + +UniversalAnalyticsPlugin.prototype.setUserId = function(id, success, error) { + cordova.exec(success, error, 'UniversalAnalytics', 'setUserId', [id]); +}; + +UniversalAnalyticsPlugin.prototype.setAnonymizeIp = function(anonymize, success, error) { + cordova.exec(success, error, 'UniversalAnalytics', 'setAnonymizeIp', [anonymize]); +}; + +UniversalAnalyticsPlugin.prototype.setOptOut = function(optout, success, error) { + cordova.exec(success, error, 'UniversalAnalytics', 'setOptOut', [optout]); +}; + +UniversalAnalyticsPlugin.prototype.setAppVersion = function(version, success, error) { + cordova.exec(success, error, 'UniversalAnalytics', 'setAppVersion', [version]); +}; + +UniversalAnalyticsPlugin.prototype.getVar = function(variable, success, error) { + cordova.exec(success, error, 'UniversalAnalytics', 'getVar', [variable]); +}; + +UniversalAnalyticsPlugin.prototype.setVar = function(variable, value, success, error) { + cordova.exec(success, error, 'UniversalAnalytics', 'setVar', [variable, value]); +}; + +UniversalAnalyticsPlugin.prototype.dispatch = function(success, error) { + cordova.exec(success, error, 'UniversalAnalytics', 'dispatch', []); +}; + +/* enables verbose logging */ +UniversalAnalyticsPlugin.prototype.debugMode = function(success, error) { + cordova.exec(success, error, 'UniversalAnalytics', 'debugMode', []); +}; + +UniversalAnalyticsPlugin.prototype.trackMetric = function(key, value, success, error) { + cordova.exec(success, error, 'UniversalAnalytics', 'trackMetric', [key, value]); +}; + +UniversalAnalyticsPlugin.prototype.trackView = function(screen, campaignUrl, newSession, success, error) { + if (typeof campaignUrl === 'undefined' || campaignUrl === null) { + campaignUrl = ''; + } + + if (typeof newSession === 'undefined' || newSession === null) { + newSession = false; + } + + cordova.exec(success, error, 'UniversalAnalytics', 'trackView', [screen, campaignUrl, newSession]); +}; + +UniversalAnalyticsPlugin.prototype.addCustomDimension = function(key, value, success, error) { + if (typeof key !== "number") { + throw Error("key must be a valid integer not '" + typeof key + "'"); + } + cordova.exec(success, error, 'UniversalAnalytics', 'addCustomDimension', [key, value]); +}; + +UniversalAnalyticsPlugin.prototype.trackEvent = function(category, action, label, value, newSession, success, error) { + if (typeof label === 'undefined' || label === null) { + label = ''; + } + if (typeof value === 'undefined' || value === null) { + value = 0; + } + + if (typeof newSession === 'undefined' || newSession === null) { + newSession = false; + } + + cordova.exec(success, error, 'UniversalAnalytics', 'trackEvent', [category, action, label, value, newSession]); +}; + +/** + * https://developers.google.com/analytics/devguides/collection/android/v3/exceptions + */ +UniversalAnalyticsPlugin.prototype.trackException = function(description, fatal, success, error) { + cordova.exec(success, error, 'UniversalAnalytics', 'trackException', [description, fatal]); +}; + +UniversalAnalyticsPlugin.prototype.trackTiming = function(category, intervalInMilliseconds, name, label, success, error) { + if (typeof intervalInMilliseconds === 'undefined' || intervalInMilliseconds === null) { + intervalInMilliseconds = 0; + } + if (typeof name === 'undefined' || name === null) { + name = ''; + } + if (typeof label === 'undefined' || label === null) { + label = ''; + } + + cordova.exec(success, error, 'UniversalAnalytics', 'trackTiming', [category, intervalInMilliseconds, name, label]); +}; + +/* Google Analytics e-Commerce Tracking */ +/* https://developers.google.com/analytics/devguides/collection/analyticsjs/ecommerce */ +UniversalAnalyticsPlugin.prototype.addTransaction = function(transactionId, affiliation, revenue, tax, shipping, currencyCode, success, error) { + cordova.exec(success, error, 'UniversalAnalytics', 'addTransaction', [transactionId, affiliation, revenue, tax, shipping, currencyCode]); +}; + +UniversalAnalyticsPlugin.prototype.addTransactionItem = function(transactionId, name ,sku, category, price, quantity, currencyCode, success, error) { + cordova.exec(success, error, 'UniversalAnalytics', 'addTransactionItem', [transactionId, name ,sku, category, price, quantity, currencyCode]); +}; + +/* automatic uncaught exception tracking */ +UniversalAnalyticsPlugin.prototype.enableUncaughtExceptionReporting = function (enable, success, error) { + cordova.exec(success, error, 'UniversalAnalytics', 'enableUncaughtExceptionReporting', [enable]); +}; + +module.exports = new UniversalAnalyticsPlugin(); + +}); diff --git a/StoneIsland/plugins/android.json b/StoneIsland/plugins/android.json index 326cd38e..e3f00921 100755 --- a/StoneIsland/plugins/android.json +++ b/StoneIsland/plugins/android.json @@ -47,6 +47,9 @@ "phonegap-plugin-push": { "SENDER_ID": "XXXXXXX", "PACKAGE_NAME": "us.okfoc.stoneisland" + }, + "cordova-plugin-google-analytics": { + "PACKAGE_NAME": "us.okfoc.stoneisland" } }, "dependent_plugins": { diff --git a/StoneIsland/plugins/cordova-plugin-google-analytics/LICENSE b/StoneIsland/plugins/cordova-plugin-google-analytics/LICENSE new file mode 100644 index 00000000..bb1eb977 --- /dev/null +++ b/StoneIsland/plugins/cordova-plugin-google-analytics/LICENSE @@ -0,0 +1,20 @@ +The MIT License (MIT) + +Copyright (c) 2013 danwilson + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/StoneIsland/plugins/cordova-plugin-google-analytics/README.md b/StoneIsland/plugins/cordova-plugin-google-analytics/README.md new file mode 100644 index 00000000..52433004 --- /dev/null +++ b/StoneIsland/plugins/cordova-plugin-google-analytics/README.md @@ -0,0 +1,203 @@ +google-analytics-plugin +======================= +[](https://www.npmjs.com/package/cordova-plugin-google-analytics) +[](https://www.npmjs.com/package/cordova-plugin-google-analytics) +[](http://opensource.org/licenses/MIT) + +Cordova (PhoneGap) 3.0+ Plugin to connect to Google's native Universal Analytics SDK + +Prerequisites: +* A Cordova 3.0+ project for iOS, Android, browser (PWA), and/or Windows Phone 8 +* A Mobile App property through the Google Analytics Admin Console +* (Android) Google Play Services SDK installed via [Android SDK Manager](https://developer.android.com/sdk/installing/adding-packages.html) + +# Installing + +This plugin follows the Cordova 3.0+ plugin spec, so it can be installed through the Cordova CLI in your existing Cordova project: +```bash +cordova plugin add https://github.com/danwilson/google-analytics-plugin.git +``` + +This plugin is also available on npm if you are using Cordova 5.0+: +```bash +cordova plugin add cordova-plugin-google-analytics +``` + +... OR the Cordova Plugin Registry if you are using a version of Cordova before 5.0 (while it remains open, as it is planning to shut down soon due to the move to npm): +```bash +cordova plugin add com.danielcwilson.plugins.googleanalytics +``` + +*Important Note* If the latest versions (0.8.0+) of this plugin are not working for you with Android on Cordova 5.0+, please try the suggestions in [Issues 123](https://github.com/danwilson/google-analytics-plugin/issues/123#issuecomment-151145095). Google Play Services has been very confusing to integrate, but in recent months it has been simplified. This plugin uses the new simpler way (including it as a framework instead of bundling it which can conflict with other plugins bundling it), but if you previously installed this plugin some old files might still be lingering. + +The plugin.xml file will add the Google Analytics SDK files for Android, iOS, browser (PWA) and/or Windows Phone 8. Follow [Google's steps](#sdk-files) if you need to update these later. Also make sure to review the Google Analytics [terms](http://www.google.com/analytics/terms/us.html) and [SDK Policy](https://developers.google.com/analytics/devguides/collection/protocol/policy) + +If you are not using the CLI, follow the steps in the section [Installing Without the CLI](#nocli) + +Windows Phone users have to manually add the [Google Analytics SDK for Windows 8 and Windows Phone](https://googleanalyticssdk.codeplex.com/) to your solution. To do this, just open your Cordova solution in Visual Studio, and add the [GoogleAnalyticsSDK package via NuGet](http://nuget.org/packages/GoogleAnalyticsSDK). This plugin requires v1.3.0 or higher. + +# Release note + +v1.0.0 -- api change from ```window.analytics``` to ```window.ga```, 'analytics' is deprecated since 1.0.0 and you should use the new api 'ga', +because in the next release we are removing the analytics. + +v1.7.x -- since this version there are new parameters in some of the old methods like `startTrackerWithId('UA-XXXX-YY', 30)` +and this is causing errors for those who are using the ionic 2(ionic-native) or ionic 1 (ngCordova); +these wrapper interfaces don't have the new parameters at the time we did the changes; so please update you ionic framework to the lastest version. + +v1.7.11 -- since this version there is back compatibility with the new and old parameters in the method `startTrackerWithId('UA-XXXX-YY', 30)` to avoid loading issues reported. + + +# JavaScript Usage + +**All the following methods accept optional success and error callbacks after all other available parameters.** + +In your 'deviceready' handler, set up your Analytics tracker: +* `window.ga.startTrackerWithId('UA-XXXX-YY', 30)` where UA-XXXX-YY is your Google Analytics Mobile App property and 30 is the dispatch period (optional) + +To track a Screen (PageView): +* `window.ga.trackView('Screen Title')` + +To track a Screen (PageView) w/ campaign details: +* `window.ga.trackView('Screen Title', 'my-scheme://content/1111?utm_source=google&utm_campaign=my-campaign')` + +To track a Screen (PageView) and create a new session: +* `window.ga.trackView('Screen Title', '', true)` + +To track an Event: +* `window.ga.trackEvent('Category', 'Action', 'Label', Value)` Label and Value are optional, Value is numeric + +To track an Event and create a new session: +* `window.ga.trackEvent('Category', 'Action', 'Label', Value, true)` Label, Value and newSession are optional, Value is numeric, newSession is true/false + +To track custom metrics: +* `window.ga.trackMetric('key', Value)` Value is optional + +To track an Exception: +* `window.ga.trackException('Description', Fatal)` where Fatal is boolean + +To track User Timing (App Speed): +* `window.ga.trackTiming('Category', IntervalInMilliseconds, 'Variable', 'Label')` where IntervalInMilliseconds is numeric + +To add a Transaction (Ecommerce) +* `window.ga.addTransaction('ID', 'Affiliation', Revenue, Tax, Shipping, 'Currency Code')` where Revenue, Tax, and Shipping are numeric + +To add a Transaction Item (Ecommerce) +* `window.ga.addTransactionItem('ID', 'Name', 'SKU', 'Category', Price, Quantity, 'Currency Code')` where Price and Quantity are numeric + +To add a Custom Dimension +* `window.ga.addCustomDimension('Key', 'Value', success, error)` +* Key should be integer index of the dimension i.e. send `1` instead of `dimension1` for the first custom dimension you are tracking. +* e.g. `window.ga.addCustomDimension(1, 'Value', success, error)` + +To set a UserId: +* `window.ga.setUserId('my-user-id')` + +To set a specific app version: +* `window.ga.setAppVersion('1.33.7')` + +To get a specific variable using this key list https://developers.google.com/analytics/devguides/collection/protocol/v1/parameters: +for example to get campaign name: +* `window.ga.getVar('cn', function(result){ console.log(result);})` + +To set a specific variable using this key list https://developers.google.com/analytics/devguides/collection/protocol/v1/parameters: +for example to set session control: +* `window.ga.setVar('sc', 'end', function(result){ console.log(result);})` + +To manually dispatch any data (this is not implemented in browser platform): +* `window.ga.dispatch()` + +To set a anonymize Ip address: +* `window.ga.setAnonymizeIp(true)` + +To set Opt-out: +* `window.ga.setOptOut(true)` + +To enabling Advertising Features in Google Analytics allows you to take advantage of Remarketing, Demographics & Interests reports, and more: +* `window.ga.setAllowIDFACollection(true)` + +To enable verbose logging: +* `window.ga.debugMode()` + +To enable/disable automatic reporting of uncaught exceptions +* `window.ga.enableUncaughtExceptionReporting(Enable, success, error)` where Enable is boolean + +# Example use ionic 2 (Ionic Native) +```shell +npm i --save @ionic-native/google-analytics +``` +```javascript +import { GoogleAnalytics } from '@ionic-native/google-analytics'; +import { Platform } from 'ionic-angular'; + +... + + constructor(private ga: GoogleAnalytics, private platform: Platform) { } + + initializeApp() { + this.platform.ready().then(() => { + this.ga.startTrackerWithId('UA-00000000-0') + .then(() => { + console.log('Google analytics is ready now'); + //the component is ready and you can call any method here + this.ga.debugMode(); + this.ga.setAllowIDFACollection(true); + }) + .catch(e => console.log('Error starting GoogleAnalytics', e)); + }); + } +``` + +# Installing Without the CLI <a name="nocli"></a> + +Copy the files manually into your project and add the following to your config.xml files: +```xml +<feature name="UniversalAnalytics"> + <param name="ios-package" value="UniversalAnalyticsPlugin" /> +</feature> +``` +```xml +<feature name="UniversalAnalytics"> + <param name="android-package" value="com.danielcwilson.plugins.analytics.UniversalAnalyticsPlugin" /> +</feature> +``` +```xml +<feature name="UniversalAnalytics"> + <param name="wp-package" value="UniversalAnalyticsPlugin" /> +</feature> +``` +<a name="sdk-files"></a> +You also will need to manually add the Google Analytics SDK files: +* Download the Google Analytics SDK 3.0 for [iOS](https://developers.google.com/analytics/devguides/collection/ios/) and/or [Android](https://developers.google.com/analytics/devguides/collection/android/) +* For iOS, add the downloaded Google Analytics SDK header files and libraries according to the [Getting Started](https://developers.google.com/analytics/devguides/collection/ios/v3) documentation +* For Android, add `libGoogleAnalyticsServices.jar` to your Cordova Android project's `/libs` directory and build path +* For Windows Phone, add the [GoogleAnalyticsSDK package via NuGet](http://nuget.org/packages/GoogleAnalyticsSDK) + +# Integrating with Lavaca + +The `lavaca` directory includes a component that can be added to a <a href="http://getlavaca.com">Lavaca</a> project. It offers a way to use the web `analytics.js` when the app is running in the browser and not packaged as Cordova. + +* Copy `AnalyticsService.js` to your Lavaca project (I create a directory under `js/app` called `data`). +* In your config files (`local.json`, `staging.json`, `production.js`) create properties called `google_analytics_id` (for the Mobile App UA property) and `google_analytics_web_id` (for the Web UA property) and set the appropriate IDs or leave blank as needed. +* In any file you want to track screen views or events, require AnalyticsService and use the methods provided. + +```javascript +var analyticsService = require('app/data/AnalyticsService'); + +analyticsService.trackView('Home'); +``` + +# Browser (PWA) + +For browser (PWA), people who want to use the plugin in a website that has already integrated google analytics needs +to make sure that they remove the google analytics snippet from the head section of the page and change the global `ga` +object name to something else. The plugin uses `nativeGa` instead. This can be changed by the following code. + +```js +// insert this in your head +<script> +window['GoogleAnalyticsObject'] = 'fooGa'; +</script> +``` + +The plugin will pick up the new name. diff --git a/StoneIsland/plugins/cordova-plugin-google-analytics/android/UniversalAnalyticsPlugin.java b/StoneIsland/plugins/cordova-plugin-google-analytics/android/UniversalAnalyticsPlugin.java new file mode 100644 index 00000000..23c20023 --- /dev/null +++ b/StoneIsland/plugins/cordova-plugin-google-analytics/android/UniversalAnalyticsPlugin.java @@ -0,0 +1,469 @@ +package com.danielcwilson.plugins.analytics; + +import com.google.android.gms.analytics.GoogleAnalytics; +import com.google.android.gms.analytics.Logger.LogLevel; +import com.google.android.gms.analytics.HitBuilders; +import com.google.android.gms.analytics.Tracker; + +import org.apache.cordova.CordovaPlugin; +import org.apache.cordova.CallbackContext; + +import org.json.JSONArray; +import org.json.JSONException; + +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.HashMap; +import java.util.Map.Entry; + +public class UniversalAnalyticsPlugin extends CordovaPlugin { + public static final String START_TRACKER = "startTrackerWithId"; + public static final String TRACK_VIEW = "trackView"; + public static final String TRACK_EVENT = "trackEvent"; + public static final String TRACK_EXCEPTION = "trackException"; + public static final String TRACK_TIMING = "trackTiming"; + public static final String TRACK_METRIC = "trackMetric"; + public static final String ADD_DIMENSION = "addCustomDimension"; + public static final String ADD_TRANSACTION = "addTransaction"; + public static final String ADD_TRANSACTION_ITEM = "addTransactionItem"; + + public static final String SET_ALLOW_IDFA_COLLECTION = "setAllowIDFACollection"; + public static final String SET_USER_ID = "setUserId"; + public static final String SET_ANONYMIZE_IP = "setAnonymizeIp"; + public static final String SET_OPT_OUT = "setOptOut"; + public static final String SET_APP_VERSION = "setAppVersion"; + public static final String GET_VAR = "getVar"; + public static final String SET_VAR = "setVar"; + public static final String DISPATCH = "dispatch"; + public static final String DEBUG_MODE = "debugMode"; + public static final String ENABLE_UNCAUGHT_EXCEPTION_REPORTING = "enableUncaughtExceptionReporting"; + + public Boolean trackerStarted = false; + public Boolean debugModeEnabled = false; + public HashMap<Integer, String> customDimensions = new HashMap<Integer, String>(); + + public Tracker tracker; + + @Override + public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException { + if (START_TRACKER.equals(action)) { + String id = args.getString(0); + int dispatchPeriod = args.length() > 1 ? args.getInt(1) : 30; + this.startTracker(id, dispatchPeriod, callbackContext); + return true; + } else if (TRACK_VIEW.equals(action)) { + int length = args.length(); + String screen = args.getString(0); + this.trackView(screen, length > 1 && !args.isNull(1) ? args.getString(1) : "", length > 2 && !args.isNull(2) ? args.getBoolean(2) : false, callbackContext); + return true; + } else if (TRACK_EVENT.equals(action)) { + int length = args.length(); + if (length > 0) { + this.trackEvent( + args.getString(0), + length > 1 ? args.getString(1) : "", + length > 2 ? args.getString(2) : "", + length > 3 ? args.getLong(3) : 0, + length > 4 ? args.getBoolean(4) : false, + callbackContext); + } + return true; + } else if (TRACK_EXCEPTION.equals(action)) { + String description = args.getString(0); + Boolean fatal = args.getBoolean(1); + this.trackException(description, fatal, callbackContext); + return true; + } else if (TRACK_TIMING.equals(action)) { + int length = args.length(); + if (length > 0) { + this.trackTiming(args.getString(0), length > 1 ? args.getLong(1) : 0, length > 2 ? args.getString(2) : "", length > 3 ? args.getString(3) : "", callbackContext); + } + return true; + } else if (TRACK_METRIC.equals(action)) { + int length = args.length(); + if (length > 0) { + this.trackMetric(args.getInt(0), length > 1 ? args.getString(1) : "", callbackContext); + } + return true; + } else if (ADD_DIMENSION.equals(action)) { + Integer key = args.getInt(0); + String value = args.getString(1); + this.addCustomDimension(key, value, callbackContext); + return true; + } else if (ADD_TRANSACTION.equals(action)) { + int length = args.length(); + if (length > 0) { + this.addTransaction( + args.getString(0), + length > 1 ? args.getString(1) : "", + length > 2 ? args.getDouble(2) : 0, + length > 3 ? args.getDouble(3) : 0, + length > 4 ? args.getDouble(4) : 0, + length > 5 ? args.getString(5) : null, + callbackContext); + } + return true; + } else if (ADD_TRANSACTION_ITEM.equals(action)) { + int length = args.length(); + if (length > 0) { + this.addTransactionItem( + args.getString(0), + length > 1 ? args.getString(1) : "", + length > 2 ? args.getString(2) : "", + length > 3 ? args.getString(3) : "", + length > 4 ? args.getDouble(4) : 0, + length > 5 ? args.getLong(5) : 0, + length > 6 ? args.getString(6) : null, + callbackContext); + } + return true; + } else if (SET_ALLOW_IDFA_COLLECTION.equals(action)) { + this.setAllowIDFACollection(args.getBoolean(0), callbackContext); + } else if (SET_USER_ID.equals(action)) { + String userId = args.getString(0); + this.setUserId(userId, callbackContext); + } else if (SET_ANONYMIZE_IP.equals(action)) { + boolean anonymize = args.getBoolean(0); + this.setAnonymizeIp(anonymize, callbackContext); + } else if (SET_OPT_OUT.equals(action)) { + boolean optout = args.getBoolean(0); + this.setOptOut(optout, callbackContext); + } else if (SET_APP_VERSION.equals(action)) { + String version = args.getString(0); + this.setAppVersion(version, callbackContext); + } else if (GET_VAR.equals(action)) { + String variable = args.getString(0); + this.getVar(variable, callbackContext); + } else if (SET_VAR.equals(action)) { + String variable = args.getString(0); + String value = args.getString(1); + this.setVar(variable, value, callbackContext); + return true; + } else if (DISPATCH.equals(action)) { + this.dispatch(callbackContext); + return true; + } else if (DEBUG_MODE.equals(action)) { + this.debugMode(callbackContext); + } else if (ENABLE_UNCAUGHT_EXCEPTION_REPORTING.equals(action)) { + Boolean enable = args.getBoolean(0); + this.enableUncaughtExceptionReporting(enable, callbackContext); + } + return false; + } + + private void startTracker(String id, int dispatchPeriod, CallbackContext callbackContext) { + if (null != id && id.length() > 0) { + tracker = GoogleAnalytics.getInstance(this.cordova.getActivity()).newTracker(id); + callbackContext.success("tracker started"); + trackerStarted = true; + GoogleAnalytics.getInstance(this.cordova.getActivity()).setLocalDispatchPeriod(dispatchPeriod); + } else { + callbackContext.error("tracker id is not valid"); + } + } + + private void addCustomDimension(Integer key, String value, CallbackContext callbackContext) { + if (key <= 0) { + callbackContext.error("Expected positive integer argument for key."); + return; + } + + if (null == value || value.length() == 0) { + callbackContext.error("Expected non-empty string argument for value."); + return; + } + + customDimensions.put(key, value); + callbackContext.success("custom dimension started"); + } + + private <T> void addCustomDimensionsToHitBuilder(T builder) { + //unfortunately the base HitBuilders.HitBuilder class is not public, therefore have to use reflection to use + //the common setCustomDimension (int index, String dimension) method + try { + Method builderMethod = builder.getClass().getMethod("setCustomDimension", Integer.TYPE, String.class); + + for (Entry<Integer, String> entry : customDimensions.entrySet()) { + Integer key = entry.getKey(); + String value = entry.getValue(); + try { + builderMethod.invoke(builder, (key), value); + } catch (IllegalArgumentException e) { + } catch (IllegalAccessException e) { + } catch (InvocationTargetException e) { + } + } + } catch (SecurityException e) { + } catch (NoSuchMethodException e) { + } + } + + private void trackView(String screenname, String campaignUrl, boolean newSession, CallbackContext callbackContext) { + if (! trackerStarted ) { + callbackContext.error("Tracker not started"); + return; + } + + if (null != screenname && screenname.length() > 0) { + tracker.setScreenName(screenname); + + HitBuilders.ScreenViewBuilder hitBuilder = new HitBuilders.ScreenViewBuilder(); + addCustomDimensionsToHitBuilder(hitBuilder); + + if(!campaignUrl.equals("")){ + hitBuilder.setCampaignParamsFromUrl(campaignUrl); + } + + if(!newSession) { + tracker.send(hitBuilder.build()); + } else { + tracker.send(hitBuilder.setNewSession().build()); + } + + callbackContext.success("Track Screen: " + screenname); + } else { + callbackContext.error("Expected one non-empty string argument."); + } + } + + private void trackEvent(String category, String action, String label, long value, boolean newSession, CallbackContext callbackContext) { + if (!trackerStarted) { + callbackContext.error("Tracker not started"); + return; + } + + if (null != category && category.length() > 0) { + HitBuilders.EventBuilder hitBuilder = new HitBuilders.EventBuilder(); + addCustomDimensionsToHitBuilder(hitBuilder); + + if(!newSession){ + tracker.send(hitBuilder + .setCategory(category) + .setAction(action) + .setLabel(label) + .setValue(value) + .build()); + } else { + tracker.send(hitBuilder + .setCategory(category) + .setAction(action) + .setLabel(label) + .setValue(value) + .setNewSession() + .build()); + } + + callbackContext.success("Track Event: " + category); + } else { + callbackContext.error("Expected non-empty string arguments."); + } + } + + private void trackMetric(Integer key, String value, CallbackContext callbackContext) { + if (!trackerStarted) { + callbackContext.error("Tracker not started"); + return; + } + + if (key >= 0) { + HitBuilders.ScreenViewBuilder hitBuilder = new HitBuilders.ScreenViewBuilder(); + tracker.send(hitBuilder + .setCustomMetric(key, Float.parseFloat(value)) + .build() + ); + callbackContext.success("Track Metric: " + key + ", value: " + value); + } else { + callbackContext.error("Expected integer key: " + key + ", and string value: " + value); + } + } + + private void trackException(String description, Boolean fatal, CallbackContext callbackContext) { + if (!trackerStarted) { + callbackContext.error("Tracker not started"); + return; + } + + if (null != description && description.length() > 0) { + HitBuilders.ExceptionBuilder hitBuilder = new HitBuilders.ExceptionBuilder(); + addCustomDimensionsToHitBuilder(hitBuilder); + + tracker.send(hitBuilder + .setDescription(description) + .setFatal(fatal) + .build() + ); + callbackContext.success("Track Exception: " + description); + } else { + callbackContext.error("Expected non-empty string arguments."); + } + } + + private void trackTiming(String category, long intervalInMilliseconds, String name, String label, CallbackContext callbackContext) { + if (!trackerStarted) { + callbackContext.error("Tracker not started"); + return; + } + + if (null != category && category.length() > 0) { + HitBuilders.TimingBuilder hitBuilder = new HitBuilders.TimingBuilder(); + addCustomDimensionsToHitBuilder(hitBuilder); + + tracker.send(hitBuilder + .setCategory(category) + .setValue(intervalInMilliseconds) + .setVariable(name) + .setLabel(label) + .build() + ); + callbackContext.success("Track Timing: " + category); + } else { + callbackContext.error("Expected non-empty string arguments."); + } + } + + private void addTransaction(String id, String affiliation, double revenue, double tax, double shipping, String currencyCode, CallbackContext callbackContext) { + if (!trackerStarted) { + callbackContext.error("Tracker not started"); + return; + } + + if (null != id && id.length() > 0) { + HitBuilders.TransactionBuilder hitBuilder = new HitBuilders.TransactionBuilder(); + addCustomDimensionsToHitBuilder(hitBuilder); + + tracker.send(hitBuilder + .setTransactionId(id) + .setAffiliation(affiliation) + .setRevenue(revenue).setTax(tax) + .setShipping(shipping) + .setCurrencyCode(currencyCode) + .build() + ); //Deprecated + callbackContext.success("Add Transaction: " + id); + } else { + callbackContext.error("Expected non-empty ID."); + } + } + + private void addTransactionItem(String id, String name, String sku, String category, double price, long quantity, String currencyCode, CallbackContext callbackContext) { + if (!trackerStarted) { + callbackContext.error("Tracker not started"); + return; + } + + if (null != id && id.length() > 0) { + HitBuilders.ItemBuilder hitBuilder = new HitBuilders.ItemBuilder(); + addCustomDimensionsToHitBuilder(hitBuilder); + + tracker.send(hitBuilder + .setTransactionId(id) + .setName(name) + .setSku(sku) + .setCategory(category) + .setPrice(price) + .setQuantity(quantity) + .setCurrencyCode(currencyCode) + .build() + ); //Deprecated + callbackContext.success("Add Transaction Item: " + id); + } else { + callbackContext.error("Expected non-empty ID."); + } + } + + private void setAllowIDFACollection(Boolean enable, CallbackContext callbackContext) { + if (!trackerStarted) { + callbackContext.error("Tracker not started"); + return; + } + + tracker.enableAdvertisingIdCollection(enable); + callbackContext.success("Enable Advertising Id Collection: " + enable); + } + + private void setVar(String variable, String value, CallbackContext callbackContext) { + if (!trackerStarted) { + callbackContext.error("Tracker not started"); + return; + } + + tracker.set(variable, value); + callbackContext.success("Set variable " + variable + "to " + value); + } + private void dispatch(CallbackContext callbackContext) { + if (!trackerStarted) { + callbackContext.error("Tracker not started"); + return; + } + + GoogleAnalytics.getInstance(this.cordova.getActivity()).dispatchLocalHits(); + callbackContext.success("dispatch sent"); + } + + private void getVar(String variable, CallbackContext callbackContext) { + if (!trackerStarted) { + callbackContext.error("Tracker not started"); + return; + } + + String result = tracker.get(variable); + callbackContext.success(result); + } + + private void debugMode(CallbackContext callbackContext) { + GoogleAnalytics.getInstance(this.cordova.getActivity()).getLogger().setLogLevel(LogLevel.VERBOSE); + + this.debugModeEnabled = true; + callbackContext.success("debugMode enabled"); + } + + private void setAnonymizeIp(boolean anonymize, CallbackContext callbackContext) { + if (!trackerStarted) { + callbackContext.error("Tracker not started"); + return; + } + + tracker.setAnonymizeIp(anonymize); + callbackContext.success("Set AnonymizeIp " + anonymize); + } + + private void setOptOut(boolean optout, CallbackContext callbackContext) { + if (!trackerStarted) { + callbackContext.error("Tracker not started"); + return; + } + + GoogleAnalytics.getInstance(this.cordova.getActivity()).setAppOptOut(optout); + callbackContext.success("Set Opt-Out " + optout); + } + + private void setUserId(String userId, CallbackContext callbackContext) { + if (!trackerStarted) { + callbackContext.error("Tracker not started"); + return; + } + + tracker.set("&uid", userId); + callbackContext.success("Set user id" + userId); + } + + private void setAppVersion(String version, CallbackContext callbackContext) { + if (!trackerStarted) { + callbackContext.error("Tracker not started"); + return; + } + + tracker.set("&av", version); + callbackContext.success("Set app version: " + version); + } + + private void enableUncaughtExceptionReporting(Boolean enable, CallbackContext callbackContext) { + if (!trackerStarted) { + callbackContext.error("Tracker not started"); + return; + } + + tracker.enableExceptionReporting(enable); + callbackContext.success((enable ? "Enabled" : "Disabled") + " uncaught exception reporting"); + } +} diff --git a/StoneIsland/plugins/cordova-plugin-google-analytics/browser/UniversalAnalyticsProxy.js b/StoneIsland/plugins/cordova-plugin-google-analytics/browser/UniversalAnalyticsProxy.js new file mode 100644 index 00000000..a42eee39 --- /dev/null +++ b/StoneIsland/plugins/cordova-plugin-google-analytics/browser/UniversalAnalyticsProxy.js @@ -0,0 +1,253 @@ +function UniversalAnalyticsProxy() { + this._isDebug = false; + this._isEcommerceRequired = false; + this._trackingId = null; + + var namespace = window.GoogleAnalyticsObject || 'nativeGa'; + loadGoogleAnalytics.call(this, namespace); + + bindAll(this, [ + '_ensureEcommerce', + '_uncaughtExceptionHandler', + 'addCustomDimension', + 'addTransaction', + 'addTransactionItem', + 'debugMode', + 'enableUncaughtExceptionReporting', + 'setAllowIDFACollection', + 'setAnonymizeIp', + 'setAppVersion', + 'setOptOut', + 'setUserId', + 'getVar', + 'setVar', + 'startTrackerWithId', + 'trackEvent', + 'trackException', + 'trackMetric', + 'trackTiming', + 'trackView' + ]); +} + +UniversalAnalyticsProxy.prototype = { + startTrackerWithId: wrap(function (trackingId) { + this._trackingId = trackingId; + + this._ga('create', { + trackingId: trackingId, + cookieDomain: 'auto' + }); + this._ga('set', 'appName', document.title); + }), + + setUserId: wrap(function (userId) { + this._ga('set', 'userId', userId); + }), + + setAnonymizeIp: wrap(function (anonymize) { + this._ga('set', 'anonymizeIp', anonymize); + }), + + setOptOut: wrap(function (optout) { + if (!this._trackingId) { + throw new Error('TrackingId not available'); + } + window['ga-disable-' + this._trackingId] = optout; + }), + + setAppVersion: wrap(function (version) { + this._ga('set', 'appVersion', version); + }), + + setAllowIDFACollection: wrap(function (enable) { + // Not supported by browser platofrm + }), + + getVar: function (param, success, error) { + this._ga(function(tracker){ + success(tracker.get(param)); + }); + }, + + setVar: wrap(function(param, value){ + this._ga('set', param, value); + }), + + debugMode: wrap(function () { + this._isDebug = true; + }), + + addCustomDimension: wrap(function (key, value) { + this._ga('set', 'dimension' + key, value); + }), + + trackMetric: wrap(function (key, value) { + this._ga('set', 'metric' + key, value); + }), + + trackEvent: send(function (category, action, label, value, newSession) { + return { + hitType: 'event', + eventCategory: category, + eventAction: action, + eventLabel: label, + eventValue: value + }; + }), + + trackView: send(function (screen) { + return { + hitType: 'screenview', + screenName: screen + }; + }), + + trackException: send(function (description, fatal) { + return { + hitType: 'exception', + exDescription: description, + exFatal: fatal + }; + }), + + trackTiming: send(function (category, intervalInMilliseconds, name, label) { + return { + hitType: 'timing', + timingCategory: category, + timingVar: name, + timingValue: intervalInMilliseconds, + timingLabel: label + }; + }), + + addTransaction: wrap(function (transactionId, affiliation, revenue, tax, shipping, currencyCode) { + this._ensureEcommerce(); + this._ga('ecommerce:addTransaction', { + id: transactionId, + affiliation: affiliation, + revenue: String(revenue), + shipping: String(shipping), + tax: String(tax), + currency: currencyCode + }); + }), + + addTransactionItem: wrap(function (transactionId, name, sku, category, price, quantity, currencyCode) { + this._ensureEcommerce(); + this._ga('ecommerce:addItem', { + id: transactionId, + name: name, + sku: sku, + category: category, + price: String(price), + quantity: String(quantity), + currency: currencyCode + }); + }), + + enableUncaughtExceptionReporting: wrap(function (enable) { + if (enable) { + window.addEventListener('error', this._uncaughtExceptionHandler); + } else { + window.removeEventListener('error', this._uncaughtExceptionHandler); + } + }), + + _ga: function () { + var args = Array.prototype.slice.call(arguments); + if (this._isDebug) { + console.debug('UniversalAnalyticsProxy', args); + } + this._nativeGa.apply(this._nativeGa, args); + }, + + _uncaughtExceptionHandler: function (err) { + this._ga('send', { + hitType: 'exception', + exDescription: err.message, + exFatal: true + }); + }, + + _ensureEcommerce: function() { + if (this._isEcommerceRequired) return; + this._ga('require', 'ecommerce'); + this._isEcommerceRequired = true; + } +}; + +function send(fn) { + return function (success, error, args) { + var command = fn.apply(this, args); + var timeout = setTimeout(function () { + error(new Error('send timeout')); + }, 3000); + + command.hitCallback = function hitCallback(result) { + clearTimeout(timeout); + success(result); + }; + + try { + this._ga('send', command); + } catch (err) { + clearTimeout(timeout); + defer(error, err); + } + }; +} + +function bindAll(that, names) { + names.forEach(function(name) { + if (typeof that[name] === 'function') { + that[name] = that[name].bind(that); + } + }); +} + +/** + * Proceed to the asynchronous loading of Google's analytics.js. + * Initialize `this._nativeGa` once the script is loaded, using + * the `onload` callback of the `script` DOM node. + * + * @param {string} name Reference (global namespace) of the GA object. + */ +function loadGoogleAnalytics(name) { + window.GoogleAnalyticsObject = name; + + window[name] = window[name] || function () { + (window[name].q = window[name].q || []).push(arguments); + }; + window[name].l = 1 * new Date(); + this._nativeGa = window[name]; + + var script = document.createElement('script'); + var scripts = document.getElementsByTagName('script')[0]; + script.src = 'https://www.google-analytics.com/analytics.js'; + script.async = 1; + scripts.parentNode.insertBefore(script, scripts); + + // analytics.js creates a new object once initialized, update our reference + script.onload = (function() { this._nativeGa = window[name]; }).bind(this); +} + +function wrap(fn) { + return function (success, error, args) { + try { + fn.apply(this, args); + setTimeout(success, 0); + } catch (err) { + defer(error, err); + } + }; +} + +function defer(fn) { + var args = Array.prototype.slice.call(arguments, 1); + setTimeout(function () { + fn.apply(null, args); + }, 0); +} + +require('cordova/exec/proxy').add('UniversalAnalytics', new UniversalAnalyticsProxy()); diff --git a/StoneIsland/plugins/cordova-plugin-google-analytics/ios/GAI.h b/StoneIsland/plugins/cordova-plugin-google-analytics/ios/GAI.h new file mode 100644 index 00000000..7f3f7029 --- /dev/null +++ b/StoneIsland/plugins/cordova-plugin-google-analytics/ios/GAI.h @@ -0,0 +1,192 @@ +/*! + @header GAI.h + @abstract Google Analytics iOS SDK Header + @version 3.14 + @copyright Copyright 2015 Google Inc. All rights reserved. + */ + +#import <Foundation/Foundation.h> + +#import "GAILogger.h" +#import "GAITrackedViewController.h" +#import "GAITracker.h" + +typedef NS_ENUM(NSUInteger, GAIDispatchResult) { + kGAIDispatchNoData, + kGAIDispatchGood, + kGAIDispatchError +}; + +/*! Google Analytics product string. */ +extern NSString *const kGAIProduct; + +/*! Google Analytics version string. */ +extern NSString *const kGAIVersion; + +/*! + NSError objects returned by the Google Analytics SDK may have this error domain + to indicate that the error originated in the Google Analytics SDK. + */ +extern NSString *const kGAIErrorDomain; + +/*! Google Analytics error codes. */ +typedef enum { + // This error code indicates that there was no error. Never used. + kGAINoError = 0, + + // This error code indicates that there was a database-related error. + kGAIDatabaseError, + + // This error code indicates that there was a network-related error. + kGAINetworkError, +} GAIErrorCode; + +/*! + Google Analytics iOS top-level class. Provides facilities to create trackers + and set behaviorial flags. + */ +@interface GAI : NSObject + +/*! + For convenience, this class exposes a default tracker instance. + This is initialized to `nil` and will be set to the first tracker that is + instantiated in trackerWithTrackingId:. It may be overridden as desired. + + The GAITrackedViewController class will, by default, use this tracker instance. + */ +@property(nonatomic, assign) id<GAITracker> defaultTracker; + +/*! + The GAILogger to use. + */ +@property(nonatomic, retain) id<GAILogger> logger; + +/*! + When this is true, no tracking information will be gathered; tracking calls + will effectively become no-ops. When set to true, all tracking information that + has not yet been submitted. The value of this flag will be persisted + automatically by the SDK. Developers can optionally use this flag to implement + an opt-out setting in the app to allows users to opt out of Google Analytics + tracking. + + This is set to `NO` the first time the Google Analytics SDK is used on a + device, and is persisted thereafter. + */ +@property(nonatomic, assign) BOOL optOut; + +/*! + If this value is positive, tracking information will be automatically + dispatched every dispatchInterval seconds. Otherwise, tracking information must + be sent manually by calling dispatch. + + By default, this is set to `120`, which indicates tracking information should + be dispatched automatically every 120 seconds. + */ +@property(nonatomic, assign) NSTimeInterval dispatchInterval; + +/*! + When set to true, the SDK will record the currently registered uncaught + exception handler, and then register an uncaught exception handler which tracks + the exceptions that occurred using defaultTracker. If defaultTracker is not + `nil`, this function will track the exception on the tracker and attempt to + dispatch any outstanding tracking information for 5 seconds. It will then call + the previously registered exception handler, if any. When set back to false, + the previously registered uncaught exception handler will be restored. + */ +@property(nonatomic, assign) BOOL trackUncaughtExceptions; + +/*! + When this is 'YES', no tracking information will be sent. Defaults to 'NO'. + */ +@property(nonatomic, assign) BOOL dryRun; + +/*! Get the shared instance of the Google Analytics for iOS class. */ ++ (GAI *)sharedInstance; + +/*! + Creates or retrieves a GAITracker implementation with the specified name and + tracking ID. If the tracker for the specified name does not already exist, then + it will be created and returned; otherwise, the existing tracker will be + returned. If the existing tracker for the respective name has a different + tracking ID, that tracking ID is not changed by this method. If defaultTracker + is not set, it will be set to the tracker instance returned here. + + @param name The name of this tracker. Must not be `nil` or empty. + + @param trackingId The tracking ID to use for this tracker. It should be of + the form `UA-xxxxx-y`. + + @return A GAITracker associated with the specified name. The tracker + can be used to send tracking data to Google Analytics. The first time this + method is called with a particular name, the tracker for that name will be + returned, and subsequent calls with the same name will return the same + instance. It is not necessary to retain the tracker because the tracker will be + retained internally by the library. + + If an error occurs or the name is not valid, this method will return + `nil`. + */ +- (id<GAITracker>)trackerWithName:(NSString *)name + trackingId:(NSString *)trackingId; + +/*! + Creates or retrieves a GAITracker implementation with name equal to + the specified tracking ID. If the tracker for the respective name does not + already exist, it is created, has it's tracking ID set to |trackingId|, + and is returned; otherwise, the existing tracker is returned. If the existing + tracker for the respective name has a different tracking ID, that tracking ID + is not changed by this method. If defaultTracker is not set, it is set to the + tracker instance returned here. + + @param trackingId The tracking ID to use for this tracker. It should be of + the form `UA-xxxxx-y`. The name of the tracker will be the same as trackingID. + + @return A GAITracker associated with the specified trackingID. The tracker + can be used to send tracking data to Google Analytics. The first time this + method is called with a particular trackingID, the tracker for the respective + name will be returned, and subsequent calls with the same trackingID + will return the same instance. It is not necessary to retain the tracker + because the tracker will be retained internally by the library. + + If an error occurs or the trackingId is not valid, this method will return + `nil`. + */ +- (id<GAITracker>)trackerWithTrackingId:(NSString *)trackingId; + +/*! + Remove a tracker from the trackers dictionary. If it is the default tracker, + clears the default tracker as well. + + @param name The name of the tracker. + */ +- (void)removeTrackerByName:(NSString *)name; + +/*! + Dispatches any pending tracking information. + + Note that this does not have any effect on dispatchInterval, and can be used in + conjunction with periodic dispatch. */ +- (void)dispatch; + +/*! + Dispatches the next tracking beacon in the queue, calling completionHandler when + the tracking beacon has either been sent (returning kGAIDispatchGood) or an error has resulted + (returning kGAIDispatchError). If there is no network connection or there is no data to send, + kGAIDispatchNoData is returned. + + Note that calling this method with a non-nil completionHandler disables periodic dispatch. + Periodic dispatch can be reenabled by setting the dispatchInterval to a positive number when + the app resumes from the background. + + Calling this method with a nil completionHandler is the same as calling the dispatch + above. + + This method can be used for background data fetching in iOS 7.0 or later. It would be wise to + call this when the application is exiting to initiate the submission of any unsubmitted + tracking information. + + @param completionHandler The block to run after a single dispatch request. The GAIDispatchResult + param indicates whether the dispatch succeeded, had an error, or had no hits to dispatch. + */ +- (void)dispatchWithCompletionHandler:(void (^)(GAIDispatchResult result))completionHandler; +@end diff --git a/StoneIsland/plugins/cordova-plugin-google-analytics/ios/GAIDictionaryBuilder.h b/StoneIsland/plugins/cordova-plugin-google-analytics/ios/GAIDictionaryBuilder.h new file mode 100644 index 00000000..b8c5fdab --- /dev/null +++ b/StoneIsland/plugins/cordova-plugin-google-analytics/ios/GAIDictionaryBuilder.h @@ -0,0 +1,217 @@ +/*! + @header GAIDictionaryBuilder.h + @abstract Google Analytics iOS SDK Hit Format Header + @copyright Copyright 2013 Google Inc. All rights reserved. + */ + +#import <Foundation/Foundation.h> + +#import "GAIEcommerceProduct.h" +#import "GAIEcommerceProductAction.h" +#import "GAIEcommercePromotion.h" + +/*! + * Helper class to build a dictionary of hit parameters and values. + * <br> + * Examples: + * <code> + * id<GAITracker> t = // get a tracker. + * [t send:[[[GAIDictionaryBuilder createEventWithCategory:@"EventCategory" + * action:@"EventAction" + * label:nil + * value:nil] + * set:@"dimension1" forKey:[GAIFields customDimensionForIndex:1]] build]]; + * </code> + * This will send an event hit type with the specified parameters + * and a custom dimension parameter. + * <br> + * If you want to send a parameter with all hits, set it on GAITracker directly. + * <code> + * [t set:kGAIScreenName value:@"Home"]; + * [t send:[[GAIDictionaryBuilder createSocialWithNetwork:@"Google+" + * action:@"PlusOne" + * target:@"SOME_URL"] build]]; + * [t send:[[GAIDictionaryBuilder createSocialWithNetwork:@"Google+" + * action:@"Share" + * target:@"SOME_POST"] build]]; + * [t send:[[GAIDictionaryBuilder createSocialWithNetwork:@"Google+" + * action:@"HangOut" + * target:@"SOME_CIRCLE"] + * build]]; + * </code> + * You can override a value set on the tracker by adding it to the dictionary. + * <code> + * [t set:kGAIScreenName value:@"Home"]; + * [t send:...]; + * [t send[[[GAIDictionaryBuilder createEventWithCategory:@"click" + * action:@"popup" + * label:nil + * value:nil] + * set:@"popup title" forKey:kGAIScreenName] build]]; + * </code> + * The values set via [GAIDictionaryBuilder set] or + * [GAIDictionaryBuilder setAll] will override any existing values in the + * GAIDictionaryBuilder object (i.e. initialized by + * [GAIDictionaryBuilder createXYZ]). e.g. + * <code> + * GAIDictionaryBuilder *m = + * GAIDictionaryBuilder createTimingWithCategory:@"category" + * interval:@0 + * name:@"name" + * label:nil]; + * [t send:[m.set:@"10" forKey:kGAITimingVar] build]; + * [t send:[m.set:@"20" forKey:kGAITimingVar] build]; + * </code> + */ +@interface GAIDictionaryBuilder : NSObject + +- (GAIDictionaryBuilder *)set:(NSString *)value + forKey:(NSString *)key; + +/*! + * Copies all the name-value pairs from params into this object, ignoring any + * keys that are not NSString and any values that are neither NSString or + * NSNull. + */ +- (GAIDictionaryBuilder *)setAll:(NSDictionary *)params; + +/*! + * Returns the value for the input parameter paramName, or nil if paramName + * is not present. + */ +- (NSString *)get:(NSString *)paramName; + +/*! + * Return an NSMutableDictionary object with all the parameters set in this + */ +- (NSMutableDictionary *)build; + +/*! + * Parses and translates utm campaign parameters to analytics campaign param + * and returns them as a map. + * + * @param urlString url containing utm campaign parameters. + * + * Valid campaign parameters are: + * <ul> + * <li>utm_id</li> + * <li>utm_campaign</li> + * <li>utm_content</li> + * <li>utm_medium</li> + * <li>utm_source</li> + * <li>utm_term</li> + * <li>dclid</li> + * <li>gclid</li> + * <li>gmob_t</li> + * <li>aclid</li> + * <li>anid</li> + * </ul> + * <p> + * Example: + * http://my.site.com/index.html?utm_campaign=wow&utm_source=source + * utm_campaign=wow&utm_source=source. + * <p> + * For more information on auto-tagging, see + * http://support.google.com/googleanalytics/bin/answer.py?hl=en&answer=55590 + * <p> + * For more information on manual tagging, see + * http://support.google.com/googleanalytics/bin/answer.py?hl=en&answer=55518 + */ +- (GAIDictionaryBuilder *)setCampaignParametersFromUrl:(NSString *)urlString; + +/*! + Returns a GAIDictionaryBuilder object with parameters specific to an appview + hit. + + Note that using this method will not set the screen name for followon hits. To + do that you need to call set:kGAIDescription value:<screenName> on the + GAITracker instance. + + This method is deprecated. Use createScreenView instead. + */ ++ (GAIDictionaryBuilder *)createAppView DEPRECATED_MSG_ATTRIBUTE("Use createScreenView instead."); + +/*! + Returns a GAIDictionaryBuilder object with parameters specific to a screenview + hit. + + Note that using this method will not set the screen name for followon hits. To + do that you need to call set:kGAIDescription value:<screenName> on the + GAITracker instance. + */ ++ (GAIDictionaryBuilder *)createScreenView; + +/*! + Returns a GAIDictionaryBuilder object with parameters specific to an event hit. + */ ++ (GAIDictionaryBuilder *)createEventWithCategory:(NSString *)category + action:(NSString *)action + label:(NSString *)label + value:(NSNumber *)value; + +/*! + Returns a GAIDictionaryBuilder object with parameters specific to an exception + hit. + */ ++ (GAIDictionaryBuilder *)createExceptionWithDescription:(NSString *)description + withFatal:(NSNumber *)fatal; + +/*! + Returns a GAIDictionaryBuilder object with parameters specific to an item hit. + */ ++ (GAIDictionaryBuilder *)createItemWithTransactionId:(NSString *)transactionId + name:(NSString *)name + sku:(NSString *)sku + category:(NSString *)category + price:(NSNumber *)price + quantity:(NSNumber *)quantity + currencyCode:(NSString *)currencyCode; + +/*! + Returns a GAIDictionaryBuilder object with parameters specific to a social hit. + */ ++ (GAIDictionaryBuilder *)createSocialWithNetwork:(NSString *)network + action:(NSString *)action + target:(NSString *)target; + +/*! + Returns a GAIDictionaryBuilder object with parameters specific to a timing hit. + */ ++ (GAIDictionaryBuilder *)createTimingWithCategory:(NSString *)category + interval:(NSNumber *)intervalMillis + name:(NSString *)name + label:(NSString *)label; + +/*! + Returns a GAIDictionaryBuilder object with parameters specific to a transaction + hit. + */ ++ (GAIDictionaryBuilder *)createTransactionWithId:(NSString *)transactionId + affiliation:(NSString *)affiliation + revenue:(NSNumber *)revenue + tax:(NSNumber *)tax + shipping:(NSNumber *)shipping + currencyCode:(NSString *)currencyCode; + +/*! + Set the product action field for this hit. + */ +- (GAIDictionaryBuilder *)setProductAction:(GAIEcommerceProductAction *)productAction; + +/*! + Adds a product to this hit. + */ +- (GAIDictionaryBuilder *)addProduct:(GAIEcommerceProduct *)product; + +/*! + Add a product impression to this hit. + */ +- (GAIDictionaryBuilder *)addProductImpression:(GAIEcommerceProduct *)product + impressionList:(NSString *)name + impressionSource:(NSString *)source; + +/*! + Add a promotion to this hit. + */ +- (GAIDictionaryBuilder *)addPromotion:(GAIEcommercePromotion *)promotion; +@end diff --git a/StoneIsland/plugins/cordova-plugin-google-analytics/ios/GAIEcommerceFields.h b/StoneIsland/plugins/cordova-plugin-google-analytics/ios/GAIEcommerceFields.h new file mode 100644 index 00000000..b3ba60ae --- /dev/null +++ b/StoneIsland/plugins/cordova-plugin-google-analytics/ios/GAIEcommerceFields.h @@ -0,0 +1,124 @@ +/*! + @header GAIEcommerceFields.h + @abstract Google Analytics iOS SDK Ecommerce Hit Format Header + @copyright Copyright 2014 Google Inc. All rights reserved. + */ + +#import <Foundation/Foundation.h> + +/*! + This class provides several fields and methods useful as wire format parameters for + Enhanced Ecommerce. See the online developer guides for Enhanced Ecommerce for details + on how to use the Enhanced Ecommerce features. + */ + +// Enhanced Ecommerce Product fields +extern NSString *const kGAIProductId; +extern NSString *const kGAIProductName; +extern NSString *const kGAIProductBrand; +extern NSString *const kGAIProductCategory; +extern NSString *const kGAIProductVariant; +extern NSString *const kGAIProductPrice; +extern NSString *const kGAIProductQuantity; +extern NSString *const kGAIProductCouponCode; +extern NSString *const kGAIProductPosition; + +extern NSString *const kGAIProductAction; + +// product action values +extern NSString *const kGAIPADetail; +extern NSString *const kGAIPAClick; +extern NSString *const kGAIPAAdd; +extern NSString *const kGAIPARemove; +extern NSString *const kGAIPACheckout; +extern NSString *const kGAIPACheckoutOption; +extern NSString *const kGAIPAPurchase; +extern NSString *const kGAIPARefund; + +// product action fields +// used for 'purchase' and 'refund' actions +extern NSString *const kGAIPATransactionId; +extern NSString *const kGAIPAAffiliation; +extern NSString *const kGAIPARevenue; +extern NSString *const kGAIPATax; +extern NSString *const kGAIPAShipping; +extern NSString *const kGAIPACouponCode; +// used for 'checkout' action +extern NSString *const kGAICheckoutStep; +extern NSString *const kGAICheckoutOption; +// used for 'detail' and 'click' actions +extern NSString *const kGAIProductActionList; +extern NSString *const kGAIProductListSource; + +// Enhanced Ecommerce Impressions fields +extern NSString *const kGAIImpressionName; +extern NSString *const kGAIImpressionListSource; +extern NSString *const kGAIImpressionProduct; +extern NSString *const kGAIImpressionProductId; +extern NSString *const kGAIImpressionProductName; +extern NSString *const kGAIImpressionProductBrand; +extern NSString *const kGAIImpressionProductCategory; +extern NSString *const kGAIImpressionProductVariant; +extern NSString *const kGAIImpressionProductPosition; +extern NSString *const kGAIImpressionProductPrice; + +// Enhanced Ecommerce Promotions fields +extern NSString *const kGAIPromotionId; +extern NSString *const kGAIPromotionName; +extern NSString *const kGAIPromotionCreative; +extern NSString *const kGAIPromotionPosition; + +// Promotion actions +extern NSString *const kGAIPromotionAction; +extern NSString *const kGAIPromotionView; +extern NSString *const kGAIPromotionClick; + +@interface GAIEcommerceFields : NSObject + +/*! + Generates an enhanced ecommerce product field. Note that field names generated by + customDimensionForIndex and customMetricForIndex can be used as suffixes. + + @param index the index of the product + @param suffix the product field suffix (such as kGAIProductPrice). + + @return an NSString representing the product field parameter + */ ++ (NSString *)productFieldForIndex:(NSUInteger)index suffix:(NSString *)suffix; + +/*! + Genrates an enhanced ecommerce impression list field name with an index. The return value of + this method should also be used as input to the productImpressionForList method below. + + @param index the index of the impression list + + @return an NSString representing the impression list parameter + */ ++ (NSString *)impressionListForIndex:(NSUInteger)index; + +/*! + Generates an enhanced ecommerce product impression field with the impression list, product index + and product suffix as parameters. The output of the method impressionListForIndex above should be + used as the input list for this method. The output of customDimensionForIndex and + customMetricForIndex can be used as suffixes. + + @param list the impression list for this product impression + @param index the index of this product in the impression list + @param suffix the product impression suffix for this field + + @return an NSString representing this product impression field parameter + */ ++ (NSString *)productImpressionForList:(NSString *)list + index:(NSUInteger)index + suffix:(NSString *)Suffix; + +/*! + Generates an enhanced ecommerce promotion field with an index and suffix. + + @param index the index of the promotion + @param suffix the promotion suffix (such as kGAIPromotionId) + + @return an NSString representing this promotion field paramter + */ ++ (NSString *)promotionForIndex:(NSUInteger)index suffix:(NSString *)suffix; +@end diff --git a/StoneIsland/plugins/cordova-plugin-google-analytics/ios/GAIEcommerceProduct.h b/StoneIsland/plugins/cordova-plugin-google-analytics/ios/GAIEcommerceProduct.h new file mode 100644 index 00000000..029f7638 --- /dev/null +++ b/StoneIsland/plugins/cordova-plugin-google-analytics/ios/GAIEcommerceProduct.h @@ -0,0 +1,102 @@ +/*! + @header GAIEcommerceProduct.h + @abstract Google Analytics iOS SDK Hit Format Header + @copyright Copyright 2014 Google Inc. All rights reserved. + */ + +#import <Foundation/Foundation.h> + +/*! + * Class to construct product related information for a Google Analytics beacon. Use this class to + * report information about products sold by merchants or impressions of products seen by users. + * Instances of this class can be associated with both Product Actions and Product + * Impression Lists. + * <br> + * Typical usage: + * <code> + * [tracker set:kGAIScreenName value:@"MyScreen"]; + * GAIDictionaryBuilder *builder = [GAIDictionaryBuilder createScreenView]; + * GAIEcommerceProduct *product = [[GAIEcommerceProduct alloc] init]; + * [product setId:@""PID-1234""]; + * [product setName:@"Space Monkeys!"]; + * [product setPrice:@100]; + * [product setQuantity:@2]; + * [builder addProductImpression:product impressionList:@"listName"]; + * [tracker send:[builder build]]; + * </code> + */ +@interface GAIEcommerceProduct : NSObject + +/*! + Sets the id that is used to identify a product in GA reports. + */ +- (GAIEcommerceProduct *)setId:(NSString *)productId; + +/*! + Sets the name that is used to indentify the product in GA reports. + */ +- (GAIEcommerceProduct *)setName:(NSString *)productName; + +/*! + Sets the brand associated with the product in GA reports. + */ +- (GAIEcommerceProduct *)setBrand:(NSString *)productBrand; + +/*! + Sets the category associated with the product in GA reports. + */ +- (GAIEcommerceProduct *)setCategory:(NSString *)productCategory; + +/*! + Sets the variant of the product. + */ +- (GAIEcommerceProduct *)setVariant:(NSString *)productVariant; + +/*! + Sets the price of the product. + */ +- (GAIEcommerceProduct *)setPrice:(NSNumber *)productPrice; + +/*! + Sets the quantity of the product. This field is usually not used with product impressions. + */ +- (GAIEcommerceProduct *)setQuantity:(NSNumber *)productQuantity; + +/*! + Sets the coupon code associated with the product. This field is usually not used with product + impressions. + */ +- (GAIEcommerceProduct *)setCouponCode:(NSString *)productCouponCode; + +/*! + Sets the position of the product on the screen/product impression list, etc. + */ +- (GAIEcommerceProduct *)setPosition:(NSNumber *)productPosition; + +/*! + Sets the custom dimension associated with this product. + */ +- (GAIEcommerceProduct *)setCustomDimension:(NSUInteger)index value:(NSString *)value; + +/*! + Sets the custom metric associated with this product. + */ +- (GAIEcommerceProduct *)setCustomMetric:(NSUInteger)index value:(NSNumber *)value; + +/*! + Builds an NSDictionary of fields stored in this instance suitable for a product action. The + index parameter is the index of this product in the product action list. + <br> + Normally, users will have no need to call this method. + */ +- (NSDictionary *)buildWithIndex:(NSUInteger)index; + +/*! + Builds an NSDictionary of fields stored in this instance suitable for an impression list. The + lIndex parameter is the index of the product impression list while the index parameter is the + index of this product in that impression list. + <br> + Normally, users will have no need to call this method. + */ +- (NSDictionary *)buildWithListIndex:(NSUInteger)lIndex index:(NSUInteger)index; +@end diff --git a/StoneIsland/plugins/cordova-plugin-google-analytics/ios/GAIEcommerceProductAction.h b/StoneIsland/plugins/cordova-plugin-google-analytics/ios/GAIEcommerceProductAction.h new file mode 100644 index 00000000..e3da1c15 --- /dev/null +++ b/StoneIsland/plugins/cordova-plugin-google-analytics/ios/GAIEcommerceProductAction.h @@ -0,0 +1,107 @@ +/*! + @header GAIProductAction.h + @abstract Google Analytics iOS SDK Hit Format Header + @copyright Copyright 2014 Google Inc. All rights reserved. + */ + +#import <Foundation/Foundation.h> + +/*! + * Class to construct transaction/checkout or other product interaction related information for a + * Google Analytics hit. Use this class to report information about products sold, viewed or + * refunded. This class is intended to be used with GAIDictionaryBuilder. + * <br> + * Typical usage: + * <code> + * [tracker set:kGAIScreenName value:@"MyScreen"]; + * GAIDictionaryBuilder *builder = [GAIDictionaryBuilder createScreenView]; + * GAIEcommerceProductAction *action = [[GAIEcommerceProductAction alloc] init]; + * [action setAction:kGAIPAPurchase]; + * [action setTransactionId:@"TT-1234"]; + * [action setRevenue:@3.14]; + * [action setCouponCode:@"EXTRA100"]; + * [builder setProductAction:action]; + * GAIEcommerceProduct *product = [[GAIEcommerceProduct alloc] init]; + * [product setId:@""PID-1234""]; + * [product setName:@"Space Monkeys!"]; + * [product setPrice:@100]; + * [product setQuantity:@2]; + * [builder addProduct:product]; + * [tracker send:[builder build]]; + * </code> + */ +@interface GAIEcommerceProductAction : NSObject + +/*! + Sets the product action field for this product action. Valid values can be found in + GAIEcommerceFields.h under "product action values". + */ +- (GAIEcommerceProductAction *)setAction:(NSString *)productAction; + +/*! + The unique id associated with the transaction. This value is used for kGAIPAPurchase and + kGAIPARefund product actions. + */ +- (GAIEcommerceProductAction *)setTransactionId:(NSString *)transactionId; + +/*! + Sets the transaction's affiliation value. This value is used for kGAIPAPurchase and + kGAIPARefund product actions. + */ +- (GAIEcommerceProductAction *)setAffiliation:(NSString *)affiliation; + +/*! + Sets the transaction's total revenue. This value is used for kGAIPAPurchase and kGAIPARefund + product actions. + */ +- (GAIEcommerceProductAction *)setRevenue:(NSNumber *)revenue; + +/*! + Sets the transaction's total tax. This value is used for kGAIPAPurchase and kGAIPARefund + product actions. + */ +- (GAIEcommerceProductAction *)setTax:(NSNumber *)tax; + +/*! + Sets the transaction's total shipping costs. This value is used for kGAIPAPurchase and + kGAIPARefund product actions. + */ +- (GAIEcommerceProductAction *)setShipping:(NSNumber *)shipping; + +/*! + Sets the coupon code used in this transaction. This value is used for kGAIPAPurchase and + kGAIPARefund product actions. + */ +- (GAIEcommerceProductAction *)setCouponCode:(NSString *)couponCode; + +/*! + Sets the checkout process's progress. This value is used for kGAICheckout and + kGAICheckoutOptions product actions. + */ +- (GAIEcommerceProductAction *)setCheckoutStep:(NSNumber *)checkoutStep; + +/*! + Sets the option associated with the checkout. This value is used for kGAICheckout and + kGAICheckoutOptions product actions. + */ +- (GAIEcommerceProductAction *)setCheckoutOption:(NSString *)checkoutOption; + +/*! + Sets the list name associated with the products in Google Analytics beacons. This value is + used in kGAIPADetail and kGAIPAClick product actions. + */ +- (GAIEcommerceProductAction *)setProductActionList:(NSString *)productActionList; + +/*! + Sets the list source name associated with the products in Google Analytics beacons. This value + is used in kGAIPADetail and kGAIPAClick product actions. + */ +- (GAIEcommerceProductAction *)setProductListSource:(NSString *)productListSource; + +/*! + Builds an NSDictionary of fields stored in this instance representing this product action. + <br> + Normally, users will have no need to call this method. + */ +- (NSDictionary *)build; +@end diff --git a/StoneIsland/plugins/cordova-plugin-google-analytics/ios/GAIEcommercePromotion.h b/StoneIsland/plugins/cordova-plugin-google-analytics/ios/GAIEcommercePromotion.h new file mode 100644 index 00000000..c7bf25af --- /dev/null +++ b/StoneIsland/plugins/cordova-plugin-google-analytics/ios/GAIEcommercePromotion.h @@ -0,0 +1,54 @@ +/*! + @header GAIEcommercePromotion.h + @abstract Google Analytics iOS SDK Hit Format Header + @copyright Copyright 2014 Google Inc. All rights reserved. + */ + +#import <Foundation/Foundation.h> + +/*! + * Class to construct promotion related fields for Google Analytics hits. The fields from this class + * can be used to represent internal promotions that run within an app, such as banners, banner ads + * etc. + * + * Typical usage: + * <code> + * GAIDictionaryBuilder *builder = [GAIDictionaryBuilder createScreenView]; + * GAIEcommercePromotion *promotion = [[GAIEcommercePromotion alloc] init]; + * [promotion setId:@"PROMO-ID1234"]; + * [promotion setName:@"Home screen banner"]; + * [builder set:kGAIPromotionClick forKey:kGAIPromotionAction]; + * [builder addPromotion:promotion]; + * [tracker send:builder.build]]; + * </code> + */ +@interface GAIEcommercePromotion : NSObject + +/*! + Sets the id that is used to identify a promotion in GA reports. + */ +- (GAIEcommercePromotion *)setId:(NSString *)pid; + +/*! + Sets the name that is used to identify a promotion in GA reports. + */ +- (GAIEcommercePromotion *)setName:(NSString *)name; + +/*! + Sets the name of the creative associated with the promotion. + */ +- (GAIEcommercePromotion *)setCreative:(NSString *)creative; + +/*! + Sets the position of the promotion. + */ +- (GAIEcommercePromotion *)setPosition:(NSString *)position; + +/*! + Builds an NSDictionary of fields stored in this instance. The index parameter is the + index of this promotion in that promotion list. + <br> + Normally, users will have no need to call this method. + */ +- (NSDictionary *)buildWithIndex:(NSUInteger)index; +@end diff --git a/StoneIsland/plugins/cordova-plugin-google-analytics/ios/GAIFields.h b/StoneIsland/plugins/cordova-plugin-google-analytics/ios/GAIFields.h new file mode 100644 index 00000000..e54cef03 --- /dev/null +++ b/StoneIsland/plugins/cordova-plugin-google-analytics/ios/GAIFields.h @@ -0,0 +1,133 @@ +/*! + @header GAIFields.h + @abstract Google Analytics iOS SDK Hit Format Header + @copyright Copyright 2013 Google Inc. All rights reserved. + */ + +#import <Foundation/Foundation.h> + +/*! + These fields can be used for the wire format parameter names required by + the |GAITracker| get, set and send methods as well as the set methods in the + |GAIDictionaryBuilder| class. + */ +extern NSString *const kGAIUseSecure; + +extern NSString *const kGAIHitType; +extern NSString *const kGAITrackingId; +extern NSString *const kGAIClientId; +extern NSString *const kGAIDataSource; +extern NSString *const kGAIAnonymizeIp; +extern NSString *const kGAISessionControl; +extern NSString *const kGAIDeviceModelVersion; +extern NSString *const kGAIScreenResolution; +extern NSString *const kGAIViewportSize; +extern NSString *const kGAIEncoding; +extern NSString *const kGAIScreenColors; +extern NSString *const kGAILanguage; +extern NSString *const kGAIJavaEnabled; +extern NSString *const kGAIFlashVersion; +extern NSString *const kGAINonInteraction; +extern NSString *const kGAIReferrer; +extern NSString *const kGAILocation; +extern NSString *const kGAIHostname; +extern NSString *const kGAIPage; +extern NSString *const kGAIDescription; // synonym for kGAIScreenName +extern NSString *const kGAIScreenName; // synonym for kGAIDescription +extern NSString *const kGAITitle; +extern NSString *const kGAIAdMobHitId; +extern NSString *const kGAIAppName; +extern NSString *const kGAIAppVersion; +extern NSString *const kGAIAppId; +extern NSString *const kGAIAppInstallerId; +extern NSString *const kGAIUserId; + +extern NSString *const kGAIEventCategory; +extern NSString *const kGAIEventAction; +extern NSString *const kGAIEventLabel; +extern NSString *const kGAIEventValue; + +extern NSString *const kGAISocialNetwork; +extern NSString *const kGAISocialAction; +extern NSString *const kGAISocialTarget; + +extern NSString *const kGAITransactionId; +extern NSString *const kGAITransactionAffiliation; +extern NSString *const kGAITransactionRevenue; +extern NSString *const kGAITransactionShipping; +extern NSString *const kGAITransactionTax; +extern NSString *const kGAICurrencyCode; + +extern NSString *const kGAIItemPrice; +extern NSString *const kGAIItemQuantity; +extern NSString *const kGAIItemSku; +extern NSString *const kGAIItemName; +extern NSString *const kGAIItemCategory; + +extern NSString *const kGAICampaignSource; +extern NSString *const kGAICampaignMedium; +extern NSString *const kGAICampaignName; +extern NSString *const kGAICampaignKeyword; +extern NSString *const kGAICampaignContent; +extern NSString *const kGAICampaignId; +extern NSString *const kGAICampaignAdNetworkClickId; +extern NSString *const kGAICampaignAdNetworkId; + +extern NSString *const kGAITimingCategory; +extern NSString *const kGAITimingVar; +extern NSString *const kGAITimingValue; +extern NSString *const kGAITimingLabel; + +extern NSString *const kGAIExDescription; +extern NSString *const kGAIExFatal; + +extern NSString *const kGAISampleRate; + +extern NSString *const kGAIIdfa; +extern NSString *const kGAIAdTargetingEnabled; + +// hit types +extern NSString *const kGAIAppView DEPRECATED_MSG_ATTRIBUTE("Use kGAIScreenView instead."); +extern NSString *const kGAIScreenView; +extern NSString *const kGAIEvent; +extern NSString *const kGAISocial; +extern NSString *const kGAITransaction; +extern NSString *const kGAIItem; +extern NSString *const kGAIException; +extern NSString *const kGAITiming; + +/*! + This class provides several fields and methods useful as wire format parameter + names. The methods are used for wire format parameter names that are indexed. + */ + +@interface GAIFields : NSObject + +/*! + Generates the correct parameter name for a content group with an index. + + @param index the index of the content group. + + @return an NSString representing the content group parameter for the index. + */ ++ (NSString *)contentGroupForIndex:(NSUInteger)index; + +/*! + Generates the correct parameter name for a custon dimension with an index. + + @param index the index of the custom dimension. + + @return an NSString representing the custom dimension parameter for the index. + */ ++ (NSString *)customDimensionForIndex:(NSUInteger)index; + +/*! + Generates the correct parameter name for a custom metric with an index. + + @param index the index of the custom metric. + + @return an NSString representing the custom metric parameter for the index. + */ ++ (NSString *)customMetricForIndex:(NSUInteger)index; + +@end diff --git a/StoneIsland/plugins/cordova-plugin-google-analytics/ios/GAILogger.h b/StoneIsland/plugins/cordova-plugin-google-analytics/ios/GAILogger.h new file mode 100644 index 00000000..06291f2c --- /dev/null +++ b/StoneIsland/plugins/cordova-plugin-google-analytics/ios/GAILogger.h @@ -0,0 +1,49 @@ +/*! + @header GAILogger.h + @abstract Google Analytics iOS SDK Source + @copyright Copyright 2011 Google Inc. All rights reserved. + */ + +#import <Foundation/Foundation.h> + +typedef NS_ENUM(NSUInteger, GAILogLevel) { + kGAILogLevelNone = 0, + kGAILogLevelError = 1, + kGAILogLevelWarning = 2, + kGAILogLevelInfo = 3, + kGAILogLevelVerbose = 4 +}; + +/*! + Protocol to be used for logging debug and informational messages from the SDK. + Implementations of this protocol can be provided to the |GAI| class, + to be used as the logger by the SDK. See the |logger| property in GAI.h. + */ +@protocol GAILogger<NSObject> +@required + +/*! + Only messages of |logLevel| and below are logged. + */ +@property (nonatomic, assign) GAILogLevel logLevel; + +/*! + Logs message with log level |kGAILogLevelVerbose|. + */ +- (void)verbose:(NSString *)message; + +/*! + Logs message with log level |kGAILogLevelInfo|. + */ +- (void)info:(NSString *)message; + +/*! + Logs message with log level |kGAILogLevelWarning|. + */ +- (void)warning:(NSString *)message; + +/*! + Logs message with log level |kGAILogLevelError|. + */ +- (void)error:(NSString *)message; +@end diff --git a/StoneIsland/plugins/cordova-plugin-google-analytics/ios/GAITrackedViewController.h b/StoneIsland/plugins/cordova-plugin-google-analytics/ios/GAITrackedViewController.h new file mode 100644 index 00000000..de19def0 --- /dev/null +++ b/StoneIsland/plugins/cordova-plugin-google-analytics/ios/GAITrackedViewController.h @@ -0,0 +1,33 @@ +/*! + @header GAITrackedViewController.h + @abstract Google Analytics for iOS Tracked View Controller Header + @copyright Copyright 2012 Google Inc. All rights reserved. + */ + +#import <Foundation/Foundation.h> +#import <UIKit/UIKit.h> + +@protocol GAITracker; + +/*! + Extends UIViewController to generate Google Analytics screenview calls + whenever the view appears; this is done by overriding the `viewDidAppear:` + method. The screen name must be set for any tracking calls to be made. + + By default, this will use [GAI defaultTracker] for tracking calls, but one can + override this by setting the tracker property. + */ +@interface GAITrackedViewController : UIViewController + +/*! + The tracker on which view tracking calls are be made, or `nil`, in which case + [GAI defaultTracker] will be used. + */ +@property(nonatomic, assign) id<GAITracker> tracker; +/*! + The screen name, for purposes of Google Analytics tracking. If this is `nil`, + no tracking calls will be made. + */ +@property(nonatomic, copy) NSString *screenName; + +@end diff --git a/StoneIsland/plugins/cordova-plugin-google-analytics/ios/GAITracker.h b/StoneIsland/plugins/cordova-plugin-google-analytics/ios/GAITracker.h new file mode 100644 index 00000000..fdc5c5df --- /dev/null +++ b/StoneIsland/plugins/cordova-plugin-google-analytics/ios/GAITracker.h @@ -0,0 +1,57 @@ +/*! + @header GAITracker.h + @abstract Google Analytics iOS SDK Tracker Header + @copyright Copyright 2013 Google Inc. All rights reserved. +*/ + +#import <Foundation/Foundation.h> + +/*! + Google Analytics tracking interface. Obtain instances of this interface from + [GAI trackerWithTrackingId:] to track screens, events, transactions, timing, + and exceptions. The implementation of this interface is thread-safe, and no + calls are expected to block or take a long time. All network and disk activity + will take place in the background. + */ +@protocol GAITracker<NSObject> + +/*! + Name of this tracker. + */ +@property(nonatomic, readonly) NSString *name; + +/*! + Allow collection of IDFA and related fields if set to true. Default is false. + */ +@property(nonatomic) BOOL allowIDFACollection; + +/*! + Set a tracking parameter. + + @param parameterName The parameter name. + + @param value The value to set for the parameter. If this is nil, the + value for the parameter will be cleared. + */ +- (void)set:(NSString *)parameterName + value:(NSString *)value; + +/*! + Get a tracking parameter. + + @param parameterName The parameter name. + + @returns The parameter value, or nil if no value for the given parameter is + set. + */ +- (NSString *)get:(NSString *)parameterName; + +/*! + Queue tracking information with the given parameter values. + + @param parameters A map from parameter names to parameter values which will be + set just for this piece of tracking information, or nil for none. + */ +- (void)send:(NSDictionary *)parameters; + +@end diff --git a/StoneIsland/plugins/cordova-plugin-google-analytics/ios/UniversalAnalyticsPlugin.h b/StoneIsland/plugins/cordova-plugin-google-analytics/ios/UniversalAnalyticsPlugin.h new file mode 100644 index 00000000..dde480ac --- /dev/null +++ b/StoneIsland/plugins/cordova-plugin-google-analytics/ios/UniversalAnalyticsPlugin.h @@ -0,0 +1,34 @@ +//UniversalAnalyticsPlugin.h +//Created by Daniel Wilson 2013-09-19 + +#import <Foundation/Foundation.h> +#import <Cordova/CDV.h> +#import "GAI.h" + +@interface UniversalAnalyticsPlugin : CDVPlugin { + bool _trackerStarted; + bool _debugMode; + NSMutableDictionary *_customDimensions; +} + +- (void) startTrackerWithId: (CDVInvokedUrlCommand*)command; +- (void) setAllowIDFACollection: (CDVInvokedUrlCommand*) command; +- (void) setUserId: (CDVInvokedUrlCommand*)command; +- (void) setAppVersion: (CDVInvokedUrlCommand*)command; +- (void) getVar: (CDVInvokedUrlCommand*)command; +- (void) setVar: (CDVInvokedUrlCommand*)command; +- (void) dispatch: (CDVInvokedUrlCommand*)command; +- (void) debugMode: (CDVInvokedUrlCommand*)command; +- (void) setOptOut: (CDVInvokedUrlCommand*)command; +- (void) enableUncaughtExceptionReporting: (CDVInvokedUrlCommand*)command; +- (void) addCustomDimension: (CDVInvokedUrlCommand*)command; +- (void) trackEvent: (CDVInvokedUrlCommand*)command; +- (void) trackMetric: (CDVInvokedUrlCommand*)command; +- (void) trackTiming: (CDVInvokedUrlCommand*)command; +- (void) trackView: (CDVInvokedUrlCommand*)command; +- (void) trackException: (CDVInvokedUrlCommand*)command; +- (void) addTransaction: (CDVInvokedUrlCommand*)command; +- (void) addTransactionItem: (CDVInvokedUrlCommand*)command; + +@end + diff --git a/StoneIsland/plugins/cordova-plugin-google-analytics/ios/UniversalAnalyticsPlugin.m b/StoneIsland/plugins/cordova-plugin-google-analytics/ios/UniversalAnalyticsPlugin.m new file mode 100644 index 00000000..12355da6 --- /dev/null +++ b/StoneIsland/plugins/cordova-plugin-google-analytics/ios/UniversalAnalyticsPlugin.m @@ -0,0 +1,543 @@ +//UniversalAnalyticsPlugin.m +//Created by Daniel Wilson 2013-09-19 + +#import "UniversalAnalyticsPlugin.h" +#import "GAI.h" +#import "GAIDictionaryBuilder.h" +#import "GAIFields.h" + +@implementation UniversalAnalyticsPlugin + +- (void) pluginInitialize +{ + _debugMode = false; + _trackerStarted = false; + _customDimensions = nil; +} + +- (void) startTrackerWithId: (CDVInvokedUrlCommand*)command +{ + [self.commandDelegate runInBackground:^{ + CDVPluginResult* pluginResult = nil; + NSString* accountId = [command.arguments objectAtIndex:0]; + NSNumber* dispatchPeriod = [command.arguments objectAtIndex:1]; + + if ([dispatchPeriod isKindOfClass:[NSNumber class]]) + [GAI sharedInstance].dispatchInterval = [dispatchPeriod doubleValue]; + else + [GAI sharedInstance].dispatchInterval = 30; + + [[GAI sharedInstance] trackerWithTrackingId:accountId]; + + _trackerStarted = true; + pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK]; + [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId]; + }]; + /* NSLog(@"successfully started GAI tracker"); */ +} + +- (void) setAllowIDFACollection: (CDVInvokedUrlCommand*) command +{ + CDVPluginResult* pluginResult = nil; + if ( ! _trackerStarted) { + pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Tracker not started"]; + [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId]; + return; + } + + id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker]; + tracker.allowIDFACollection = [[command argumentAtIndex:0 withDefault:@(NO)] boolValue]; +} + +- (void) addCustomDimensionsToTracker: (id<GAITracker>)tracker +{ + if (_customDimensions) { + for (NSString *key in _customDimensions.allKeys) { + NSString *value = [_customDimensions objectForKey:key]; + + NSNumberFormatter *f = [[NSNumberFormatter alloc] init]; + f.numberStyle = NSNumberFormatterDecimalStyle; + NSNumber *myKey = [f numberFromString:key]; + + /* NSLog(@"Setting tracker dimension slot %@: <%@>", key, value); */ + [tracker set:[GAIFields customDimensionForIndex:myKey.unsignedIntegerValue] + value:value]; + } + } +} + +- (void) getVar: (CDVInvokedUrlCommand*) command +{ + [self.commandDelegate runInBackground:^{ + CDVPluginResult* pluginResult = nil; + if ( ! _trackerStarted) { + pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Tracker not started"]; + [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId]; + return; + } + + id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker]; + NSString* parameterName = [command.arguments objectAtIndex:0]; + NSString* result = [tracker get:parameterName]; + + pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString:result]; + [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId]; + }]; +} + +- (void) setVar: (CDVInvokedUrlCommand*) command +{ + [self.commandDelegate runInBackground:^{ + CDVPluginResult* pluginResult = nil; + if ( ! _trackerStarted) { + pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Tracker not started"]; + [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId]; + return; + } + + id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker]; + NSString* parameterName = [command.arguments objectAtIndex:0]; + NSString* parameter = [command.arguments objectAtIndex:1]; + [tracker set:parameterName value:parameter]; + + pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK]; + [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId]; + }]; +} + +- (void) dispatch: (CDVInvokedUrlCommand*) command +{ + [[GAI sharedInstance] dispatch]; +} + +- (void) debugMode: (CDVInvokedUrlCommand*) command +{ + _debugMode = true; + [[GAI sharedInstance].logger setLogLevel:kGAILogLevelVerbose]; +} + +- (void) setUserId: (CDVInvokedUrlCommand*)command +{ + CDVPluginResult* pluginResult = nil; + NSString* userId = [command.arguments objectAtIndex:0]; + + if ( ! _trackerStarted) { + pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Tracker not started"]; + [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId]; + return; + } + + id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker]; + [tracker set:@"&uid" value: userId]; + + pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK]; + [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId]; +} + +- (void) setAnonymizeIp: (CDVInvokedUrlCommand*)command +{ + CDVPluginResult* pluginResult = nil; + NSString* anonymize = [command.arguments objectAtIndex:0]; + + if ( ! _trackerStarted) { + pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Tracker not started"]; + [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId]; + return; + } + + id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker]; + [tracker set:kGAIAnonymizeIp value:anonymize]; + + pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK]; + [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId]; +} + +- (void) setOptOut: (CDVInvokedUrlCommand*)command +{ + CDVPluginResult* pluginResult = nil; + bool optout = [[command.arguments objectAtIndex:0] boolValue]; + + if ( ! _trackerStarted) { + pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Tracker not started"]; + [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId]; + return; + } + + [[GAI sharedInstance] setOptOut:optout]; + + pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK]; + [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId]; +} + +- (void) setAppVersion: (CDVInvokedUrlCommand*)command +{ + CDVPluginResult* pluginResult = nil; + NSString* version = [command.arguments objectAtIndex:0]; + + if ( ! _trackerStarted) { + pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Tracker not started"]; + [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId]; + return; + } + + id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker]; + [tracker set:@"&av" value: version]; + + pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK]; + [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId]; +} + +- (void) enableUncaughtExceptionReporting: (CDVInvokedUrlCommand*)command +{ + CDVPluginResult* pluginResult = nil; + + if ( ! _trackerStarted) { + pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Tracker not started"]; + [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId]; + return; + } + + bool enabled = [[command.arguments objectAtIndex:0] boolValue]; + [[GAI sharedInstance] setTrackUncaughtExceptions:enabled]; + + pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK]; + [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId]; +} + +- (void) addCustomDimension: (CDVInvokedUrlCommand*)command +{ + CDVPluginResult* pluginResult = nil; + NSNumber* key = [command.arguments objectAtIndex:0]; + NSString* value = [command.arguments objectAtIndex:1]; + + if ( ! _customDimensions) { + _customDimensions = [[NSMutableDictionary alloc] init]; + } + + _customDimensions[key.stringValue] = value; + + pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK]; + [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId]; +} + +- (void) trackMetric: (CDVInvokedUrlCommand*)command +{ + CDVPluginResult* pluginResult = nil; + + if ( ! _trackerStarted) { + pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Tracker not started"]; + [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId]; + return; + } + + [self.commandDelegate runInBackground:^{ + CDVPluginResult* pluginResult = nil; + NSNumber *key = nil; + NSString *value = nil; + + if ([command.arguments count] > 0) + key = [command.arguments objectAtIndex:0]; + + if ([command.arguments count] > 1) + value = [command.arguments objectAtIndex:1]; + + id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker]; + + [tracker set:[GAIFields customMetricForIndex:[key intValue]] value:value]; + + + pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK]; + [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId]; + }]; +} + +- (void) trackEvent: (CDVInvokedUrlCommand*)command +{ + CDVPluginResult* pluginResult = nil; + + if ( ! _trackerStarted) { + pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Tracker not started"]; + [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId]; + return; + } + + [self.commandDelegate runInBackground:^{ + CDVPluginResult* pluginResult = nil; + NSString *category = nil; + NSString *action = nil; + NSString *label = nil; + NSNumber *value = nil; + + if ([command.arguments count] > 0) + category = [command.arguments objectAtIndex:0]; + + if ([command.arguments count] > 1) + action = [command.arguments objectAtIndex:1]; + + if ([command.arguments count] > 2) + label = [command.arguments objectAtIndex:2]; + + if ([command.arguments count] > 3) + value = [command.arguments objectAtIndex:3]; + + bool newSession = [[command argumentAtIndex:4 withDefault:@(NO)] boolValue]; + + id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker]; + + [self addCustomDimensionsToTracker:tracker]; + + GAIDictionaryBuilder *builder = [GAIDictionaryBuilder + createEventWithCategory: category //required + action: action //required + label: label + value: value]; + if(newSession){ + [builder set:@"start" forKey:kGAISessionControl]; + } + [tracker send:[builder build]]; + + pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK]; + [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId]; + + }]; + +} + +- (void) trackException: (CDVInvokedUrlCommand*)command +{ + CDVPluginResult* pluginResult = nil; + + if ( ! _trackerStarted) { + pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Tracker not started"]; + [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId]; + return; + } + + [self.commandDelegate runInBackground:^{ + CDVPluginResult* pluginResult = nil; + NSString *description = nil; + NSNumber *fatal = nil; + + if ([command.arguments count] > 0) + description = [command.arguments objectAtIndex:0]; + + if ([command.arguments count] > 1) + fatal = [command.arguments objectAtIndex:1]; + + id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker]; + + [self addCustomDimensionsToTracker:tracker]; + + [tracker send:[[GAIDictionaryBuilder createScreenView] build]]; + + [tracker send:[[GAIDictionaryBuilder + createExceptionWithDescription: description + withFatal: fatal] build]]; + + pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK]; + [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId]; + }]; +} + +- (void) trackView: (CDVInvokedUrlCommand*)command +{ + CDVPluginResult* pluginResult = nil; + + if ( ! _trackerStarted) { + pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Tracker not started"]; + [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId]; + return; + } + + [self.commandDelegate runInBackground:^{ + CDVPluginResult* pluginResult = nil; + NSString* screenName = [command.arguments objectAtIndex:0]; + + id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker]; + [self addCustomDimensionsToTracker:tracker]; + + NSString* deepLinkUrl = [command.arguments objectAtIndex:1]; + GAIDictionaryBuilder* openParams = [[GAIDictionaryBuilder alloc] init]; + + if (deepLinkUrl && deepLinkUrl != (NSString *)[NSNull null]) { + [[openParams setCampaignParametersFromUrl:deepLinkUrl] build]; + } + + bool newSession = [[command argumentAtIndex:2 withDefault:@(NO)] boolValue]; + if(newSession){ + [openParams set:@"start" forKey:kGAISessionControl]; + } + + NSDictionary *hitParamsDict = [openParams build]; + + [tracker set:kGAIScreenName value:screenName]; + [tracker send:[[[GAIDictionaryBuilder createScreenView] setAll:hitParamsDict] build]]; + + pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK]; + [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId]; + }]; +} + +- (void) trackTiming: (CDVInvokedUrlCommand*)command +{ + CDVPluginResult* pluginResult = nil; + + if ( ! _trackerStarted) { + pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Tracker not started"]; + [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId]; + return; + } + + [self.commandDelegate runInBackground:^{ + CDVPluginResult* pluginResult = nil; + + NSString *category = nil; + NSNumber *intervalInMilliseconds = nil; + NSString *name = nil; + NSString *label = nil; + + if ([command.arguments count] > 0) + category = [command.arguments objectAtIndex:0]; + + if ([command.arguments count] > 1) + intervalInMilliseconds = [command.arguments objectAtIndex:1]; + + if ([command.arguments count] > 2) + name = [command.arguments objectAtIndex:2]; + + if ([command.arguments count] > 3) + label = [command.arguments objectAtIndex:3]; + + id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker]; + + [self addCustomDimensionsToTracker:tracker]; + + [tracker send:[[GAIDictionaryBuilder + createTimingWithCategory: category //required + interval: intervalInMilliseconds //required + name: name + label: label] build]]; + + pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK]; + [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId]; + }]; +} + +- (void) addTransaction: (CDVInvokedUrlCommand*)command +{ + CDVPluginResult* pluginResult = nil; + + if ( ! _trackerStarted) { + pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Tracker not started"]; + [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId]; + return; + } + + [self.commandDelegate runInBackground:^{ + CDVPluginResult* pluginResult = nil; + + NSString *transactionId = nil; + NSString *affiliation = nil; + NSNumber *revenue = nil; + NSNumber *tax = nil; + NSNumber *shipping = nil; + NSString *currencyCode = nil; + + + if ([command.arguments count] > 0) + transactionId = [command.arguments objectAtIndex:0]; + + if ([command.arguments count] > 1) + affiliation = [command.arguments objectAtIndex:1]; + + if ([command.arguments count] > 2) + revenue = [command.arguments objectAtIndex:2]; + + if ([command.arguments count] > 3) + tax = [command.arguments objectAtIndex:3]; + + if ([command.arguments count] > 4) + shipping = [command.arguments objectAtIndex:4]; + + if ([command.arguments count] > 5) + currencyCode = [command.arguments objectAtIndex:5]; + + id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker]; + + + [tracker send:[[GAIDictionaryBuilder createTransactionWithId:transactionId // (NSString) Transaction ID + affiliation:affiliation // (NSString) Affiliation + revenue:revenue // (NSNumber) Order revenue (including tax and shipping) + tax:tax // (NSNumber) Tax + shipping:shipping // (NSNumber) Shipping + currencyCode:currencyCode] build]]; // (NSString) Currency code + + + pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK]; + [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId]; + }]; +} + + + +- (void) addTransactionItem: (CDVInvokedUrlCommand*)command +{ + CDVPluginResult* pluginResult = nil; + + if ( ! _trackerStarted) { + pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Tracker not started"]; + [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId]; + return; + } + + [self.commandDelegate runInBackground:^{ + + CDVPluginResult* pluginResult = nil; + NSString *transactionId = nil; + NSString *name = nil; + NSString *sku = nil; + NSString *category = nil; + NSNumber *price = nil; + NSNumber *quantity = nil; + NSString *currencyCode = nil; + + + if ([command.arguments count] > 0) + transactionId = [command.arguments objectAtIndex:0]; + + if ([command.arguments count] > 1) + name = [command.arguments objectAtIndex:1]; + + if ([command.arguments count] > 2) + sku = [command.arguments objectAtIndex:2]; + + if ([command.arguments count] > 3) + category = [command.arguments objectAtIndex:3]; + + if ([command.arguments count] > 4) + price = [command.arguments objectAtIndex:4]; + + if ([command.arguments count] > 5) + quantity = [command.arguments objectAtIndex:5]; + + if ([command.arguments count] > 6) + currencyCode = [command.arguments objectAtIndex:6]; + + id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker]; + + + [tracker send:[[GAIDictionaryBuilder createItemWithTransactionId:transactionId // (NSString) Transaction ID + name:name // (NSString) Product Name + sku:sku // (NSString) Product SKU + category:category // (NSString) Product category + price:price // (NSNumber) Product price + quantity:quantity // (NSNumber) Product quantity + currencyCode:currencyCode] build]]; // (NSString) Currency code + + + pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK]; + [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId]; + }]; +} + +@end diff --git a/StoneIsland/plugins/cordova-plugin-google-analytics/ios/libAdIdAccess.a b/StoneIsland/plugins/cordova-plugin-google-analytics/ios/libAdIdAccess.a Binary files differnew file mode 100644 index 00000000..9813beaf --- /dev/null +++ b/StoneIsland/plugins/cordova-plugin-google-analytics/ios/libAdIdAccess.a diff --git a/StoneIsland/plugins/cordova-plugin-google-analytics/ios/libGoogleAnalyticsServices.a b/StoneIsland/plugins/cordova-plugin-google-analytics/ios/libGoogleAnalyticsServices.a Binary files differnew file mode 100644 index 00000000..45ca87e8 --- /dev/null +++ b/StoneIsland/plugins/cordova-plugin-google-analytics/ios/libGoogleAnalyticsServices.a diff --git a/StoneIsland/plugins/cordova-plugin-google-analytics/lavaca/AnalyticsService.js b/StoneIsland/plugins/cordova-plugin-google-analytics/lavaca/AnalyticsService.js new file mode 100644 index 00000000..6b789895 --- /dev/null +++ b/StoneIsland/plugins/cordova-plugin-google-analytics/lavaca/AnalyticsService.js @@ -0,0 +1,121 @@ +define(function(require) { + + var Disposable = require('lavaca/util/Disposable'); + var Config = require('lavaca/util/Config'); + var Device = require('lavaca/env/Device'); + var ga = require('google-analytics'); + + var AnalyticsService = Disposable.extend(function AnalyticsService() { + Disposable.call(this); + this.appId = Config.get('google_analytics_id'); + this.webId = Config.get('google_analytics_web_id'); + this.isWeb = this.webId.length; + + if (!Device.isCordova() && this.isWeb) { + ga('create', this.webId); + } + + document.addEventListener('deviceready', this.init.bind(this), false); + }, { + ready: false, + queue: [], + isWeb: false, + //isApp: false, //TODO need to research when Device.isCordova() is valid in Lavaca load flow + init: function() { + if (Device.isCordova() && analytics) { + this.ready = true; + analytics.startTrackerWithId(this.appId); + this.processQueue(); + this.isWeb = false; + } + }, + trackView: function(screen) { + if (Device.isCordova()) { + if (this.ready) { + analytics.trackView(screen); + } else { + this.queue.push({ + action: 'trackView', + params: [screen] + }); + } + } else if (this.isWeb) { + ga('send', 'pageview', { + 'title': screen + }); + } + }, + setUserId: function() { + throw 'setUserId is not implemented for Lavaca'; + }, + setAnonymizeIp: function() { + throw 'setAnonymizeIp is not implemented for Lavaca'; + }, + setOptOut: function() { + throw 'setOptOut is not implemented for Lavaca'; + }, + setAppVersion: function() { + throw 'setAppVersion is not implemented for Lavaca'; + }, + debugMode: function() { + throw 'debugMode is not implemented for Lavaca'; + }, + trackEvent: function(category, action, label, value) { + action = action || ''; + label = label || ''; + value = value || 0; + if (Device.isCordova()) { + if (this.ready) { + analytics.trackEvent(category, action, label, value); + } else { + this.queue.push({ + action: 'trackEvent', + params: [category, action, label, value] + }); + } + } else if (this.isWeb) { + ga('send', { + 'hitType': 'event', + 'eventCategory': category, + 'eventAction': action, + 'eventLabel': label, + 'eventValue': value + }); + } + }, + trackTiming: function(category, intervalInMilliseconds, name, label) { + action = action || ''; + label = label || ''; + value = value || 0; + if (Device.isCordova()) { + if (this.ready) { + analytics.trackTiming(category, intervalInMilliseconds, name, label); + } else { + this.queue.push({ + action: 'trackTiming', + params: [category, intervalInMilliseconds, name, label] + }); + } + } else if (this.isWeb) { + ga('send', { + 'hitType': 'timing', + 'timingCategory': category, + 'timingValue': intervalInMilliseconds, + 'timingVar': name, + 'timingLabel': label + }); + } + }, + processQueue: function() { + if (this.queue) { + var emptyFunction = function() {}; + for (var i = 0; i < this.queue.length; ++i) { + cordova.exec(emptyFunction, emptyFunction, + 'UniversalAnalytics', this.queue[i].action, this.queue[i].params); + } + } + } + }); + + return new AnalyticsService(); +}); diff --git a/StoneIsland/plugins/cordova-plugin-google-analytics/package.json b/StoneIsland/plugins/cordova-plugin-google-analytics/package.json new file mode 100644 index 00000000..548de86b --- /dev/null +++ b/StoneIsland/plugins/cordova-plugin-google-analytics/package.json @@ -0,0 +1,29 @@ +{ + "name": "cordova-plugin-google-analytics", + "version": "1.8.3", + "description": "Google Universal Analytics Plugin", + "cordova": { + "id": "cordova-plugin-google-analytics", + "platforms": [ + "android", + "ios" + ] + }, + "repository": { + "type": "git", + "url": "https://github.com/danwilson/google-analytics-plugin.git" + }, + "keywords": [ + "cordova", + "googleanalytics", + "ecosystem:cordova", + "cordova-android", + "cordova-ios", + "analytics", + "google", + "universal", + "universalanalytics" + ], + "author": "Dan Wilson", + "license": "MIT" +} diff --git a/StoneIsland/plugins/cordova-plugin-google-analytics/plugin.xml b/StoneIsland/plugins/cordova-plugin-google-analytics/plugin.xml new file mode 100644 index 00000000..55a8db9d --- /dev/null +++ b/StoneIsland/plugins/cordova-plugin-google-analytics/plugin.xml @@ -0,0 +1,99 @@ +<?xml version="1.0" encoding="UTF-8"?> +<plugin xmlns="http://apache.org/cordova/ns/plugins/1.0" xmlns:android="http://schemas.android.com/apk/res/android" + id="cordova-plugin-google-analytics" + version="1.8.3"> + <engines> + <engine name="cordova" version=">=3.0.0" /> + </engines> + <name>Google Universal Analytics Plugin</name> + <description>Simple tracking (screens/events) for Google Analytics SDK 3.14 (iOS), SDK 4.0 (Android), Browsers and WP8</description> + <author>Daniel C. Wilson</author> + <license>MIT License</license> + <js-module src="www/analytics.js" name="UniversalAnalytics"> + <!-- 'analytics' is deprecated, but supported to ease the transition --> + <clobbers target="analytics" /> + <clobbers target="ga" /> + </js-module> + + <platform name="browser"> + <js-module src="browser/UniversalAnalyticsProxy.js" name="UniversalAnalyticsProxy"> + <runs /> + </js-module> + </platform> + + <platform name="ios"> + <config-file target="config.xml" parent="/*"> + <feature name="UniversalAnalytics"> + <param name="ios-package" value="UniversalAnalyticsPlugin" /> + </feature> + </config-file> + + <header-file src="ios/UniversalAnalyticsPlugin.h" /> + <source-file src="ios/UniversalAnalyticsPlugin.m" /> + <source-file src="ios/libGoogleAnalyticsServices.a" framework="true" /> + <source-file src="ios/libAdIdAccess.a" framework="true" /> + <header-file src="ios/GAIDictionaryBuilder.h" /> + <header-file src="ios/GAIFields.h" /> + <header-file src="ios/GAILogger.h" /> + <header-file src="ios/GAITrackedViewController.h" /> + <header-file src="ios/GAI.h" /> + <header-file src="ios/GAITracker.h" /> + <header-file src="ios/GAIEcommerceFields.h" /> + <header-file src="ios/GAIEcommerceProduct.h" /> + <header-file src="ios/GAIEcommerceProductAction.h" /> + <header-file src="ios/GAIEcommercePromotion.h" /> + + <framework src="SystemConfiguration.framework" /> + <framework src="CoreData.framework" /> + <framework src="AdSupport.framework" /> + <framework src="libz.dylib" /> + <framework src="libsqlite3.dylib" /> + </platform> + + <platform name="android"> + <framework src="com.google.android.gms:play-services-analytics:+" /> + + <config-file target="res/xml/config.xml" parent="/*"> + <feature name="UniversalAnalytics"> + <param name="android-package" value="com.danielcwilson.plugins.analytics.UniversalAnalyticsPlugin" /> + </feature> + </config-file> + <config-file target="AndroidManifest.xml" parent="/*"> + <uses-permission android:name="android.permission.INTERNET" /> + <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> + </config-file> + <!-- Add support for devices without Google Play Services installed. --> + <config-file target="AndroidManifest.xml" parent="/manifest/application"> + <receiver android:name="com.google.android.gms.analytics.AnalyticsReceiver" android:enabled="true"> + <intent-filter> + <action android:name="com.google.android.gms.analytics.ANALYTICS_DISPATCH" /> + </intent-filter> + </receiver> + <service android:name="com.google.android.gms.analytics.AnalyticsService" android:enabled="true" android:exported="false"/> + <receiver android:name="com.google.android.gms.analytics.CampaignTrackingReceiver" android:enabled="true" android:exported="true"> + <intent-filter> + <action android:name="com.android.vending.INSTALL_REFERRER" /> + </intent-filter> + </receiver> + <service android:name="com.google.android.gms.analytics.CampaignTrackingService" android:enabled="true" android:exported="false"/> + </config-file> + <source-file src="android/UniversalAnalyticsPlugin.java" target-dir="src/com/danielcwilson/plugins/analytics" /> + </platform> + + <platform name="wp8"> + <config-file target="config.xml" parent="/*"> + <feature name="UniversalAnalytics"> + <param name="wp-package" value="UniversalAnalyticsPlugin" /> + </feature> + </config-file> + + <config-file target="Properties/WMAppManifest.xml" parent="/Deployment/App/Capabilities"> + <Capability Name="ID_CAP_NETWORKING" /> + </config-file> + + <source-file src="wp8/UniversalAnalytics.cs" /> + <source-file src="wp8/PhoneHelpers.cs" /> + <source-file src="wp8/PhoneNameResolver.cs" /> + <source-file src="wp8/PlatformInfoProvider.WP.cs" /> + </platform> +</plugin> diff --git a/StoneIsland/plugins/cordova-plugin-google-analytics/typescript/analytics.d.ts b/StoneIsland/plugins/cordova-plugin-google-analytics/typescript/analytics.d.ts new file mode 100644 index 00000000..d361ead8 --- /dev/null +++ b/StoneIsland/plugins/cordova-plugin-google-analytics/typescript/analytics.d.ts @@ -0,0 +1,62 @@ +declare class UniversalAnalyticsPlugin { + + /** In your 'deviceready' handler, call this to set up your Analytics tracker, + where id is your Google Analytics Mobile App property */ + public startTrackerWithId(id:String, dispatchPeriod?:Number, successCallback?:Function, errorCallback?:Function):void; + + /** Sets a UserId */ + public setUserId(id:String, successCallback?:Function, errorCallback?:Function):void; + + /** Sets a setAnonymizeIp */ + public setAnonymizeIp(anonymize:Boolean, successCallback?:Function, errorCallback?:Function):void; + + /** Sets a setOptOut */ + public setOptOut(optout:Boolean, successCallback?:Function, errorCallback?:Function): void; + + /** Sets a setAllowIDFACollection */ + public setAllowIDFACollection(enable:Boolean, successCallback?:Function, errorCallback?:Function):void; + + /** Sets a AppVersion */ + public setAppVersion(version:string, successCallback?:Function, errorCallback?:Function):void; + + /** Gets a specific variable using this key list https://developers.google.com/analytics/devguides/collection/protocol/v1/parameters */ + public getVar(variable:string, successCallback?:Function, errorCallback?:Function):void; + + /** Sets a specific variable using this key list https://developers.google.com/analytics/devguides/collection/protocol/v1/parameters */ + public setVar(variable:string, value:string, successCallback?:Function, errorCallback?:Function):void; + + /** To manually dispatch any data */ + public dispatch(successCallback?:Function, errorCallback?:Function); + + /** Enables verbose logging */ + public debugMode(successCallback?:Function, errorCallback?:Function):void; + + /** Track a Custom Metric */ + public trackMetric(key:number, value:String, successCallback?:Function, errorCallback?:Function):void; + + /** Track a Screen (PageView) */ + public trackView(screen:String, campaignUrl?:string, newSession?:boolean, successCallback?:Function, errorCallback?:Function):void; + + /** Add a Custom Dimension */ + public addCustomDimension(key:number, value:String, successCallback?:Function, errorCallback?:Function):void; + + /** Track an Event */ + public trackEvent(category:String, action:String, label?:String, value?:Number, newSession?:boolean, successCallback?:Function, errorCallback?:Function):void; + + /** Track an Exception + https://developers.google.com/analytics/devguides/collection/android/v3/exceptions */ + public trackException(description:String, fatal:Boolean, successCallback?:Function, errorCallback?:Function):void; + + /** Track User Timing (App Speed) */ + public trackTiming(category:String, intervalInMilliseconds?:Number, name?:String, label?:String, successCallback?:Function, errorCallback?:Function):void; + + /** Add a Transaction (Google Analytics e-Ccommerce Tracking) + https://developers.google.com/analytics/devguides/collection/analyticsjs/ecommerce */ + public addTransaction(transactionId:String, affiliation:String, revenue:Number, tax:Number, shipping:Number, currencyCode:String, successCallback?:Function, errorCallback?:Function):void; + + /** Add a Transaction Item (Ecommerce) */ + public addTransactionItem(transactionId:String, name:String, sku:String, category:String, price:Number, quantity:Number, currencyCode:String, successCallback?:Function, errorCallback?:Function):void; + + /** Enable/disable automatic reporting of uncaught exceptions */ + public enableUncaughtExceptionReporting(enable:Boolean, successCallback?:Function, errorCallback?:Function):void; +} diff --git a/StoneIsland/plugins/cordova-plugin-google-analytics/wp8/PhoneHelpers.cs b/StoneIsland/plugins/cordova-plugin-google-analytics/wp8/PhoneHelpers.cs new file mode 100644 index 00000000..4bf4f895 --- /dev/null +++ b/StoneIsland/plugins/cordova-plugin-google-analytics/wp8/PhoneHelpers.cs @@ -0,0 +1,30 @@ +using System; +using System.Xml; + +namespace UniversalAnalyticsPlugin +{ + internal static class Helpers + { + public static string GetAppAttribute(string attributeName) + { + try + { + XmlReaderSettings xmlReaderSettings = new XmlReaderSettings(); + xmlReaderSettings.XmlResolver = new XmlXapResolver(); + using (XmlReader xmlReader = XmlReader.Create("WMAppManifest.xml", xmlReaderSettings)) + { + xmlReader.ReadToDescendant("App"); + if (!xmlReader.IsStartElement()) + { + throw new FormatException("WMAppManifest.xml is missing"); + } + return xmlReader.GetAttribute(attributeName); + } + } + catch + { + return null; + } + } + } +} diff --git a/StoneIsland/plugins/cordova-plugin-google-analytics/wp8/PhoneNameResolver.cs b/StoneIsland/plugins/cordova-plugin-google-analytics/wp8/PhoneNameResolver.cs new file mode 100644 index 00000000..261739d0 --- /dev/null +++ b/StoneIsland/plugins/cordova-plugin-google-analytics/wp8/PhoneNameResolver.cs @@ -0,0 +1,578 @@ +/* + * Copyright (c) 2013 by Alan Mendelevich + * + * Licensed under MIT license. + * + * See license.txt for details. +*/ + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Text.RegularExpressions; + +namespace UniversalAnalyticsPlugin +{ + public static class PhoneNameResolver + { + public static CanonicalPhoneName Resolve(string manufacturer, string model) + { + var manufacturerNormalized = manufacturer.Trim().ToUpper(); + + switch (manufacturerNormalized) + { + case "NOKIA": + case "MICROSOFT": + case "MICROSOFTMDG": + return ResolveNokia(manufacturer, model); + case "HTC": + return ResolveHtc(manufacturer, model); + case "SAMSUNG": + return ResolveSamsung(manufacturer, model); + case "LG": + return ResolveLg(manufacturer, model); + case "HUAWEI": + return ResolveHuawei(manufacturer, model); + default: + return new CanonicalPhoneName() + { + ReportedManufacturer = manufacturer, + ReportedModel = model, + CanonicalManufacturer = manufacturer, + CanonicalModel = model, + IsResolved = false + }; + } + } + + private static CanonicalPhoneName ResolveHuawei(string manufacturer, string model) + { + var modelNormalized = model.Trim().ToUpper(); + + var result = new CanonicalPhoneName() + { + ReportedManufacturer = manufacturer, + ReportedModel = model, + CanonicalManufacturer = "HUAWEI", + CanonicalModel = model, + IsResolved = false + }; + + var lookupValue = modelNormalized; + + if (lookupValue.StartsWith("HUAWEI H883G")) + { + lookupValue = "HUAWEI H883G"; + } + + if (lookupValue.StartsWith("HUAWEI W1")) + { + lookupValue = "HUAWEI W1"; + } + + if (modelNormalized.StartsWith("HUAWEI W2")) + { + lookupValue = "HUAWEI W2"; + } + + if (huaweiLookupTable.ContainsKey(lookupValue)) + { + var modelMetadata = huaweiLookupTable[lookupValue]; + result.CanonicalModel = modelMetadata.CanonicalModel; + result.Comments = modelMetadata.Comments; + result.IsResolved = true; + } + + return result; + } + + private static CanonicalPhoneName ResolveLg(string manufacturer, string model) + { + var modelNormalized = model.Trim().ToUpper(); + + var result = new CanonicalPhoneName() + { + ReportedManufacturer = manufacturer, + ReportedModel = model, + CanonicalManufacturer = "LG", + CanonicalModel = model, + IsResolved = false + }; + + var lookupValue = modelNormalized; + + if (lookupValue.StartsWith("LG-C900")) + { + lookupValue = "LG-C900"; + } + + if (lookupValue.StartsWith("LG-E900")) + { + lookupValue = "LG-E900"; + } + + if (lgLookupTable.ContainsKey(lookupValue)) + { + var modelMetadata = lgLookupTable[lookupValue]; + result.CanonicalModel = modelMetadata.CanonicalModel; + result.Comments = modelMetadata.Comments; + result.IsResolved = true; + } + + return result; + } + + private static CanonicalPhoneName ResolveSamsung(string manufacturer, string model) + { + var modelNormalized = model.Trim().ToUpper(); + + var result = new CanonicalPhoneName() + { + ReportedManufacturer = manufacturer, + ReportedModel = model, + CanonicalManufacturer = "SAMSUNG", + CanonicalModel = model, + IsResolved = false + }; + + var lookupValue = modelNormalized; + + if (lookupValue.StartsWith("GT-S7530")) + { + lookupValue = "GT-S7530"; + } + + if (lookupValue.StartsWith("SGH-I917")) + { + lookupValue = "SGH-I917"; + } + + if (samsungLookupTable.ContainsKey(lookupValue)) + { + var modelMetadata = samsungLookupTable[lookupValue]; + result.CanonicalModel = modelMetadata.CanonicalModel; + result.Comments = modelMetadata.Comments; + result.IsResolved = true; + } + + return result; + } + + private static CanonicalPhoneName ResolveHtc(string manufacturer, string model) + { + var modelNormalized = model.Trim().ToUpper(); + + var result = new CanonicalPhoneName() + { + ReportedManufacturer = manufacturer, + ReportedModel = model, + CanonicalManufacturer = "HTC", + CanonicalModel = model, + IsResolved = false + }; + + var lookupValue = modelNormalized; + + if (lookupValue.StartsWith("A620")) + { + lookupValue = "A620"; + } + + if (lookupValue.StartsWith("C625")) + { + lookupValue = "C625"; + } + + if (lookupValue.StartsWith("C620")) + { + lookupValue = "C620"; + } + + if (htcLookupTable.ContainsKey(lookupValue)) + { + var modelMetadata = htcLookupTable[lookupValue]; + result.CanonicalModel = modelMetadata.CanonicalModel; + result.Comments = modelMetadata.Comments; + result.IsResolved = true; + } + + return result; + } + + private static CanonicalPhoneName ResolveNokia(string manufacturer, string model) + { + var modelNormalized = model.Trim().ToUpper(); + + var result = new CanonicalPhoneName() + { + ReportedManufacturer = manufacturer, + ReportedModel = model, + CanonicalManufacturer = "NOKIA", + CanonicalModel = model, + IsResolved = false + }; + + var lookupValue = modelNormalized; + if (modelNormalized.StartsWith("RM-")) + { + var rms = Regex.Match(modelNormalized, "(RM-)([0-9]+)"); + lookupValue = rms.Value; + } + + if (nokiaLookupTable.ContainsKey(lookupValue)) + { + var modelMetadata = nokiaLookupTable[lookupValue]; + + if (!string.IsNullOrEmpty(modelMetadata.CanonicalManufacturer)) + { + result.CanonicalManufacturer = modelMetadata.CanonicalManufacturer; + } + result.CanonicalModel = modelMetadata.CanonicalModel; + result.Comments = modelMetadata.Comments; + result.IsResolved = true; + } + + return result; + } + + + private static Dictionary<string, CanonicalPhoneName> huaweiLookupTable = new Dictionary<string, CanonicalPhoneName>() + { + // Huawei W1 + { "HUAWEI H883G", new CanonicalPhoneName() { CanonicalModel = "Ascend W1" } }, + { "HUAWEI W1", new CanonicalPhoneName() { CanonicalModel = "Ascend W1" } }, + + // Huawei Ascend W2 + { "HUAWEI W2", new CanonicalPhoneName() { CanonicalModel = "Ascend W2" } }, + }; + + private static Dictionary<string, CanonicalPhoneName> lgLookupTable = new Dictionary<string, CanonicalPhoneName>() + { + // Optimus 7Q/Quantum + { "LG-C900", new CanonicalPhoneName() { CanonicalModel = "Optimus 7Q/Quantum" } }, + + // Optimus 7 + { "LG-E900", new CanonicalPhoneName() { CanonicalModel = "Optimus 7" } }, + + // Jil Sander + { "LG-E906", new CanonicalPhoneName() { CanonicalModel = "Jil Sander" } }, + + // Lancet + { "LGVW820", new CanonicalPhoneName() { CanonicalModel = "Lancet" } }, + }; + + private static Dictionary<string, CanonicalPhoneName> samsungLookupTable = new Dictionary<string, CanonicalPhoneName>() + { + // OMNIA W + { "GT-I8350", new CanonicalPhoneName() { CanonicalModel = "Omnia W" } }, + { "GT-I8350T", new CanonicalPhoneName() { CanonicalModel = "Omnia W" } }, + { "OMNIA W", new CanonicalPhoneName() { CanonicalModel = "Omnia W" } }, + + // OMNIA 7 + { "GT-I8700", new CanonicalPhoneName() { CanonicalModel = "Omnia 7" } }, + { "OMNIA7", new CanonicalPhoneName() { CanonicalModel = "Omnia 7" } }, + + // OMNIA M + { "GT-S7530", new CanonicalPhoneName() { CanonicalModel = "Omnia 7" } }, + + // Focus + { "I917", new CanonicalPhoneName() { CanonicalModel = "Focus" } }, + { "SGH-I917", new CanonicalPhoneName() { CanonicalModel = "Focus" } }, + + // Focus 2 + { "SGH-I667", new CanonicalPhoneName() { CanonicalModel = "Focus 2" } }, + + // Focus Flash + { "SGH-I677", new CanonicalPhoneName() { CanonicalModel = "Focus Flash" } }, + + // Focus S + { "HADEN", new CanonicalPhoneName() { CanonicalModel = "Focus S" } }, + { "SGH-I937", new CanonicalPhoneName() { CanonicalModel = "Focus S" } }, + + // ATIV S + { "GT-I8750", new CanonicalPhoneName() { CanonicalModel = "ATIV S" } }, + { "SGH-T899M", new CanonicalPhoneName() { CanonicalModel = "ATIV S" } }, + + // ATIV Odyssey + { "SCH-I930", new CanonicalPhoneName() { CanonicalModel = "ATIV Odyssey" } }, + { "SCH-R860U", new CanonicalPhoneName() { CanonicalModel = "ATIV Odyssey", Comments="US Cellular" } }, + + // ATIV S Neo + { "SPH-I800", new CanonicalPhoneName() { CanonicalModel = "ATIV S Neo", Comments="Sprint" } }, + { "SGH-I187", new CanonicalPhoneName() { CanonicalModel = "ATIV S Neo", Comments="AT&T" } }, + { "GT-I8675", new CanonicalPhoneName() { CanonicalModel = "ATIV S Neo" } }, + + // ATIV SE + { "SM-W750V", new CanonicalPhoneName() { CanonicalModel = "ATIV SE", Comments="Verizon" } }, + }; + + private static Dictionary<string, CanonicalPhoneName> htcLookupTable = new Dictionary<string, CanonicalPhoneName>() + { + // Surround + { "7 MONDRIAN T8788", new CanonicalPhoneName() { CanonicalModel = "Surround" } }, + { "T8788", new CanonicalPhoneName() { CanonicalModel = "Surround" } }, + { "SURROUND", new CanonicalPhoneName() { CanonicalModel = "Surround" } }, + { "SURROUND T8788", new CanonicalPhoneName() { CanonicalModel = "Surround" } }, + + // Mozart + { "7 MOZART", new CanonicalPhoneName() { CanonicalModel = "Mozart" } }, + { "7 MOZART T8698", new CanonicalPhoneName() { CanonicalModel = "Mozart" } }, + { "HTC MOZART", new CanonicalPhoneName() { CanonicalModel = "Mozart" } }, + { "MERSAD 7 MOZART T8698", new CanonicalPhoneName() { CanonicalModel = "Mozart" } }, + { "MOZART", new CanonicalPhoneName() { CanonicalModel = "Mozart" } }, + { "MOZART T8698", new CanonicalPhoneName() { CanonicalModel = "Mozart" } }, + { "PD67100", new CanonicalPhoneName() { CanonicalModel = "Mozart" } }, + { "T8697", new CanonicalPhoneName() { CanonicalModel = "Mozart" } }, + + // Pro + { "7 PRO T7576", new CanonicalPhoneName() { CanonicalModel = "7 Pro" } }, + { "MWP6885", new CanonicalPhoneName() { CanonicalModel = "7 Pro" } }, + { "USCCHTC-PC93100", new CanonicalPhoneName() { CanonicalModel = "7 Pro" } }, + + // Arrive + { "PC93100", new CanonicalPhoneName() { CanonicalModel = "Arrive", Comments = "Sprint" } }, + { "T7575", new CanonicalPhoneName() { CanonicalModel = "Arrive", Comments = "Sprint" } }, + + // HD2 + { "HD2", new CanonicalPhoneName() { CanonicalModel = "HD2" } }, + { "HD2 LEO", new CanonicalPhoneName() { CanonicalModel = "HD2" } }, + { "LEO", new CanonicalPhoneName() { CanonicalModel = "HD2" } }, + + // HD7 + { "7 SCHUBERT T9292", new CanonicalPhoneName() { CanonicalModel = "HD7" } }, + { "GOLD", new CanonicalPhoneName() { CanonicalModel = "HD7" } }, + { "HD7", new CanonicalPhoneName() { CanonicalModel = "HD7" } }, + { "HD7 T9292", new CanonicalPhoneName() { CanonicalModel = "HD7" } }, + { "MONDRIAN", new CanonicalPhoneName() { CanonicalModel = "HD7" } }, + { "SCHUBERT", new CanonicalPhoneName() { CanonicalModel = "HD7" } }, + { "Schubert T9292", new CanonicalPhoneName() { CanonicalModel = "HD7" } }, + { "T9296", new CanonicalPhoneName() { CanonicalModel = "HD7", Comments = "Telstra, AU" } }, + { "TOUCH-IT HD7", new CanonicalPhoneName() { CanonicalModel = "HD7" } }, + + // HD7S + { "T9295", new CanonicalPhoneName() { CanonicalModel = "HD7S" } }, + + // Trophy + { "7 TROPHY", new CanonicalPhoneName() { CanonicalModel = "Trophy" } }, + { "7 TROPHY T8686", new CanonicalPhoneName() { CanonicalModel = "Trophy" } }, + { "PC40100", new CanonicalPhoneName() { CanonicalModel = "Trophy", Comments = "Verizon" } }, + { "SPARK", new CanonicalPhoneName() { CanonicalModel = "Trophy" } }, + { "TOUCH-IT TROPHY", new CanonicalPhoneName() { CanonicalModel = "Trophy" } }, + { "MWP6985", new CanonicalPhoneName() { CanonicalModel = "Trophy" } }, + + // 8S + { "A620", new CanonicalPhoneName() { CanonicalModel = "8S" } }, + { "WINDOWS PHONE 8S BY HTC", new CanonicalPhoneName() { CanonicalModel = "8S" } }, + + // 8X + { "C620", new CanonicalPhoneName() { CanonicalModel = "8X" } }, + { "C625", new CanonicalPhoneName() { CanonicalModel = "8X" } }, + { "HTC6990LVW", new CanonicalPhoneName() { CanonicalModel = "8X", Comments="Verizon" } }, + { "PM23300", new CanonicalPhoneName() { CanonicalModel = "8X", Comments="AT&T" } }, + { "WINDOWS PHONE 8X BY HTC", new CanonicalPhoneName() { CanonicalModel = "8X" } }, + + // 8XT + { "HTCPO881", new CanonicalPhoneName() { CanonicalModel = "8XT", Comments="Sprint" } }, + { "HTCPO881 SPRINT", new CanonicalPhoneName() { CanonicalModel = "8XT", Comments="Sprint" } }, + { "HTCPO881 HTC", new CanonicalPhoneName() { CanonicalModel = "8XT", Comments="Sprint" } }, + + // Titan + { "ETERNITY", new CanonicalPhoneName() { CanonicalModel = "Titan", Comments = "China" } }, + { "PI39100", new CanonicalPhoneName() { CanonicalModel = "Titan", Comments = "AT&T" } }, + { "TITAN X310E", new CanonicalPhoneName() { CanonicalModel = "Titan" } }, + { "ULTIMATE", new CanonicalPhoneName() { CanonicalModel = "Titan" } }, + { "X310E", new CanonicalPhoneName() { CanonicalModel = "Titan" } }, + { "X310E TITAN", new CanonicalPhoneName() { CanonicalModel = "Titan" } }, + + // Titan II + { "PI86100", new CanonicalPhoneName() { CanonicalModel = "Titan II", Comments = "AT&T" } }, + { "RADIANT", new CanonicalPhoneName() { CanonicalModel = "Titan II" } }, + + // Radar + { "RADAR", new CanonicalPhoneName() { CanonicalModel = "Radar" } }, + { "RADAR 4G", new CanonicalPhoneName() { CanonicalModel = "Radar", Comments = "T-Mobile USA" } }, + { "RADAR C110E", new CanonicalPhoneName() { CanonicalModel = "Radar" } }, + + // One M8 + { "HTC6995LVW", new CanonicalPhoneName() { CanonicalModel = "One (M8)", Comments="Verizon" } }, + { "0P6B180", new CanonicalPhoneName() { CanonicalModel = "One (M8)", Comments="AT&T" } }, + { "0P6B140", new CanonicalPhoneName() { CanonicalModel = "One (M8)", Comments="Dual SIM?" } }, + }; + + private static Dictionary<string, CanonicalPhoneName> nokiaLookupTable = new Dictionary<string, CanonicalPhoneName>() + { + // Lumia 505 + { "LUMIA 505", new CanonicalPhoneName() { CanonicalModel = "Lumia 505" } }, + // Lumia 510 + { "LUMIA 510", new CanonicalPhoneName() { CanonicalModel = "Lumia 510" } }, + { "NOKIA 510", new CanonicalPhoneName() { CanonicalModel = "Lumia 510" } }, + // Lumia 610 + { "LUMIA 610", new CanonicalPhoneName() { CanonicalModel = "Lumia 610" } }, + { "LUMIA 610 NFC", new CanonicalPhoneName() { CanonicalModel = "Lumia 610", Comments = "NFC" } }, + { "NOKIA 610", new CanonicalPhoneName() { CanonicalModel = "Lumia 610" } }, + { "NOKIA 610C", new CanonicalPhoneName() { CanonicalModel = "Lumia 610" } }, + // Lumia 620 + { "LUMIA 620", new CanonicalPhoneName() { CanonicalModel = "Lumia 620" } }, + { "RM-846", new CanonicalPhoneName() { CanonicalModel = "Lumia 620" } }, + // Lumia 710 + { "LUMIA 710", new CanonicalPhoneName() { CanonicalModel = "Lumia 710" } }, + { "NOKIA 710", new CanonicalPhoneName() { CanonicalModel = "Lumia 710" } }, + // Lumia 800 + { "LUMIA 800", new CanonicalPhoneName() { CanonicalModel = "Lumia 800" } }, + { "LUMIA 800C", new CanonicalPhoneName() { CanonicalModel = "Lumia 800" } }, + { "NOKIA 800", new CanonicalPhoneName() { CanonicalModel = "Lumia 800" } }, + { "NOKIA 800C", new CanonicalPhoneName() { CanonicalModel = "Lumia 800", Comments = "China" } }, + // Lumia 810 + { "RM-878", new CanonicalPhoneName() { CanonicalModel = "Lumia 810" } }, + // Lumia 820 + { "RM-824", new CanonicalPhoneName() { CanonicalModel = "Lumia 820" } }, + { "RM-825", new CanonicalPhoneName() { CanonicalModel = "Lumia 820" } }, + { "RM-826", new CanonicalPhoneName() { CanonicalModel = "Lumia 820" } }, + // Lumia 822 + { "RM-845", new CanonicalPhoneName() { CanonicalModel = "Lumia 822", Comments = "Verizon" } }, + // Lumia 900 + { "LUMIA 900", new CanonicalPhoneName() { CanonicalModel = "Lumia 900" } }, + { "NOKIA 900", new CanonicalPhoneName() { CanonicalModel = "Lumia 900" } }, + // Lumia 920 + { "RM-820", new CanonicalPhoneName() { CanonicalModel = "Lumia 920" } }, + { "RM-821", new CanonicalPhoneName() { CanonicalModel = "Lumia 920" } }, + { "RM-822", new CanonicalPhoneName() { CanonicalModel = "Lumia 920" } }, + { "RM-867", new CanonicalPhoneName() { CanonicalModel = "Lumia 920", Comments = "920T" } }, + { "NOKIA 920", new CanonicalPhoneName() { CanonicalModel = "Lumia 920" } }, + { "LUMIA 920", new CanonicalPhoneName() { CanonicalModel = "Lumia 920" } }, + // Lumia 520 + { "RM-914", new CanonicalPhoneName() { CanonicalModel = "Lumia 520" } }, + { "RM-915", new CanonicalPhoneName() { CanonicalModel = "Lumia 520" } }, + { "RM-913", new CanonicalPhoneName() { CanonicalModel = "Lumia 520", Comments="520T" } }, + // Lumia 521? + { "RM-917", new CanonicalPhoneName() { CanonicalModel = "Lumia 521", Comments="T-Mobile 520" } }, + // Lumia 720 + { "RM-885", new CanonicalPhoneName() { CanonicalModel = "Lumia 720" } }, + { "RM-887", new CanonicalPhoneName() { CanonicalModel = "Lumia 720", Comments="China 720T" } }, + // Lumia 928 + { "RM-860", new CanonicalPhoneName() { CanonicalModel = "Lumia 928" } }, + // Lumia 925 + { "RM-892", new CanonicalPhoneName() { CanonicalModel = "Lumia 925" } }, + { "RM-893", new CanonicalPhoneName() { CanonicalModel = "Lumia 925" } }, + { "RM-910", new CanonicalPhoneName() { CanonicalModel = "Lumia 925" } }, + { "RM-955", new CanonicalPhoneName() { CanonicalModel = "Lumia 925", Comments="China 925T" } }, + // Lumia 1020 + { "RM-875", new CanonicalPhoneName() { CanonicalModel = "Lumia 1020" } }, + { "RM-876", new CanonicalPhoneName() { CanonicalModel = "Lumia 1020" } }, + { "RM-877", new CanonicalPhoneName() { CanonicalModel = "Lumia 1020" } }, + // Lumia 625 + { "RM-941", new CanonicalPhoneName() { CanonicalModel = "Lumia 625" } }, + { "RM-942", new CanonicalPhoneName() { CanonicalModel = "Lumia 625" } }, + { "RM-943", new CanonicalPhoneName() { CanonicalModel = "Lumia 625" } }, + // Lumia 1520 + { "RM-937", new CanonicalPhoneName() { CanonicalModel = "Lumia 1520" } }, + { "RM-938", new CanonicalPhoneName() { CanonicalModel = "Lumia 1520", Comments="AT&T" } }, + { "RM-939", new CanonicalPhoneName() { CanonicalModel = "Lumia 1520" } }, + { "RM-940", new CanonicalPhoneName() { CanonicalModel = "Lumia 1520", Comments="AT&T" } }, + // Lumia 525 + { "RM-998", new CanonicalPhoneName() { CanonicalModel = "Lumia 525" } }, + // Lumia 1320 + { "RM-994", new CanonicalPhoneName() { CanonicalModel = "Lumia 1320" } }, + { "RM-995", new CanonicalPhoneName() { CanonicalModel = "Lumia 1320" } }, + { "RM-996", new CanonicalPhoneName() { CanonicalModel = "Lumia 1320" } }, + // Lumia Icon + { "RM-927", new CanonicalPhoneName() { CanonicalModel = "Lumia Icon", Comments="Verizon" } }, + // Lumia 630 + { "RM-976", new CanonicalPhoneName() { CanonicalModel = "Lumia 630" } }, + { "RM-977", new CanonicalPhoneName() { CanonicalModel = "Lumia 630" } }, + { "RM-978", new CanonicalPhoneName() { CanonicalModel = "Lumia 630" } }, + { "RM-979", new CanonicalPhoneName() { CanonicalModel = "Lumia 630" } }, + // Lumia 635 + { "RM-974", new CanonicalPhoneName() { CanonicalModel = "Lumia 635" } }, + { "RM-975", new CanonicalPhoneName() { CanonicalModel = "Lumia 635" } }, + { "RM-1078", new CanonicalPhoneName() { CanonicalModel = "Lumia 635", Comments="Sprint" } }, + // Lumia 526 + { "RM-997", new CanonicalPhoneName() { CanonicalModel = "Lumia 526", Comments="China Mobile" } }, + // Lumia 930 + { "RM-1045", new CanonicalPhoneName() { CanonicalModel = "Lumia 930" } }, + { "RM-1087", new CanonicalPhoneName() { CanonicalModel = "Lumia 930" } }, + // Lumia 636 + { "RM-1027", new CanonicalPhoneName() { CanonicalModel = "Lumia 636", Comments="China" } }, + // Lumia 638 + { "RM-1010", new CanonicalPhoneName() { CanonicalModel = "Lumia 638", Comments="China" } }, + // Lumia 530 + { "RM-1017", new CanonicalPhoneName() { CanonicalModel = "Lumia 530", Comments="Single SIM" } }, + { "RM-1018", new CanonicalPhoneName() { CanonicalModel = "Lumia 530", Comments="Single SIM" } }, + { "RM-1019", new CanonicalPhoneName() { CanonicalModel = "Lumia 530", Comments="Dual SIM" } }, + { "RM-1020", new CanonicalPhoneName() { CanonicalModel = "Lumia 530", Comments="Dual SIM" } }, + // Lumia 730 + { "RM-1040", new CanonicalPhoneName() { CanonicalModel = "Lumia 730", Comments="Dual SIM" } }, + // Lumia 735 + { "RM-1038", new CanonicalPhoneName() { CanonicalModel = "Lumia 735" } }, + { "RM-1039", new CanonicalPhoneName() { CanonicalModel = "Lumia 735" } }, + { "RM-1041", new CanonicalPhoneName() { CanonicalModel = "Lumia 735", Comments="Verizon" } }, + // Lumia 830 + { "RM-983", new CanonicalPhoneName() { CanonicalModel = "Lumia 830" } }, + { "RM-984", new CanonicalPhoneName() { CanonicalModel = "Lumia 830" } }, + { "RM-985", new CanonicalPhoneName() { CanonicalModel = "Lumia 830" } }, + { "RM-1049", new CanonicalPhoneName() { CanonicalModel = "Lumia 830" } }, + // Lumia 535 + { "RM-1089", new CanonicalPhoneName() { CanonicalManufacturer="MICROSOFT", CanonicalModel = "Lumia 535" } }, + { "RM-1090", new CanonicalPhoneName() { CanonicalManufacturer="MICROSOFT", CanonicalModel = "Lumia 535" } }, + { "RM-1091", new CanonicalPhoneName() { CanonicalManufacturer="MICROSOFT", CanonicalModel = "Lumia 535" } }, + { "RM-1092", new CanonicalPhoneName() { CanonicalManufacturer="MICROSOFT", CanonicalModel = "Lumia 535" } }, + // Lumia 435 + { "RM-1068", new CanonicalPhoneName() { CanonicalManufacturer="MICROSOFT", CanonicalModel = "Lumia 435", Comments="DS" } }, + { "RM-1069", new CanonicalPhoneName() { CanonicalManufacturer="MICROSOFT", CanonicalModel = "Lumia 435", Comments="DS" } }, + { "RM-1070", new CanonicalPhoneName() { CanonicalManufacturer="MICROSOFT", CanonicalModel = "Lumia 435", Comments="DS" } }, + { "RM-1071", new CanonicalPhoneName() { CanonicalManufacturer="MICROSOFT", CanonicalModel = "Lumia 435", Comments="DS" } }, + { "RM-1114", new CanonicalPhoneName() { CanonicalManufacturer="MICROSOFT", CanonicalModel = "Lumia 435", Comments="DS" } }, + // Lumia 532 + { "RM-1031", new CanonicalPhoneName() { CanonicalManufacturer="MICROSOFT", CanonicalModel = "Lumia 532", Comments="DS" } }, + { "RM-1032", new CanonicalPhoneName() { CanonicalManufacturer="MICROSOFT", CanonicalModel = "Lumia 532", Comments="DS" } }, + { "RM-1034", new CanonicalPhoneName() { CanonicalManufacturer="MICROSOFT", CanonicalModel = "Lumia 532", Comments="DS" } }, + { "RM-1115", new CanonicalPhoneName() { CanonicalManufacturer="MICROSOFT", CanonicalModel = "Lumia 532", Comments="DS" } }, + // Lumia 640 + { "RM-1072", new CanonicalPhoneName() { CanonicalManufacturer="MICROSOFT", CanonicalModel = "Lumia 640" } }, + { "RM-1073", new CanonicalPhoneName() { CanonicalManufacturer="MICROSOFT", CanonicalModel = "Lumia 640" } }, + { "RM-1074", new CanonicalPhoneName() { CanonicalManufacturer="MICROSOFT", CanonicalModel = "Lumia 640" } }, + { "RM-1075", new CanonicalPhoneName() { CanonicalManufacturer="MICROSOFT", CanonicalModel = "Lumia 640" } }, + { "RM-1077", new CanonicalPhoneName() { CanonicalManufacturer="MICROSOFT", CanonicalModel = "Lumia 640" } }, + { "RM-1109", new CanonicalPhoneName() { CanonicalManufacturer="MICROSOFT", CanonicalModel = "Lumia 640" } }, + { "RM-1113", new CanonicalPhoneName() { CanonicalManufacturer="MICROSOFT", CanonicalModel = "Lumia 640" } }, + // Lumia 640XL + { "RM-1062", new CanonicalPhoneName() { CanonicalManufacturer="MICROSOFT", CanonicalModel = "Lumia 640 XL" } }, + { "RM-1063", new CanonicalPhoneName() { CanonicalManufacturer="MICROSOFT", CanonicalModel = "Lumia 640 XL" } }, + { "RM-1064", new CanonicalPhoneName() { CanonicalManufacturer="MICROSOFT", CanonicalModel = "Lumia 640 XL" } }, + { "RM-1065", new CanonicalPhoneName() { CanonicalManufacturer="MICROSOFT", CanonicalModel = "Lumia 640 XL" } }, + { "RM-1066", new CanonicalPhoneName() { CanonicalManufacturer="MICROSOFT", CanonicalModel = "Lumia 640 XL" } }, + { "RM-1067", new CanonicalPhoneName() { CanonicalManufacturer="MICROSOFT", CanonicalModel = "Lumia 640 XL" } }, + { "RM-1096", new CanonicalPhoneName() { CanonicalManufacturer="MICROSOFT", CanonicalModel = "Lumia 640 XL" } }, + // Lumia 540 + { "RM-1140", new CanonicalPhoneName() { CanonicalManufacturer="MICROSOFT", CanonicalModel = "Lumia 540" } }, + { "RM-1141", new CanonicalPhoneName() { CanonicalManufacturer="MICROSOFT", CanonicalModel = "Lumia 540" } }, + // Lumia 430 + { "RM-1099", new CanonicalPhoneName() { CanonicalManufacturer="MICROSOFT", CanonicalModel = "Lumia 430", Comments="DS" } }, + // Lumia 950 + { "RM-1104", new CanonicalPhoneName() { CanonicalManufacturer="MICROSOFT", CanonicalModel = "Lumia 950", Comments="DS" } }, + { "RM-1105", new CanonicalPhoneName() { CanonicalManufacturer="MICROSOFT", CanonicalModel = "Lumia 950", Comments="DS" } }, + { "RM-1118", new CanonicalPhoneName() { CanonicalManufacturer="MICROSOFT", CanonicalModel = "Lumia 950", Comments="DS" } }, + // Lumia 950 XL + { "RM-1085", new CanonicalPhoneName() { CanonicalManufacturer="MICROSOFT", CanonicalModel = "Lumia 950 XL" } }, + { "RM-1116", new CanonicalPhoneName() { CanonicalManufacturer="MICROSOFT", CanonicalModel = "Lumia 950 XL", Comments="DS" } }, + // Lumia 550 + { "RM-1127", new CanonicalPhoneName() { CanonicalManufacturer="MICROSOFT", CanonicalModel = "Lumia 550" } }, + }; + } + + public class CanonicalPhoneName + { + public string ReportedManufacturer { get; set; } + public string ReportedModel { get; set; } + public string CanonicalManufacturer { get; set; } + public string CanonicalModel { get; set; } + public string Comments { get; set; } + public bool IsResolved { get; set; } + + public string FullCanonicalName + { + get { return CanonicalManufacturer + " " + CanonicalModel; } + } + } +}
\ No newline at end of file diff --git a/StoneIsland/plugins/cordova-plugin-google-analytics/wp8/PlatformInfoProvider.WP.cs b/StoneIsland/plugins/cordova-plugin-google-analytics/wp8/PlatformInfoProvider.WP.cs new file mode 100644 index 00000000..4e1257f9 --- /dev/null +++ b/StoneIsland/plugins/cordova-plugin-google-analytics/wp8/PlatformInfoProvider.WP.cs @@ -0,0 +1,103 @@ +// PlatformInfoProvider.WP.cs + +using GoogleAnalytics.Core; +using System; +using System.IO.IsolatedStorage; +using System.Threading.Tasks; +using System.Windows; + +namespace UniversalAnalyticsPlugin +{ + public sealed class PlatformInfoProvider : IPlatformInfoProvider + { + const string Key_AnonymousClientId = "GoogleAnaltyics.AnonymousClientId"; + string anonymousClientId; + Dimensions _screenResolution = new Dimensions(0,0); + +#pragma warning disable 0067 + public event EventHandler ViewPortResolutionChanged; + + public event EventHandler ScreenResolutionChanged; +#pragma warning restore 0067 + + public PlatformInfoProvider() + { + Deployment.Current.Dispatcher.BeginInvoke(() => { + double scale = (double)Application.Current.Host.Content.ScaleFactor / 100; + int h = (int)Math.Ceiling(Application.Current.Host.Content.ActualHeight * scale); + int w = (int)Math.Ceiling(Application.Current.Host.Content.ActualWidth * scale); + _screenResolution = new Dimensions(h, w); + }); + } + + public string AnonymousClientId + { + get + { + if (anonymousClientId == null) + { + var appSettings = IsolatedStorageSettings.ApplicationSettings; + if (!appSettings.Contains(Key_AnonymousClientId)) + { + anonymousClientId = Guid.NewGuid().ToString(); + appSettings.Add(Key_AnonymousClientId, anonymousClientId); + appSettings.Save(); + } + else + { + anonymousClientId = (string)appSettings[Key_AnonymousClientId]; + } + } + return anonymousClientId; + } + set { anonymousClientId = value; } + } + + public Dimensions ScreenResolution + { + get + { + return _screenResolution; + } + } + + public Dimensions ViewPortResolution + { + get { return ScreenResolution; } + } + + public string UserLanguage + { + get { return System.Globalization.CultureInfo.CurrentUICulture.Name; } + } + + public int? ScreenColorDepthBits + { + get { return null; } + } + + public void OnTracking() + { } + + public string GetUserAgent() + { + var sysInfo = UniversalAnalyticsPlugin.PhoneNameResolver.Resolve(Microsoft.Phone.Info.DeviceStatus.DeviceManufacturer, Microsoft.Phone.Info.DeviceStatus.DeviceName); + Version osVer = Environment.OSVersion.Version; + string uaMask; + + if (osVer.Minor == 10) + { + // Windows Phone 8.1 + uaMask = "Mozilla/5.0 (Windows Phone 8.1; ARM; Trident/7.0; Touch; rv11.0; IEMobile/11.0; {1}; {2}) like Gecko"; + } + else + { + // Windows Phone 8.0 + uaMask = "Mozilla/5.0 (compatible; MSIE 10.0; Windows Phone OS {0}; Trident/6.0; IEMobile/10.0; ARM; Touch; {1}; {2})"; + } + + //var userAgentMask = "Mozilla/[version] ([system and browser information]) [platform] ([platform details]) [extensions]"; + return string.Format(uaMask, Environment.OSVersion.Version, sysInfo.CanonicalManufacturer, sysInfo.CanonicalModel); + } + } +} diff --git a/StoneIsland/plugins/cordova-plugin-google-analytics/wp8/UniversalAnalytics.cs b/StoneIsland/plugins/cordova-plugin-google-analytics/wp8/UniversalAnalytics.cs new file mode 100644 index 00000000..b4307922 --- /dev/null +++ b/StoneIsland/plugins/cordova-plugin-google-analytics/wp8/UniversalAnalytics.cs @@ -0,0 +1,399 @@ +/* + * Copyright (c) 2016 Dan Polivy + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + * the Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +using System; +using GoogleAnalytics.Core; +using WPCordovaClassLib.Cordova; +using WPCordovaClassLib.Cordova.Commands; +using WPCordovaClassLib.Cordova.JSON; +using System.Collections.Generic; +using System.Windows; +using System.Diagnostics; +using System.Threading.Tasks; +using Microsoft.Phone.Shell; + +namespace Cordova.Extension.Commands +{ + /// <summary> + /// UniversalAnalytics plugin class containing methods called from JavaScript + /// </summary> + public class UniversalAnalytics : BaseCommand + { + private TrackerManager _trackerManager = new TrackerManager(new UniversalAnalyticsPlugin.PlatformInfoProvider()); + private Tracker _tracker; + private bool _trackerStarted = false; + DateTime? _suspended; + private IDictionary<int, string> _customDimensions = new Dictionary<int, string>(); + + public UniversalAnalytics() + { + this.AutoAppLifetimeTracking = false; + this.SessionTimeout = 30; + } + + /// <summary> + /// Session timeout length, in seconds. + /// </summary> + public int? SessionTimeout { + get; + set; + } + + /// <summary> + /// Determines whether events are automatically sent for app lifetime tracking. + /// </summary> + public bool AutoAppLifetimeTracking { get; set; } + + public void startTrackerWithId(string options) + { + // If the tracker is already started, don't start it again + if (_trackerStarted) + { + DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, "Tracker is already started")); + return; + } + + string[] args = JsonHelper.Deserialize<string[]>(options); + + if (!_trackerStarted && args.Length > 0 && args[0].Length > 0) + { + _tracker = _trackerManager.GetTracker(args[0]); + + // Set additional Tracker parameters here + _tracker.SetStartSession(true); + _tracker.IsUseSecure = true; + _tracker.AppName = UniversalAnalyticsPlugin.Helpers.GetAppAttribute("Title"); + _tracker.AppVersion = UniversalAnalyticsPlugin.Helpers.GetAppAttribute("Version"); + + _trackerStarted = true; + + Deployment.Current.Dispatcher.BeginInvoke(() => + { + Application.Current.UnhandledException += Analytics_UnhandledException; + TaskScheduler.UnobservedTaskException += TaskScheduler_UnobservedTaskException; + }); + + DispatchCommandResult(new PluginResult(PluginResult.Status.OK, "Tracker started")); + } + else + { + DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, "Tracker id is not valid")); + } + } + + public override void OnResume(object sender, ActivatedEventArgs e) + { + if (_suspended.HasValue && SessionTimeout.HasValue) + { + var suspendedAgo = DateTime.UtcNow.Subtract(_suspended.Value); + if (suspendedAgo > TimeSpan.FromSeconds((double)SessionTimeout)) + { + _tracker.SetStartSession(true); + } + } + + if (_trackerStarted && AutoAppLifetimeTracking) + { + _tracker.SendEvent("app", "resume", !e.IsApplicationInstancePreserved ? "tombstoned" : null, 0); + } + } + + public override void OnPause(object sender, DeactivatedEventArgs e) + { + if (_trackerStarted && AutoAppLifetimeTracking) + { + _tracker.SendEvent("app", "suspend", e.Reason.ToString(), 0); + } + + _suspended = DateTime.UtcNow; + } + + private void TaskScheduler_UnobservedTaskException(object sender, UnobservedTaskExceptionEventArgs e) + { + var ex = e.Exception.InnerException ?? e.Exception; // inner exception contains better info for unobserved tasks + _tracker.SendException(ex.ToString(), false); + } + + private void Analytics_UnhandledException(object sender, ApplicationUnhandledExceptionEventArgs e) + { + _tracker.SendException(e.ExceptionObject.ToString(), true); + + if (Debugger.IsAttached) + { + // An unhandled exception has occurred; break into the debugger + Debugger.Break(); + } + } + + public void setUserId(string options) + { + if (!_trackerStarted) + { + DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, "Tracker not started")); + return; + } + + string[] args = JsonHelper.Deserialize<string[]>(options); + string userId = null; + + if (args.Length > 0) userId = args[0]; + + _tracker.UserId = userId; + DispatchCommandResult(new PluginResult(PluginResult.Status.OK, "Set user id: " + args[0])); + } + + public void debugMode(string options) + { + _trackerManager.IsDebugEnabled = true; + + DispatchCommandResult(new PluginResult(PluginResult.Status.OK, "debugMode enabled")); + } + + public void trackView(string options) + { + if (!_trackerStarted) + { + DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, "Tracker not started")); + return; + } + + string[] args = JsonHelper.Deserialize<string[]>(options); + + if (args.Length > 0 && args[0] != null && args[0].Length > 0) + { + addCustomDimensionsToTracker(_tracker); + _tracker.SendView(args[0]); + DispatchCommandResult(new PluginResult(PluginResult.Status.OK, "Track Screen: " + args[0])); + } + else + { + DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, "Expected one non-empty string argument")); + } + } + + public void addCustomDimension(string options) + { + string[] args = JsonHelper.Deserialize<string[]>(options); + + int index = 0; + bool hasIndex = false; + string value = null; + + if (args.Length > 0) hasIndex = int.TryParse(args[0], out index); + if (args.Length > 1) value = args[1]; + + if (hasIndex && value != null) + { + // Remove the key if it already exists + _customDimensions.Remove(index); + _customDimensions.Add(index, value); + DispatchCommandResult(new PluginResult(PluginResult.Status.OK, "Add Custom Dimension: " + index)); + } + else + { + DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, "Expected non-empty integer, string arguments")); + } + } + + public void trackEvent(string options) + { + if (!_trackerStarted) + { + DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, "Tracker not started")); + return; + } + + string[] args = JsonHelper.Deserialize<string[]>(options); + + // Default values + string category = null, action = null, label = null; + long value = 0; + + if (args.Length > 0) category = args[0]; + if (args.Length > 1) action = args[1]; + if (args.Length > 2) label = args[2]; + if (args.Length > 3) long.TryParse(args[3], out value); + + addCustomDimensionsToTracker(_tracker); + _tracker.SendEvent(category, action, label, value); + + DispatchCommandResult(new PluginResult(PluginResult.Status.OK, "Track Event: " + category)); + } + + public void trackException(string options) + { + if (!_trackerStarted) + { + DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, "Tracker not started")); + return; + } + + string[] args = JsonHelper.Deserialize<string[]>(options); + + if (args.Length == 0 || args[0] == null || args[0].Length == 0) + { + DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, "Expected non-empty string arguments.")); + return; + } + + // Default values + string description = null; + bool isFatal = false; + + if (args.Length > 0) description = args[0]; + if (args.Length > 1) bool.TryParse(args[1], out isFatal); + + addCustomDimensionsToTracker(_tracker); + _tracker.SendException(description, isFatal); + + DispatchCommandResult(new PluginResult(PluginResult.Status.OK, "Track Exception: " + description)); + } + + public void trackTiming(string options) + { + if (!_trackerStarted) + { + DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, "Tracker not started")); + return; + } + + string[] args = JsonHelper.Deserialize<string[]>(options); + + if (args.Length == 0 || args[0] == null || args[0].Length == 0) + { + DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, "Expected non-empty string arguments.")); + return; + } + + // Default values + string category = null, variable = null, label = null; + long intervalInMs = 0; + + if (args.Length > 0) category = args[0]; + if (args.Length > 1) long.TryParse(args[1], out intervalInMs); + if (args.Length > 2) variable = args[2]; + if (args.Length > 3) label = args[3]; + + addCustomDimensionsToTracker(_tracker); + _tracker.SendTiming(TimeSpan.FromMilliseconds(intervalInMs), category, variable, label); + + DispatchCommandResult(new PluginResult(PluginResult.Status.OK, "Track Timing: " + category)); + } + + public void addTransaction(string options) + { + if (!_trackerStarted) + { + DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, "Tracker not started")); + return; + } + + string[] args = JsonHelper.Deserialize<string[]>(options); + + if (args.Length == 0 || args[0] == null || args[0].Length == 0) + { + DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, "Expected non-empty ID.")); + return; + } + + Transaction transaction = new Transaction(); + + // Default values + double revenue = 0, tax = 0, shipping = 0; + + if (args.Length > 0) transaction.TransactionId = args[0]; + if (args.Length > 1) transaction.Affiliation = args[1]; + if (args.Length > 2) + { + double.TryParse(args[2], out revenue); + transaction.TotalCostInMicros = (long)(revenue * 1000000); + } + if (args.Length > 3) + { + double.TryParse(args[3], out tax); + transaction.TotalTaxInMicros = (long)(tax * 1000000); + } + if (args.Length > 4) + { + double.TryParse(args[4], out shipping); + transaction.ShippingCostInMicros = (long)(shipping * 1000000); + } + if (args.Length > 5) transaction.CurrencyCode = args[5]; + + addCustomDimensionsToTracker(_tracker); + _tracker.SendTransaction(transaction); + + DispatchCommandResult(new PluginResult(PluginResult.Status.OK, "Add Transaction: " + transaction.TransactionId)); + } + + public void addTransactionItem(string options) + { + if (!_trackerStarted) + { + DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, "Tracker not started")); + return; + } + + string[] args = JsonHelper.Deserialize<string[]>(options); + + if (args.Length == 0 || args[0] == null || args[0].Length == 0) + { + DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, "Expected non-empty ID.")); + return; + } + + TransactionItem transactionItem = new TransactionItem(); + + // Default values + double price = 0; + long quantity = 0; + + if (args.Length > 0) transactionItem.TransactionId = args[0]; + if (args.Length > 1) transactionItem.Name = args[1]; + if (args.Length > 2) transactionItem.SKU = args[2]; + if (args.Length > 3) transactionItem.Category = args[3]; + if (args.Length > 4) + { + double.TryParse(args[4], out price); + transactionItem.PriceInMicros = (long)(price * 1000000); + } + if (args.Length > 5) + { + long.TryParse(args[5], out quantity); + transactionItem.Quantity = quantity; + } + if (args.Length > 6) transactionItem.CurrencyCode = args[6]; + + addCustomDimensionsToTracker(_tracker); + _tracker.SendTransactionItem(transactionItem); + + DispatchCommandResult(new PluginResult(PluginResult.Status.OK, "Add Transaction Item: " + transactionItem.TransactionId)); + } + + private void addCustomDimensionsToTracker(Tracker tracker) + { + foreach (KeyValuePair<int, string> dimension in _customDimensions) + { + tracker.SetCustomDimension(dimension.Key, dimension.Value); + } + } + } +}
\ No newline at end of file diff --git a/StoneIsland/plugins/cordova-plugin-google-analytics/www/analytics.js b/StoneIsland/plugins/cordova-plugin-google-analytics/www/analytics.js new file mode 100644 index 00000000..03b4a9d4 --- /dev/null +++ b/StoneIsland/plugins/cordova-plugin-google-analytics/www/analytics.js @@ -0,0 +1,127 @@ +function UniversalAnalyticsPlugin() {} + +UniversalAnalyticsPlugin.prototype.startTrackerWithId = function(id, dispatchPeriod, success, error) { + if (typeof dispatchPeriod === 'undefined' || dispatchPeriod === null) { + dispatchPeriod = 30; + } else if (typeof dispatchPeriod === 'function' && typeof error === 'undefined') { + // Called without dispatchPeriod but with a callback. + // Looks like the original API was used so shift parameters over to remain compatible. + error = success; + success = dispatchPeriod; + dispatchPeriod = 30; + } + cordova.exec(success, error, 'UniversalAnalytics', 'startTrackerWithId', [id, dispatchPeriod]); +}; + +UniversalAnalyticsPlugin.prototype.setAllowIDFACollection = function(enable, success, error) { + cordova.exec(success, error, 'UniversalAnalytics', 'setAllowIDFACollection', [enable]); +}; + +UniversalAnalyticsPlugin.prototype.setUserId = function(id, success, error) { + cordova.exec(success, error, 'UniversalAnalytics', 'setUserId', [id]); +}; + +UniversalAnalyticsPlugin.prototype.setAnonymizeIp = function(anonymize, success, error) { + cordova.exec(success, error, 'UniversalAnalytics', 'setAnonymizeIp', [anonymize]); +}; + +UniversalAnalyticsPlugin.prototype.setOptOut = function(optout, success, error) { + cordova.exec(success, error, 'UniversalAnalytics', 'setOptOut', [optout]); +}; + +UniversalAnalyticsPlugin.prototype.setAppVersion = function(version, success, error) { + cordova.exec(success, error, 'UniversalAnalytics', 'setAppVersion', [version]); +}; + +UniversalAnalyticsPlugin.prototype.getVar = function(variable, success, error) { + cordova.exec(success, error, 'UniversalAnalytics', 'getVar', [variable]); +}; + +UniversalAnalyticsPlugin.prototype.setVar = function(variable, value, success, error) { + cordova.exec(success, error, 'UniversalAnalytics', 'setVar', [variable, value]); +}; + +UniversalAnalyticsPlugin.prototype.dispatch = function(success, error) { + cordova.exec(success, error, 'UniversalAnalytics', 'dispatch', []); +}; + +/* enables verbose logging */ +UniversalAnalyticsPlugin.prototype.debugMode = function(success, error) { + cordova.exec(success, error, 'UniversalAnalytics', 'debugMode', []); +}; + +UniversalAnalyticsPlugin.prototype.trackMetric = function(key, value, success, error) { + cordova.exec(success, error, 'UniversalAnalytics', 'trackMetric', [key, value]); +}; + +UniversalAnalyticsPlugin.prototype.trackView = function(screen, campaignUrl, newSession, success, error) { + if (typeof campaignUrl === 'undefined' || campaignUrl === null) { + campaignUrl = ''; + } + + if (typeof newSession === 'undefined' || newSession === null) { + newSession = false; + } + + cordova.exec(success, error, 'UniversalAnalytics', 'trackView', [screen, campaignUrl, newSession]); +}; + +UniversalAnalyticsPlugin.prototype.addCustomDimension = function(key, value, success, error) { + if (typeof key !== "number") { + throw Error("key must be a valid integer not '" + typeof key + "'"); + } + cordova.exec(success, error, 'UniversalAnalytics', 'addCustomDimension', [key, value]); +}; + +UniversalAnalyticsPlugin.prototype.trackEvent = function(category, action, label, value, newSession, success, error) { + if (typeof label === 'undefined' || label === null) { + label = ''; + } + if (typeof value === 'undefined' || value === null) { + value = 0; + } + + if (typeof newSession === 'undefined' || newSession === null) { + newSession = false; + } + + cordova.exec(success, error, 'UniversalAnalytics', 'trackEvent', [category, action, label, value, newSession]); +}; + +/** + * https://developers.google.com/analytics/devguides/collection/android/v3/exceptions + */ +UniversalAnalyticsPlugin.prototype.trackException = function(description, fatal, success, error) { + cordova.exec(success, error, 'UniversalAnalytics', 'trackException', [description, fatal]); +}; + +UniversalAnalyticsPlugin.prototype.trackTiming = function(category, intervalInMilliseconds, name, label, success, error) { + if (typeof intervalInMilliseconds === 'undefined' || intervalInMilliseconds === null) { + intervalInMilliseconds = 0; + } + if (typeof name === 'undefined' || name === null) { + name = ''; + } + if (typeof label === 'undefined' || label === null) { + label = ''; + } + + cordova.exec(success, error, 'UniversalAnalytics', 'trackTiming', [category, intervalInMilliseconds, name, label]); +}; + +/* Google Analytics e-Commerce Tracking */ +/* https://developers.google.com/analytics/devguides/collection/analyticsjs/ecommerce */ +UniversalAnalyticsPlugin.prototype.addTransaction = function(transactionId, affiliation, revenue, tax, shipping, currencyCode, success, error) { + cordova.exec(success, error, 'UniversalAnalytics', 'addTransaction', [transactionId, affiliation, revenue, tax, shipping, currencyCode]); +}; + +UniversalAnalyticsPlugin.prototype.addTransactionItem = function(transactionId, name ,sku, category, price, quantity, currencyCode, success, error) { + cordova.exec(success, error, 'UniversalAnalytics', 'addTransactionItem', [transactionId, name ,sku, category, price, quantity, currencyCode]); +}; + +/* automatic uncaught exception tracking */ +UniversalAnalyticsPlugin.prototype.enableUncaughtExceptionReporting = function (enable, success, error) { + cordova.exec(success, error, 'UniversalAnalytics', 'enableUncaughtExceptionReporting', [enable]); +}; + +module.exports = new UniversalAnalyticsPlugin(); diff --git a/StoneIsland/plugins/fetch.json b/StoneIsland/plugins/fetch.json index 7960a280..f1760eb1 100755 --- a/StoneIsland/plugins/fetch.json +++ b/StoneIsland/plugins/fetch.json @@ -106,5 +106,13 @@ "variables": { "SENDER_ID": "XXXXXXX" } + }, + "cordova-plugin-google-analytics": { + "source": { + "type": "registry", + "id": "cordova-plugin-google-analytics" + }, + "is_top_level": true, + "variables": {} } }
\ No newline at end of file diff --git a/StoneIsland/plugins/ios.json b/StoneIsland/plugins/ios.json index 11f54f43..c090a55b 100644 --- a/StoneIsland/plugins/ios.json +++ b/StoneIsland/plugins/ios.json @@ -44,6 +44,9 @@ "phonegap-plugin-push": { "SENDER_ID": "XXXXXXX", "PACKAGE_NAME": "us.okfoc.stoneisland" + }, + "cordova-plugin-google-analytics": { + "PACKAGE_NAME": "us.okfoc.stoneisland" } }, "dependent_plugins": { |
