umeng 渠道统计 android

1、配置AndroidManifest.xml,添加权限

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.INTERNET" />

2 在应用程序的 Application类的onCreate方法中调用Test类中的sendMessage方法,在方法中传入本应用的Appkey。

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.StringWriter;
import java.io.UnsupportedEncodingException;
import java.lang.reflect.Method;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import android.Manifest.permission;
import android.content.Context;
import android.content.pm.PackageManager;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.os.Build;
import android.os.Environment;
import android.provider.Settings.Secure;
import android.telephony.TelephonyManager;
import android.text.TextUtils;
import android.util.Log;

public class Test {
         private static final Pattern pattern = Pattern.compile("UTDID\">([^<]+)");

         /**
         * * send message To Server * * @param context * android Context. * @param*
         * appkey * umeng appkey
         *
          * @throws UnsupportedEncodingException
         */
         @SuppressWarnings("deprecation")
         public void sendMessage(Context context, String appkey)
                          throws UnsupportedEncodingException {
                  StringBuilder sber = new StringBuilder();
                  sber.append("https://ar.umeng.com/stat.htm?");
                  if (!TextUtils.isEmpty(appkey)) {
                          sber.append("ak=").append(appkey);
                  }

                  String devicename = Build.MODEL;

                  if (!TextUtils.isEmpty(devicename)) {
                          sber.append("&device_name=").append(
                                            URLEncoder.encode(devicename, "UTF-8"));
                  }

                  TelephonyManager tm = (TelephonyManager) context
                                   .getSystemService(Context.TELEPHONY_SERVICE);
                  PackageManager pm = context.getPackageManager();

                  if (pm.checkPermission(permission.READ_PHONE_STATE,
                                   context.getPackageName()) == PackageManager.PERMISSION_GRANTED) {
                          String imei = tm.getDeviceId();

                          if (!TextUtils.isEmpty(imei)) {
                                   sber.append("&imei=").append(URLEncoder.encode(imei,"UTF-8"));
                          }
                  }

                  if (pm.checkPermission(permission.ACCESS_WIFI_STATE,
                                   context.getPackageName()) == PackageManager.PERMISSION_GRANTED) {

                          WifiManager wifi = (WifiManager) context
                                            .getSystemService(Context.WIFI_SERVICE);
                          WifiInfo info = wifi.getConnectionInfo();
                          String mac = info.getMacAddress();

                          // String mac = tm.getDeviceId();
                          if (!TextUtils.isEmpty(mac)) {
                                   sber.append("&mac=").append(URLEncoder.encode(mac,"UTF-8"));
                          }
                  }

                  String androidId = Secure.getString(context.getContentResolver(),
                                   Secure.ANDROID_ID);
                  if (!TextUtils.isEmpty(androidId)) {
                          sber.append("&android_id=").append(URLEncoder.encode(androidId,"UTF-8"));
                  }

                  String utdid = getUTDid(context);
                  if (!TextUtils.isEmpty(utdid)) {
                          sber.append("&utdid=").append(URLEncoder.encode(utdid,"UTF-8"));
                  }

                  HttpURLConnection conn = null;
                  try {

                          conn = (HttpURLConnection) new URL(sber.toString())
                                            .openConnection();

                          conn.setRequestMethod("GET");
                          conn.setDoOutput(true);
                          conn.setDoInput(true);
                          conn.setUseCaches(false);
                          if (Integer.parseInt(Build.VERSION.SDK) < Build.VERSION_CODES.FROYO) {
                                   System.setProperty("http.keepAlive", "false");
                          }
                          int code = conn.getResponseCode();
                          if (code == 200) {
                                   InputStream inputStream = conn.getInputStream();

                                   // do something
                          } else {
                                   Log.e("test", "status code: " + code);
                          }
                  } catch (Exception e) {
                          System.out.print(e.getMessage());
                  } finally {
                          if (conn != null) {
                                   conn.disconnect();
                          }
                  }
         }

         /**
         * * get UTDID * * @param context * @return
         */
         private String getUTDid(Context context) {
                  try {
                          Class<?> utdevice = Class.forName("com.ut.device.UTDevice");
                          Method reMethod = utdevice.getMethod("getUtdid", Context.class);
                          return (String) reMethod.invoke(null, context);
                  } catch (Exception e) {
                          return readNativeFile(context);
                  }
         }

         //get mac

         /**
         * * read native file method * * @param context * @return
         */
         private String readNativeFile(Context context) {
                  File f = getFile(context);
                  if (f == null || !f.exists()) {
                          return null;
                  }
                  try {
                          FileInputStream fis = new FileInputStream(f);
                          try {
                                   return parseId(readStreamToString(fis));
                          } finally {
                                   safeClose(fis);
                          }
                  } catch (Exception e) {
                          e.printStackTrace();
                  }
                  return null;
         }

         /**
         * * java pattern parse native utdid * * @param content * @return
         */
         private String parseId(String content) {
                  if (content == null) {
                          return null;
                  }
                  Matcher matcher = pattern.matcher(content);
                  if (matcher.find()) {
                          return matcher.group(1);
                  }
                  return null;
         }

         /** * read native file * * @param context * @return */

         private File getFile(Context context) {
                  PackageManager pm = context.getPackageManager();
                  if (pm.checkPermission(permission.WRITE_EXTERNAL_STORAGE,
                                   context.getPackageName()) == PackageManager.PERMISSION_GRANTED) {
                          return null;
                  }
                  if (Environment.getExternalStorageState().equals(
                                   Environment.MEDIA_MOUNTED)) {
                          File sdCardDir = Environment.getExternalStorageDirectory();
                          try {
                                   return new File(sdCardDir.getCanonicalPath(),
                                                     ".UTSystemConfig/Global/Alvin2.xml");
                          } catch (Exception ignore) {
                          }
                  }
                  return null;
         }

         /**
         * * convert inputstream to String * * @param input * @return * @throws
         * IOException
         * */
         private String readStreamToString(InputStream input) throws IOException {
                  InputStreamReader reader = new InputStreamReader(input);
                  char[] buffer = new char[1024];
                  int n = 0;
                  StringWriter writer = new StringWriter();
                  while (-1 != (n = reader.read(buffer))) {
                          writer.write(buffer, 0, n);

                  }
                  return writer.toString();
         }

         /**
         * * close io stream * * @param is
         */
         private void safeClose(InputStream is) {
                  if (is != null) {
                          try {
                                   is.close();
                          } catch (Exception e) {

                          }
                  }
         }
}

  

时间: 2024-12-17 00:09:15

umeng 渠道统计 android的相关文章

umeng 渠道统计ios

1. 使用前提:需要在工程中添加依赖框架:AdSupport.framework 和 Security.framework 2.在AppDelegate.m文件中的-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions方法中调用以下代码, 传入Appkey. OpenUDID.h可从https://github.com/ylechelle

APICloud模块开发爬过的坑(集成openinstall基于个性化安装的渠道统计服务)

引子: 现在很多的app都用混合开发,apicloud的app混合开发也是很火.很多时候需要集成一下第三方的sdk服务,比如:openisntall的统计服务等.那么如何编写一个模块开发呢,apicloud文档写的也是模棱两可,期间也爬过很多的坑,在这里做一些记录. 开发的模块是把第三方的渠道统计服务openinstall集成进来,实现免打包的渠道统计,渠道追踪来源,无码邀请等功能都是这次我需要用到的功能,集成openisntall能实现这些功能,所以,如何集成openisntall,进行模块开

渠道统计比较的优缺点

App推广几乎是每个移动App公司共同面临的问题,App想要推广,势必要多渠道投放.想要推广的更好,量化推广效果,实时优化投放策略,就需要有渠道统计数据的支持.以下总结了渠道统计方式的优缺点,可以对比选择适合公司的渠道统计方案. 第一种方式:Android开发人员对不同渠道进行分包,每个渠道打一个标识唯一的渠道id的安装包.iOS苹果官方提供推广渠道统计和报表. 优点:对于小量大渠道分布的企业是可以采用的. 缺点:繁琐,不灵活,效率低.比如Android有1000个渠道就要打1000个不用的渠道

这款渠道统计工具,能有效分析渠道质量

广告大师约翰·沃纳梅克曾说过:"我知道在广告上的投资有一半是无用的,但问题是我不知道是哪一半."这个至理名言堪称广告营销界的"哥德巴赫猜想".但目前在移动互联网领域,openinstall已经能有效实现对App推广渠道进行效果统计.广告营销进行效果监控. openinstall的渠道统计功能有多实用呢?我们都知道,广告投放是产品推广中必不可少的手段,地铁.公交站.电视.电梯都是广告的信息传播媒介,但当我们无法分辨每个广告渠道的具体获客效果时,就无法根据渠道ROI对广

【实时+排重】摆脱渠道统计刷量作弊行为

如今的渠道统计不仅要看精准度,更要看数据的真实性. 对App的推广业务而言,渠道监测和统计是必不可少的环节,不论以什么形式开展推广,终究都要具体落实到App的安装量.激活量等指标上.但在如今数据刷量和作假行为横行的背景下,许多渠道获取来的流量质量都含有水分,这对大规模的地推和广告营销的开展是相当不利的. 另一方面,大规模商务推广可能涉及上千万个小渠道,我们不可能按照常规的打包方式进行统计,这样做人工成本太高,误差率大.一般都要选择第三方统计工具来统计相关数据,现在选择统计工具不仅要看精准度,更要

免打包:简单、灵活、便捷的APP渠道统计方法

相信做过APP运营推广的小伙伴们应该对APP渠道统计并不陌生吧.APP推广运营人员需要根据数据来评估渠道推广的效果,找到最适合自家APP的渠道,有针对性的投放,不断完善推广策略,这样才能更加精准.有效,快速的吸引到有价值的用户.目前,APP推广的数据有两种方法获取:一种是企业自主研发的数据统计系统:另外一种是通过第三方渠道统计工具.因为第一种方法对技术.成本的要求太高,所以很多企业采用的是第二种方法. 如今国内有很多第三方统计工具,比如比较有名的:TalkingData.百度统计.openins

渠道统计令人头秃?那是你还没会用这个

最近有点累,我们是购物社交分享类的App,这不,双十一就要到了,为了争取在这段能够增大曝光度,老板大手一挥,让我们又增铺上了几十个渠道,希望能打出名气. 我们运营一听到这句话,心里就咣当一声,这岂不是说,数据统计的工作也要增加?倒不是对公司的决策有怨言,而是目前我们运营人手少,之前的渠道每个人身上都压有统计任务,都要将自己负责的渠道包打好标注,发出去后还要追踪记录,整天扒拉着数据做整理,这数据一多,脑子就开始乱,再加上其他的工作安排,可不是晕头转向. 我们还请了专做推广的人,但是脑疼的是,两方要

IOS渠道统计困境及解决方案

背景在开始之前,我们先来看看安卓的渠道统计.Google官方的应用商店Google Play在国内一直是无法使用的状态,所以国内的安卓App分发,都是依托数十个不同的应用市场或发行渠道,如百度.360.腾讯等互联网企业以及小米.华为.魅族等手机生产商.对于安卓App的渠道追踪,主要是围绕上面这些大的渠道来进行,并且这些渠道自己一般也会提供非常详尽和周全的数据分析给应用开发者. iOS的发行渠道则与安卓有很大的不同,除了少数越狱的机器之外,大部分用户的App都是从 App Store下载的.iOS

android分渠道打包,监测日活量统计(基于友盟SDK)

客服说要看App日活,让我们加个统计功能. (我们技术部已经混到客服部都能直接提需求的地步) 首先接入友盟统计的SDK,在项目外层的build.gradle中添加依赖'https://dl.bintray.com/umsdk/release' buildscript { repositories { google() jcenter() maven { url 'https://dl.bintray.com/umsdk/release' } } dependencies { classpath