【ionic App问题总结系列】ionic 集成友盟插件以及多渠道打包

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq673318522/article/details/53236423

安装umeng提供的插件

第一步:下载SDK

下载地址:http://dev.umeng.com/analytics/h5/sdk-download

第二步:配置appkey

下载解压缩后,打开里面*/umeng-plugin-android/下的plugin.xml,更改appkey

 <!-- appkey -->
<meta-data android:name="UMENG_APPKEY" android:value="4f83c5d852701564XXXXXX" />
<meta-data android:name="UMENG_CHANNEL" android:value="Umeng-Channel"/>

将appkey替换为你自己应用的key。”UMENG_CHANNEL”可以先不替换,因为渠道名后面是动态设置的。

第三步:将友盟统计功能集成到你的项目中

首先通过本地安装cordova plugin的方式将umemg-plugin-android安装到你的项目。

cordova plugins add */umeng-plugin-android/        // 其中* 代表的是umeng-plugin-android所在的路径

在主界面集成友盟初始化

打开Android项目下的MainActivity.java文件,添加下面的代码,在onCreate()中调用initUmengSDK()

public class MainActivity extends CordovaActivity {
   @Override
   public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       initUmengSDK();
       // Set by <content src="index.html" /> in config.xml
       loadUrl(launchUrl);
   }

   /**
    * onCreate中调用
    */
   private void initUmengSDK() {
       MobclickAgent.setScenarioType(this, MobclickAgent.EScenarioType.E_UM_NORMAL);
       MobclickAgent.setDebugMode(true);
       MobclickAgent.openActivityDurationTrack(false);
       // MobclickAgent.setSessionContinueMillis(1000);
   }

   @Override
   protected void onResume() {
       super.onResume();
       MobclickAgent.onResume(this);
   }

   @Override
   protected void onPause() {
       super.onPause();
       MobclickAgent.onPause(this);
   }

}

友盟PhoneGap集成文档:http://dev.umeng.com/analytics/h5/phonegap-doc

到这一步就可以实现将友盟统计集成到你的App中了。接下来就是进行多渠道打包。

多渠道打包

多渠道打包是指:因Android市场的四分五裂,不同的厂家都有各自的应用市场和渠道,所以一个apk要根据不同应用市场的要求打包成不同渠道的apk。最后可以通过友盟的渠道统计来分析apk在各个应用市场的数据。

传统的多渠道打包一般是采用gradle打包,这种方式打包apk非常的慢,所以我放弃了。

这里我采用的是:Android批量打包提速 - 1分钟900个市场不是梦 这篇文章中介绍的技术(其中的思路其实是来自美团的技术分享 美团Android自动化之旅—生成渠道包 中提到的第三种实现方式)。
思路是
1. 通过解压apk,往META-INF中放置一个类似 channel_xxx的空文件来标致渠道名称
2. 在Java代码中解析这个文件名获取渠道名称。

去作者的github(https://github.com/GavinCT/AndroidMultiChannelBuildTool) 下载代码得到下面几个文件

  • JavaUtil/ChannelUtil.java 用于获取渠道名称;
  • PythonTool/info 该文件夹包括两个txt文件,channel.txt用于存放渠道列表,czt.txt用于添加到apk中的META-INF中;
  • Python/MutilChannelBuildTool.py 用于执行打包替换多渠道的Python脚本

第一步:在项目中动态设置渠道名称

ChannelUtil.java放入你的项目中,并在MainActivity.java中调用

@Override
public void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
    ChannelUtil.getChannel(this);    // 在这里便可以获取到渠道名称
   // Set by <content src="index.html" /> in config.xml
   loadUrl(launchUrl);
}

但是到这里,我们只能得到渠道的名称,所以我们还需要动态将渠道名称动态设置到友盟的代码中,这样才能分辨不同渠道的apk。

关于友盟渠道动态设置网上说的方法AnalyticsConfig.setChannel(getChannel(Context context) )已经不能用了 ,因为友盟提供的sdk中,已经废弃了该方法,而改用MobclickAgent.startWithConfigure()来进行初始化。所以我们需要在往MainActivity.java中添加友盟初始化的方法

/*
*传入渠道名称设置友盟渠道名称
*/
private MobclickAgent.UMAnalyticsConfig getConfig(String channel) {
   return new MobclickAgent.UMAnalyticsConfig(this, AnalyticsConfig.getAppkey(this), channel);
}

然后在onCreate()中调用

public void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   MobclickAgent.startWithConfigure(getConfig(ChannelUtil.getChannel(this)));
   // Set by <content src="index.html" /> in config.xml
   loadUrl(launchUrl);
}

加上前面的初始化友盟代码,完整的MainActivity.java如下:

public class MainActivity extends CordovaActivity {
   @Override
   public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       MobclickAgent.startWithConfigure(getConfig(ChannelUtil.getChannel(this)));
       initUmengSDK();
       // Set by <content src="index.html" /> in config.xml
       loadUrl(launchUrl);
   }

   /**
    * onCreate中调用
    */
   private void initUmengSDK() {
       MobclickAgent.setScenarioType(this, MobclickAgent.EScenarioType.E_UM_NORMAL);
       MobclickAgent.setDebugMode(true);
       MobclickAgent.openActivityDurationTrack(false);
       // MobclickAgent.setSessionContinueMillis(1000);
   }

   @Override
   protected void onResume() {
       super.onResume();
       MobclickAgent.onResume(this);
   }

   @Override
   protected void onPause() {
       super.onPause();
       MobclickAgent.onPause(this);
   }

   private MobclickAgent.UMAnalyticsConfig getConfig(String channel) {
       return new MobclickAgent.UMAnalyticsConfig(this, AnalyticsConfig.getAppkey(this), channel);
   }
}

第二步:执行python,进行多渠道打包

将想要批量打包的apk放到与Python/MutilChannelBuildTool.py一起,运行python脚本即可(前提是你的电脑已经安装python环境)。

如何重命名cordova生成apk的名称

cordova 生成apk的名称默认为android-release.apk,更改platforms/android/build.gradle,代码如下:

buildTypes {
   release {
       signingConfig signingConfigs.release
       applicationVariants.all { variant ->
           variant.outputs.each { output ->
               // 重命名产出的apk文件 
               def outputFile = output.outputFile
                   File outputDirectory = new File(outputFile.parent);
                   def fileName
                   def manifestParser = new com.android.builder.core.DefaultManifestParser()
                   fileName = "TM_"+manifestParser.getVersionName(android.sourceSets.main.manifest.srcFile)+".apk"    // 格式为 'TM_2.1.0' 其中2.1.0是AndroidMainifest.xml中的versionName
                   output.outputFile = new File(outputDirectory, fileName)
               // 删除unaligned apk
               if (output.zipAlign != null) {
                   output.zipAlign.doLast {
                       output.zipAlign.inputFile.delete()
                   }
               }
           }
       }
   }
}

上面的代码命名风格为:TM_versionName.apk,其中versionName是当前apk的版本号。

如何测试友盟统计及渠道信息

友盟提供了集成测试,进入http://mobile.umeng.com/test_devices , 添加测试设备后,便可以实时看到统计日志了。如下图:
这里写图片描述
这里写图片描述

文章首发于我的个人博客: www.iamsuperman.cn

猜你喜欢

转载自blog.csdn.net/qq673318522/article/details/53236423