Skip to content

Commit

Permalink
[REVERT] Revert Segment related changes for 6.2.0 (#5991)
Browse files Browse the repository at this point in the history
* Revert "[IMPROVEMENT] Analytics Alert (#5892)"

This reverts commit 6eddb15.

* Revert "[FIX] Initial Analytics Opt Out (#5863)"

This reverts commit 1474d44.

* Revert "[ANALYTICS] Events migration (#5139)"

This reverts commit e3d8124.

* Fix redundant URL import
  • Loading branch information
Cal-L authored Mar 20, 2023
1 parent d484d36 commit 94928db
Show file tree
Hide file tree
Showing 152 changed files with 2,408 additions and 1,359 deletions.
1 change: 1 addition & 0 deletions .android.env.example
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
export MM_FOX_CODE="EXAMPLE_FOX_CODE"
export MM_BRANCH_KEY_TEST=
export MM_BRANCH_KEY_LIVE=
export MM_MIXPANEL_TOKEN=
3 changes: 3 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
[submodule "ios/mixpanel-iphone"]
path = ios/mixpanel-iphone
url = https://github.com/mixpanel/mixpanel-iphone
[submodule "ios/branch-ios-sdk"]
path = ios/branch-ios-sdk
url = https://github.com/BranchMetrics/ios-branch-deep-linking-attribution
Expand Down
4 changes: 3 additions & 1 deletion android/app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -175,6 +175,7 @@ android {
manifestPlaceholders = [
MM_BRANCH_KEY_TEST: "$System.env.MM_BRANCH_KEY_TEST",
MM_BRANCH_KEY_LIVE: "$System.env.MM_BRANCH_KEY_LIVE",
MM_MIXPANEL_TOKEN: "$System.env.MM_MIXPANEL_TOKEN"
]
missingDimensionStrategy 'react-native-camera', 'general'
}
Expand Down Expand Up @@ -282,7 +283,8 @@ dependencies {
implementation 'org.chromium:v8-android:+'
implementation 'com.google.android.gms:play-services-wallet:18.0.0'
implementation "io.branch.sdk.android:library:5.+"
androidTestImplementation('com.wix:detox:+') { transitive = true }
implementation 'com.mixpanel.android:mixpanel-android:5.+'
androidTestImplementation('com.wix:detox:+') { transitive = true }
androidTestImplementation 'junit:junit:4.12'
implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.0.0"
implementation "com.android.installreferrer:installreferrer:2.2"
Expand Down
4 changes: 4 additions & 0 deletions android/app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,10 @@
android:value="io.metamask"/>
<meta-data android:name="com.dieam.reactnativepushnotification.notification_color"
android:resource="@color/lightgray"/>
<!-- MIXPANEL -->
<meta-data android:name="com.mixpanel.android.mpmetrics.MixpanelAPI.token" android:value="${MM_MIXPANEL_TOKEN}" />
<activity android:name="com.mixpanel.android.takeoverinapp.TakeoverInAppActivity"
android:theme="@style/com_mixpanel_android_TakeoverInAppActivityTheme"/>

<provider
android:name="androidx.core.content.FileProvider"
Expand Down
9 changes: 9 additions & 0 deletions android/app/src/main/java/io/metamask/MainActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import com.facebook.react.ReactActivityDelegate;
import com.facebook.react.ReactActivity;
import com.facebook.react.ReactRootView;
import com.mixpanel.android.mpmetrics.MixpanelAPI;
import com.swmansion.gesturehandler.react.RNGestureHandlerEnabledRootView;

import io.branch.rnbranch.*;
Expand Down Expand Up @@ -33,6 +34,14 @@ protected String getMainComponentName() {
protected void onStart() {
super.onStart();
RNBranchModule.initSession(getIntent().getData(), this);

try{
ApplicationInfo ai = this.getPackageManager().getApplicationInfo(this.getPackageName(), PackageManager.GET_META_DATA);
String mixpanelToken = (String)ai.metaData.get("com.mixpanel.android.mpmetrics.MixpanelAPI.token");
MixpanelAPI.getInstance(this, mixpanelToken);
}catch (PackageManager.NameNotFoundException e){
Log.d("RCTAnalytics","init:token missing");
}
}

@Override
Expand Down
2 changes: 2 additions & 0 deletions android/app/src/main/java/io/metamask/MainApplication.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import com.airbnb.android.react.lottie.LottiePackage;
import com.swmansion.gesturehandler.react.RNGestureHandlerPackage;
import io.branch.rnbranch.RNBranchModule;
import io.metamask.nativeModules.RCTAnalyticsPackage;
import com.facebook.react.ReactNativeHost;
import com.facebook.react.ReactPackage;
import com.facebook.soloader.SoLoader;
Expand Down Expand Up @@ -39,6 +40,7 @@ protected List<ReactPackage> getPackages() {
List<ReactPackage> packages = new PackageList(this).getPackages();
packages.add(new LottiePackage());
packages.add(new RNGestureHandlerPackage());
packages.add(new RCTAnalyticsPackage());
packages.add(new PreventScreenshotPackage());
packages.add(new ReactVideoPackage());

Expand Down
209 changes: 209 additions & 0 deletions android/app/src/main/java/io/metamask/nativeModules/RCTAnalytics.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,209 @@
package io.metamask.nativeModules;

import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.util.Log;

import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod;
import com.facebook.react.bridge.ReadableArray;
import com.facebook.react.bridge.ReadableMap;
import com.facebook.react.bridge.ReadableMapKeySetIterator;
import com.facebook.react.bridge.Promise;

import com.mixpanel.android.mpmetrics.MixpanelAPI;
import com.mixpanel.android.mpmetrics.Tweak;

import org.json.JSONException;
import org.json.JSONObject;

import java.util.ArrayList;
import java.util.HashMap;
import com.facebook.react.bridge.Promise;

public class RCTAnalytics extends ReactContextBaseJavaModule {

MixpanelAPI mixpanel;
private static Tweak<String> remoteVariables = MixpanelAPI.stringTweak("remoteVariables","{}");


public RCTAnalytics(ReactApplicationContext reactContext) {
super(reactContext);
try{
ApplicationInfo ai = reactContext.getPackageManager().getApplicationInfo(reactContext.getPackageName(), PackageManager.GET_META_DATA);
String mixpanelToken = (String)ai.metaData.get("com.mixpanel.android.mpmetrics.MixpanelAPI.token");
this.mixpanel =
MixpanelAPI.getInstance(reactContext, mixpanelToken);

}catch (PackageManager.NameNotFoundException e){
Log.d("RCTAnalytics","init:token missing");
}
}

@Override
public String getName() {
return "Analytics";
}

@ReactMethod
public void trackEvent(ReadableMap e) {
String eventCategory = e.getString("category");
JSONObject props = toJSONObject(e);
props.remove("category");
this.mixpanel.track(eventCategory, props);
}

@ReactMethod
public void trackEventAnonymously(ReadableMap e) {
String eventCategory = e.getString("category");
String distinctId = this.mixpanel.getDistinctId();
this.mixpanel.identify("0x0000000000000000");
JSONObject props = toJSONObject(e);
this.mixpanel.track(eventCategory, props);
this.mixpanel.identify(distinctId);
}

@ReactMethod
public void getDistinctId(Promise promise) {
String distinctId = this.mixpanel.getDistinctId();
promise.resolve(distinctId);
}

@ReactMethod
public void peopleIdentify() {
String distinctId = this.mixpanel.getDistinctId();
this.mixpanel.getPeople().identify(distinctId);
}

@ReactMethod
public void setUserProfileProperty(String propertyName, String propertyValue) {
String distinctId = this.mixpanel.getDistinctId();
this.mixpanel.getPeople().identify(distinctId);
this.mixpanel.getPeople().set(propertyName, propertyValue);
}

@ReactMethod
public void optIn(boolean val) {
if(val){
this.mixpanel.optInTracking();
}else{
this.mixpanel.optOutTracking();
}
}

@ReactMethod
public void getRemoteVariables(Promise promise) {
try{
String vars = remoteVariables.get();
promise.resolve(vars);
} catch (Error e){
promise.reject(e);
}

}

private JSONObject toJSONObject(ReadableMap readableMap){

ReadableMapKeySetIterator iterator = readableMap.keySetIterator();
JSONObject map = new JSONObject();
while (iterator.hasNextKey()) {
String key = iterator.nextKey();
try{
switch (readableMap.getType(key)) {
case Null:
map.put(key, null);
break;
case Boolean:
map.put(key, readableMap.getBoolean(key));
break;
case Number:
map.put(key, readableMap.getDouble(key));
break;
case String:
map.put(key, readableMap.getString(key));
break;
case Map:
map.put(key, toHashMap(readableMap.getMap(key)));
break;
case Array:
map.put(key, toArrayList(readableMap.getArray(key)));
break;
default:
throw new IllegalArgumentException("Could not convert object with key: " + key + ".");
}
}catch(JSONException e){
Log.d("RCTAnalytics","JSON parse error");
}
}
return map;

}

private HashMap<String, Object> toHashMap(ReadableMap readableMap){

ReadableMapKeySetIterator iterator = readableMap.keySetIterator();
HashMap<String, Object> hashMap = new HashMap<>();
while (iterator.hasNextKey()) {
String key = iterator.nextKey();
switch (readableMap.getType(key)) {
case Null:
hashMap.put(key, null);
break;
case Boolean:
hashMap.put(key, readableMap.getBoolean(key));
break;
case Number:
hashMap.put(key, readableMap.getDouble(key));
break;
case String:
hashMap.put(key, readableMap.getString(key));
break;
case Map:
hashMap.put(key, toHashMap(readableMap.getMap(key)));
break;
case Array:
hashMap.put(key, toArrayList(readableMap.getArray(key)));
break;
default:
throw new IllegalArgumentException("Could not convert object with key: " + key + ".");
}
}
return hashMap;

}


private ArrayList<Object> toArrayList(ReadableArray readableArray) {


ArrayList<Object> arrayList = new ArrayList<>();

for (int i = 0; i < readableArray.size(); i++) {
switch (readableArray.getType(i)) {
case Null:
arrayList.add(null);
break;
case Boolean:
arrayList.add(readableArray.getBoolean(i));
break;
case Number:
arrayList.add(readableArray.getDouble(i));
break;
case String:
arrayList.add(readableArray.getString(i));
break;
case Map:
arrayList.add(toHashMap(readableArray.getMap(i)));
break;
case Array:
arrayList.add(toArrayList(readableArray.getArray(i)));
break;
default:
throw new IllegalArgumentException("Could not convert object at index: " + i + ".");
}
}
return arrayList;

}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package io.metamask.nativeModules;

import com.facebook.react.ReactPackage;
import com.facebook.react.bridge.NativeModule;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.uimanager.ViewManager;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class RCTAnalyticsPackage implements ReactPackage {

@Override
public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {
return Collections.emptyList();
}

@Override
public List<NativeModule> createNativeModules(
ReactApplicationContext reactContext) {
List<NativeModule> modules = new ArrayList<>();

modules.add(new RCTAnalytics(reactContext));

return modules;
}

}
9 changes: 9 additions & 0 deletions app/components/Nav/App/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ import AppConstants from '../../../core/AppConstants';
import Logger from '../../../util/Logger';
import { trackErrorAsAnalytics } from '../../../util/analyticsV2';
import { routingInstrumentation } from '../../../util/sentryUtils';
import Analytics from '../../../core/Analytics/Analytics';
import { connect, useSelector, useDispatch } from 'react-redux';
import {
EXISTING_USER,
Expand Down Expand Up @@ -318,6 +319,14 @@ const App = ({ userLoggedIn }) => {
}
}, [dispatch, handleDeeplink, frequentRpcList, navigator, network]);

useEffect(() => {
const initAnalytics = async () => {
await Analytics.init();
};

initAnalytics();
}, []);

useEffect(() => {
SDKConnect.init();
}, []);
Expand Down
6 changes: 3 additions & 3 deletions app/components/Nav/Main/MainNavigator.js
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ import OrderDetails from '../../UI/FiatOnRampAggregator/Views/OrderDetails';
import TabBar from '../../../component-library/components/Navigation/TabBar';
import BrowserUrlModal from '../../Views/BrowserUrlModal';
import Routes from '../../../constants/navigation/Routes';
import { trackEvent } from '../../../util/analyticsV2';
import AnalyticsV2 from '../../../util/analyticsV2';
import { MetaMetricsEvents } from '../../../core/Analytics';
import { getActiveTabUrl } from '../../../util/transactions';
import { getPermittedAccountsByHostname } from '../../../core/Permissions';
Expand Down Expand Up @@ -244,7 +244,7 @@ const HomeTabs = () => {
tabBarIconKey: TabBarIconKey.Wallet,
tabBarLabel: strings('drawer.wallet'),
callback: () => {
trackEvent(MetaMetricsEvents.WALLET_OPENED, {
AnalyticsV2.trackEvent(MetaMetricsEvents.WALLET_OPENED, {
number_of_accounts: accountsLength,
chain_id: chainId,
});
Expand All @@ -255,7 +255,7 @@ const HomeTabs = () => {
tabBarIconKey: TabBarIconKey.Browser,
tabBarLabel: strings('drawer.browser'),
callback: () => {
trackEvent(MetaMetricsEvents.BROWSER_OPENED, {
AnalyticsV2.trackEvent(MetaMetricsEvents.BROWSER_OPENED, {
number_of_accounts: accountsLength,
chain_id: chainId,
source: 'Navigation Tab',
Expand Down
Loading

0 comments on commit 94928db

Please sign in to comment.