add track

This commit is contained in:
wangcongtao
2020-01-15 15:23:47 +08:00
parent a783fb63f6
commit 0b8f4c85fd
7 changed files with 133 additions and 20 deletions

View File

@@ -13,10 +13,14 @@ import com.mogo.commons.mvp.MvpFragment;
import com.mogo.commons.mvp.Presenter; import com.mogo.commons.mvp.Presenter;
import com.mogo.module.common.MogoModulePaths; import com.mogo.module.common.MogoModulePaths;
import com.mogo.service.MogoServicePaths; import com.mogo.service.MogoServicePaths;
import com.mogo.service.analytics.IMogoAnalytics;
import com.mogo.service.fragmentmanager.FragmentDescriptor; import com.mogo.service.fragmentmanager.FragmentDescriptor;
import com.mogo.service.fragmentmanager.IMogoFragmentManager; import com.mogo.service.fragmentmanager.IMogoFragmentManager;
import com.mogo.service.module.IMogoModuleProvider; import com.mogo.service.module.IMogoModuleProvider;
import java.util.HashMap;
import java.util.Map;
/** /**
* @author congtaowang * @author congtaowang
* @since 2020-01-06 * @since 2020-01-06
@@ -38,6 +42,8 @@ public class AppNavigatorFragment extends MvpFragment< AppNavigatorView, AppNavi
*/ */
private IMogoModuleProvider mSearchProvider; private IMogoModuleProvider mSearchProvider;
private IMogoAnalytics mMogoAnalytics;
@Override @Override
protected int getLayoutId() { protected int getLayoutId() {
return R.layout.module_apps_fragment_apps_navigator; return R.layout.module_apps_fragment_apps_navigator;
@@ -53,16 +59,18 @@ public class AppNavigatorFragment extends MvpFragment< AppNavigatorView, AppNavi
mCarSettings = findViewById( R.id.module_apps_ic_car_settings ); mCarSettings = findViewById( R.id.module_apps_ic_car_settings );
mApps = findViewById( R.id.module_apps_id_apps ); mApps = findViewById( R.id.module_apps_id_apps );
mNavigation.setOnClickListener( view -> { mNavigation.setOnClickListener( view -> {
mSearchProvider = ( IMogoModuleProvider ) ARouter.getInstance().build( MogoModulePaths.PATH_MODULE_SEARCH ).navigation(); openSearchPanel();
final Fragment fragment = mSearchProvider.createFragment( getContext(), null ); trackNavigatorClickEvent( 1 );
mMogoFragmentManager.push( new FragmentDescriptor.Builder().fragment( fragment ).tag( MogoModulePaths.PATH_FRAGMENT_SEARCH ).notifyMainModule( true ).build() );
} ); } );
mMediaCenter.setOnClickListener( view -> { mMediaCenter.setOnClickListener( view -> {
trackNavigatorClickEvent( 2 );
} ); } );
mCarSettings.setOnClickListener( view -> { mCarSettings.setOnClickListener( view -> {
trackNavigatorClickEvent( 3 );
} ); } );
mApps.setOnClickListener( view -> { mApps.setOnClickListener( view -> {
openAppsPanel(); openAppsPanel();
trackNavigatorClickEvent( 4 );
} ); } );
} }
@@ -72,10 +80,17 @@ public class AppNavigatorFragment extends MvpFragment< AppNavigatorView, AppNavi
return new AppNavigatorPresenter( this ); return new AppNavigatorPresenter( this );
} }
private void openSearchPanel() {
mSearchProvider = ( IMogoModuleProvider ) ARouter.getInstance().build( MogoModulePaths.PATH_MODULE_SEARCH ).navigation();
final Fragment fragment = mSearchProvider.createFragment( getContext(), null );
mMogoFragmentManager.push( new FragmentDescriptor.Builder().fragment( fragment ).tag( MogoModulePaths.PATH_FRAGMENT_SEARCH ).notifyMainModule( true ).build() );
}
@Override @Override
public void onActivityCreated( @Nullable Bundle savedInstanceState ) { public void onActivityCreated( @Nullable Bundle savedInstanceState ) {
super.onActivityCreated( savedInstanceState ); super.onActivityCreated( savedInstanceState );
mMogoFragmentManager = ( IMogoFragmentManager ) ARouter.getInstance().build( MogoServicePaths.PATH_FRAGMENT_MANAGER ).navigation( getContext() ); mMogoFragmentManager = ( IMogoFragmentManager ) ARouter.getInstance().build( MogoServicePaths.PATH_FRAGMENT_MANAGER ).navigation( getContext() );
mMogoAnalytics = ( IMogoAnalytics ) ARouter.getInstance().build( MogoServicePaths.PATH_UTILS_ANALYTICS ).navigation( getContext() );
} }
@Override @Override
@@ -84,6 +99,12 @@ public class AppNavigatorFragment extends MvpFragment< AppNavigatorView, AppNavi
mMogoFragmentManager.push( new FragmentDescriptor.Builder().hasTransition( true ).fragment( mAppsFragment ).tag( "apps" ).notifyMainModule( false ).build() ); mMogoFragmentManager.push( new FragmentDescriptor.Builder().hasTransition( true ).fragment( mAppsFragment ).tag( "apps" ).notifyMainModule( false ).build() );
} }
private void trackNavigatorClickEvent( int type ) {
final Map< String, Object > properties = new HashMap<>();
properties.put( "type", type );
mMogoAnalytics.track( "Launcher_APP_Icon", properties );
}
@Override @Override
public void closeAppsPanel() { public void closeAppsPanel() {
if ( getActivity() != null ) { if ( getActivity() != null ) {

View File

@@ -5,13 +5,19 @@ import android.content.Intent;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.lifecycle.LifecycleOwner; import androidx.lifecycle.LifecycleOwner;
import com.alibaba.android.arouter.launcher.ARouter;
import com.mogo.commons.mvp.Presenter; import com.mogo.commons.mvp.Presenter;
import com.mogo.module.apps.model.AppInfo; import com.mogo.module.apps.model.AppInfo;
import com.mogo.module.apps.model.AppsModel; import com.mogo.module.apps.model.AppsModel;
import com.mogo.service.MogoServicePaths;
import com.mogo.service.analytics.IMogoAnalytics;
import com.mogo.utils.ThreadPoolService; import com.mogo.utils.ThreadPoolService;
import com.mogo.utils.TipToast; import com.mogo.utils.TipToast;
import com.mogo.utils.UiThreadHandler; import com.mogo.utils.UiThreadHandler;
import java.util.HashMap;
import java.util.Map;
/** /**
* @author congtaowang * @author congtaowang
* @since 2019-12-30 * @since 2019-12-30
@@ -22,6 +28,8 @@ public class AppsPresenter extends Presenter< AppsView > {
private static final String TAG = "AppsPresenter"; private static final String TAG = "AppsPresenter";
private IMogoAnalytics mAnalytics;
public AppsPresenter( AppsView view ) { public AppsPresenter( AppsView view ) {
super( view ); super( view );
} }
@@ -35,6 +43,8 @@ public class AppsPresenter extends Presenter< AppsView > {
renderAppsList(); renderAppsList();
} }
} ); } );
mAnalytics = ( IMogoAnalytics ) ARouter.getInstance().build( MogoServicePaths.PATH_UTILS_ANALYTICS ).navigation( getContext() );
} }
private void renderAppsList() { private void renderAppsList() {
@@ -55,6 +65,8 @@ public class AppsPresenter extends Presenter< AppsView > {
return; return;
} }
trackAppClicked( appInfo );
try { try {
Intent intent = getContext().getPackageManager().getLaunchIntentForPackage( appInfo.getPackageName() ); Intent intent = getContext().getPackageManager().getLaunchIntentForPackage( appInfo.getPackageName() );
intent.addFlags( Intent.FLAG_ACTIVITY_NEW_TASK ); intent.addFlags( Intent.FLAG_ACTIVITY_NEW_TASK );
@@ -64,6 +76,19 @@ public class AppsPresenter extends Presenter< AppsView > {
} }
} }
private void trackAppClicked( AppInfo appInfo ) {
if ( appInfo == null ) {
return;
}
Map< String, Object > properties = new HashMap<>();
properties.put( "appname", appInfo.getName() );
properties.put( "packagename", appInfo.getPackageName() );
properties.put( "appversion", appInfo.getVersionName() );
properties.put( "from", 1 );
mAnalytics.track( "appenterfront", properties );
}
@Override @Override
public void onDestroy( @NonNull LifecycleOwner owner ) { public void onDestroy( @NonNull LifecycleOwner owner ) {
super.onDestroy( owner ); super.onDestroy( owner );

View File

@@ -15,6 +15,7 @@ import com.mogo.commons.voice.AIAssist;
import com.mogo.module.extensions.anim.AnimRes; import com.mogo.module.extensions.anim.AnimRes;
import com.mogo.module.extensions.anim.JSurfaceView; import com.mogo.module.extensions.anim.JSurfaceView;
import com.mogo.service.MogoServicePaths; import com.mogo.service.MogoServicePaths;
import com.mogo.service.analytics.IMogoAnalytics;
import com.mogo.service.fragmentmanager.IMogoFragmentManager; import com.mogo.service.fragmentmanager.IMogoFragmentManager;
import com.mogo.utils.UiThreadHandler; import com.mogo.utils.UiThreadHandler;
@@ -41,6 +42,7 @@ public class ExtensionsFragment extends MvpFragment< ExtensionsView, ExtensionsP
private TextView mMsgCounter; private TextView mMsgCounter;
private IMogoFragmentManager mMogoFragmentManager; private IMogoFragmentManager mMogoFragmentManager;
private IMogoAnalytics mAnalytics;
@Override @Override
protected int getLayoutId() { protected int getLayoutId() {
@@ -57,6 +59,7 @@ public class ExtensionsFragment extends MvpFragment< ExtensionsView, ExtensionsP
} ); } );
mVoiceMsg.setOnClickListener( view -> { mVoiceMsg.setOnClickListener( view -> {
AIAssist.startAssistant( getContext() ); AIAssist.startAssistant( getContext() );
mAnalytics.track( "Launcher_xiaozhi_Click", null );
} ); } );
mTime = findViewById( R.id.module_ext_id_time ); mTime = findViewById( R.id.module_ext_id_time );
@@ -94,6 +97,7 @@ public class ExtensionsFragment extends MvpFragment< ExtensionsView, ExtensionsP
@Override @Override
public void onActivityCreated( @Nullable Bundle savedInstanceState ) { public void onActivityCreated( @Nullable Bundle savedInstanceState ) {
super.onActivityCreated( savedInstanceState ); super.onActivityCreated( savedInstanceState );
mAnalytics = ( IMogoAnalytics ) ARouter.getInstance().build( MogoServicePaths.PATH_UTILS_ANALYTICS ).navigation( getContext() );
mVoiceIcon.startAnim(); mVoiceIcon.startAnim();
} }

View File

@@ -1,11 +1,13 @@
package com.mogo.module.main; package com.mogo.module.main;
import android.os.Bundle; import android.os.Bundle;
import android.os.SystemClock;
import android.view.View; import android.view.View;
import android.widget.FrameLayout; import android.widget.FrameLayout;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.viewpager.widget.ViewPager;
import com.alibaba.android.arouter.launcher.ARouter; import com.alibaba.android.arouter.launcher.ARouter;
import com.mogo.commons.mvp.MvpActivity; import com.mogo.commons.mvp.MvpActivity;
@@ -27,6 +29,7 @@ import com.mogo.module.main.cards.VerticalStackTransformer;
import com.mogo.module.main.windowview.WindowViewHandler; import com.mogo.module.main.windowview.WindowViewHandler;
import com.mogo.module.service.ServiceConst; import com.mogo.module.service.ServiceConst;
import com.mogo.service.MogoServicePaths; import com.mogo.service.MogoServicePaths;
import com.mogo.service.analytics.IMogoAnalytics;
import com.mogo.service.cardmanager.IMogoCardManager; import com.mogo.service.cardmanager.IMogoCardManager;
import com.mogo.service.fragmentmanager.IMogoFragmentManager; import com.mogo.service.fragmentmanager.IMogoFragmentManager;
import com.mogo.service.impl.fragmentmanager.FragmentStack; import com.mogo.service.impl.fragmentmanager.FragmentStack;
@@ -34,7 +37,9 @@ import com.mogo.service.map.IMogoMapService;
import com.mogo.service.module.IMogoModuleProvider; import com.mogo.service.module.IMogoModuleProvider;
import com.mogo.utils.logger.Logger; import com.mogo.utils.logger.Logger;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
/** /**
* @author congtaowang * @author congtaowang
@@ -74,6 +79,10 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme
// 是否是点击Marker进行的页面切换false-不是true-是 // 是否是点击Marker进行的页面切换false-不是true-是
private boolean isClickMarker; private boolean isClickMarker;
private long mCardStartShowTime = 0;
private IMogoAnalytics mAnalytics;
@Override @Override
protected int getLayoutId() { protected int getLayoutId() {
return R.layout.module_main_activity_main; return R.layout.module_main_activity_main;
@@ -85,18 +94,71 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme
mCardsContainer.setOrientation( OrientedViewPager.Orientation.VERTICAL ); mCardsContainer.setOrientation( OrientedViewPager.Orientation.VERTICAL );
mCardsContainer.setOnPageChangeListener( new OnPageChangeListenerAdapter() { mCardsContainer.setOnPageChangeListener( new OnPageChangeListenerAdapter() {
private boolean mCardFlipStatus = false;
@Override @Override
public void onPageSelected( int position ) { public void onPageSelected( int position ) {
try { try {
mCurrentPosition = position; mCurrentPosition = position;
mMogoModuleHandler.setEnable(mCardModulesAdapter.getProvider(position).getModuleName()); final IMogoModuleProvider provider = mCardModulesAdapter.getProvider( position );
if (!isClickMarker) { mMogoModuleHandler.setEnable( provider.getModuleName() );
mMogoCardManager.invoke(position, mMogoModuleHandler.getCurrentModuleName()); if ( !isClickMarker ) {
mMogoCardManager.invoke( position, mMogoModuleHandler.getCurrentModuleName() );
} }
trackCardSelectedEvent( provider );
} catch ( Exception e ) { } catch ( Exception e ) {
e.printStackTrace(); e.printStackTrace();
} }
} }
@Override
public void onPageScrolled( int position, float positionOffset, int positionOffsetPixels ) {
super.onPageScrolled( position, positionOffset, positionOffsetPixels );
}
@Override
public void onPageScrollStateChanged( int state ) {
super.onPageScrollStateChanged( state );
if ( state == ViewPager.SCROLL_STATE_DRAGGING ) {
if ( !mCardFlipStatus ) {
mCardFlipStatus = true;
final IMogoModuleProvider provider = mCardModulesAdapter.getProvider( mCurrentPosition );
trackCardFlipEvent( provider );
}
} else if ( state == ViewPager.SCROLL_STATE_IDLE ) {
mCardFlipStatus = false;
}
}
/**
* 卡片展示时长埋点
* @param provider
*/
private void trackCardSelectedEvent( IMogoModuleProvider provider ) {
if ( provider == null ) {
return;
}
Map< String, Object > properties = new HashMap<>();
properties.put( "appname", provider.getAppName() );
properties.put( "packagename", provider.getAppPackage() );
properties.put( "activeTime", System.currentTimeMillis() - mCardStartShowTime );
mAnalytics.track( "Launcher_Card_Show", properties );
mCardStartShowTime = System.currentTimeMillis();
}
/**
* 卡片滑动埋点WTF
*/
private void trackCardFlipEvent( IMogoModuleProvider provider ) {
if ( provider == null ) {
return;
}
Map< String, Object > properties = new HashMap<>();
properties.put( "appname", provider.getAppName() );
properties.put( "packagename", provider.getAppPackage() );
mAnalytics.track( "Launcher_Card_Slide", properties );
}
} ); } );
mMogoFragmentManager = ( IMogoFragmentManager ) ARouter.getInstance().build( MogoServicePaths.PATH_FRAGMENT_MANAGER ).navigation( this ); mMogoFragmentManager = ( IMogoFragmentManager ) ARouter.getInstance().build( MogoServicePaths.PATH_FRAGMENT_MANAGER ).navigation( this );
@@ -157,14 +219,11 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme
mMogoMapUIController = mMogoMapService.getMapUIController(); mMogoMapUIController = mMogoMapService.getMapUIController();
mMogoModuleHandler.loadModules(); mMogoModuleHandler.loadModules();
mMogoModuleHandler.onMapLoadedCallback( new Runnable() { mMogoModuleHandler.onMapLoadedCallback( () -> {
@Override Logger.d( TAG, "map loaded." + Thread.currentThread().getName() );
public void run() { loadModules();
Logger.d( TAG, "map loaded." + Thread.currentThread().getName() ); mShadowFrame.setVisibility( View.VISIBLE );
loadModules(); mMogoMapUIController.setPointToCenter( 0.66145, 0.590688 );
mShadowFrame.setVisibility( View.VISIBLE );
mMogoMapUIController.setPointToCenter( 0.66145, 0.590688 );
}
} ); } );
// 加载地图,触发地图加载完毕回调,在初始化其他卡片模块,保证卡片模块可以正确获取地图相关服务。 // 加载地图,触发地图加载完毕回调,在初始化其他卡片模块,保证卡片模块可以正确获取地图相关服务。
mMogoModuleHandler.loadMap( R.id.module_main_id_map_fragment_container ); mMogoModuleHandler.loadMap( R.id.module_main_id_map_fragment_container );
@@ -177,6 +236,7 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme
mLocationClient.start(); mLocationClient.start();
mMogoCardManager = ( IMogoCardManager ) ARouter.getInstance().build( MogoServicePaths.PATH_CARD_MANAGER ).navigation( this ); mMogoCardManager = ( IMogoCardManager ) ARouter.getInstance().build( MogoServicePaths.PATH_CARD_MANAGER ).navigation( this );
mAnalytics = ( IMogoAnalytics ) ARouter.getInstance().build( MogoServicePaths.PATH_UTILS_ANALYTICS ).navigation( this );
} }
private void loadModules() { private void loadModules() {
@@ -187,6 +247,8 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme
mCardsContainer.setPageTransformer( true, new VerticalStackTransformer( this ) ); mCardsContainer.setPageTransformer( true, new VerticalStackTransformer( this ) );
mCardsContainer.setAdapter( mCardModulesAdapter ); mCardsContainer.setAdapter( mCardModulesAdapter );
mCardsContainer.setCurrentItem( mCurrentPosition ); mCardsContainer.setCurrentItem( mCurrentPosition );
mCardStartShowTime = System.currentTimeMillis();
} }
@@ -220,8 +282,8 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme
int position = mCardModulesAdapter.getProviderPosition( cardType ); int position = mCardModulesAdapter.getProviderPosition( cardType );
if ( position != -1 ) { if ( position != -1 ) {
mCardsContainer.setCurrentItem( position, Math.abs( mCurrentPosition - position ) == 1 ); mCardsContainer.setCurrentItem( position, Math.abs( mCurrentPosition - position ) == 1 );
if (!isClickMarker) { if ( !isClickMarker ) {
mMogoCardManager.invoke(position, mMogoModuleHandler.getCurrentModuleName()); mMogoCardManager.invoke( position, mMogoModuleHandler.getCurrentModuleName() );
} }
} else { } else {
Logger.e( TAG, "Can't find type of %s's position", cardType ); Logger.e( TAG, "Can't find type of %s's position", cardType );

View File

@@ -31,4 +31,6 @@ public class MainPresenter extends Presenter< MainView > {
mView.switch2( to ); mView.switch2( to );
} ); } );
} }
} }

View File

@@ -118,20 +118,20 @@ public class VoiceConstants {
*/ */
public static final String CMD_MAP_STOP_NAVI_MODE = "com.ileja.navi.route.stop"; public static final String CMD_MAP_STOP_NAVI_MODE = "com.ileja.navi.route.stop";
public static final String CMD_MAP_STOP_NAVI_MODE_UN_WAKEUP = "CMD_MAP_STOP_NAVI_MODE_UN_WAKEUP"; public static final String CMD_MAP_STOP_NAVI_MODE_UN_WAKEUP = "CMD_MAP_STOP_NAVI_MODE_UN_WAKEUP";
public static final String[] CMD_MAP_STOP_NAVI_MODE_TRIGGER_WORDS = {"停止导航/结束导航/取消导航/放弃导航/退出导航/关闭导航"}; public static final String[] CMD_MAP_STOP_NAVI_MODE_TRIGGER_WORDS = {"停止导航", "结束导航", "取消导航", "放弃导航", "退出导航", "关闭导航"};
/** /**
* 车头朝上 * 车头朝上
*/ */
public static final String CMD_MAP_CAR_UP_MODE = "com.ileja.navi.mode.car_up"; public static final String CMD_MAP_CAR_UP_MODE = "com.ileja.traffic.head.up";
public static final String CMD_MAP_CAR_UP_MODE_UN_WAKEUP = "CMD_MAP_CAR_UP_MODE_UN_WAKEUP"; public static final String CMD_MAP_CAR_UP_MODE_UN_WAKEUP = "CMD_MAP_CAR_UP_MODE_UN_WAKEUP";
public static final String[] CMD_MAP_CAR_UP_MODE_TRIGGER_WORDS = {"车头朝上"}; public static final String[] CMD_MAP_CAR_UP_MODE_TRIGGER_WORDS = {"车头朝上"};
/** /**
* 北朝上 * 北朝上
*/ */
public static final String CMD_MAP_NORTH_UP_MODE = "com.ileja.navi.mode.north_up"; public static final String CMD_MAP_NORTH_UP_MODE = "com.ileja.traffic.north.up";
public static final String CMD_MAP_NORTH_UP_MODE_UN_WAKEUP = "CMD_MAP_NORTH_UP_MODE_UN_WAKEUP"; public static final String CMD_MAP_NORTH_UP_MODE_UN_WAKEUP = "CMD_MAP_NORTH_UP_MODE_UN_WAKEUP";
public static final String[] CMD_MAP_NORTH_UP_MODE_TRIGGER_WORDS = {"北朝上"}; public static final String[] CMD_MAP_NORTH_UP_MODE_TRIGGER_WORDS = {"北朝上"};

View File

@@ -15,7 +15,6 @@ import java.util.Map;
@Keep @Keep
public interface IMogoAnalytics extends IProvider { public interface IMogoAnalytics extends IProvider {
/** /**
* 埋点 * 埋点
* *