官方给你参考文档,很扯淡,是c++和python脚本:

安卓java代码接入如下:

  1. package com.edaixi.util;
  2.  
  3. import java.io.UnsupportedEncodingException;
  4. import java.net.SocketException;
  5. import java.net.URLEncoder;
  6. import java.security.MessageDigest;
  7. import android.annotation.SuppressLint;
  8. import android.content.Context;
  9. import android.telephony.TelephonyManager;
  10. import com.lidroid.xutils.HttpUtils;
  11. import com.lidroid.xutils.exception.HttpException;
  12. import com.lidroid.xutils.http.ResponseInfo;
  13. import com.lidroid.xutils.http.callback.RequestCallBack;
  14. import com.lidroid.xutils.http.client.HttpRequest.HttpMethod;
  15.  
  16. public class TecentAdsUtil {
  17.  
  18. private static Context mContext;
  19.  
  20. public TecentAdsUtil(Context mContext) {
  21. super();
  22. TecentAdsUtil.mContext = mContext;
  23. }
  24.  
  25. @SuppressWarnings("deprecation")
  26. public void getToTencentAds() throws SocketException {
  27. String encrypt_key = "*************";
  28. String IMEIString = getDeviceIMEI();
  29. String TimeString = getSystemTime();
  30. String query_string;
  31. try {
  32. query_string = "muid=" + URLEncoder.encode(IMEIString, "UTF-8")
  33. + "&conv_time=" + URLEncoder.encode(TimeString, "UTF-8");
  34.  
  35. String page = "http://t.gdt.qq.com/conv/app/appid" + "/conv?"
  36. + query_string;
  37. String encode_page = URLEncoder.encode(page, "UTF-8");
  38. String property = "encrypt_key&GET&" + encode_page;
  39. String signature = string2MD5(property);
  40.  
  41. String base_data = query_string + "&sign="
  42. + URLEncoder.encode(signature, "UTF-8");
  43. String base64 = ToBase64(base_data, encrypt_key);
  44. String data = new String(Base64Util.encode(base64.getBytes()));
  45. String attachment = "conv_type="
  46. + URLEncoder.encode("MOBILEAPP_ACTIVITE", "UTF-8")
  47. + "&app_type=" + URLEncoder.encode("ANDROID", "UTF-8")
  48. + "&advertiser_id=" + URLEncoder.encode("673411", "UTF-8");
  49. final String finalUrl = "http://t.gdt.qq.com/conv/app/1104311868/conv?v="
  50. + data + "&" + attachment;
  51.  
  52. HttpUtils http = new HttpUtils();
  53. http.configTimeout(10 * 1000);
  54. http.send(HttpMethod.GET, finalUrl, new RequestCallBack<String>() {
  55.  
  56. @Override
  57. public void onStart() {
  58. }
  59.  
  60. @Override
  61. public void onFailure(HttpException arg0, String result) {
  62. }
  63.  
  64. @Override
  65. public void onSuccess(ResponseInfo<String> result) {
  66. LogUtil.e("===广点通返回的结果==="+result.result);
  67. }
  68. });
  69. } catch (UnsupportedEncodingException e) {
  70. e.printStackTrace();
  71. }
  72. }
  73.  
  74. @SuppressLint("DefaultLocale")
  75. public static String getDeviceIMEI() {
  76. String imei = ((TelephonyManager) mContext
  77. .getSystemService(Context.TELEPHONY_SERVICE)).getDeviceId();
  78. return string2MD5(imei.toLowerCase());
  79. }
  80.  
  81. // 获取当前时间戳
  82. public static String getSystemTime() {
  83. long time = System.currentTimeMillis() / 1000;
  84. return time + "";
  85. }
  86.  
  87. // MD5工具类
  88. public static String string2MD5(String inStr) {
  89. MessageDigest md5 = null;
  90. try {
  91. md5 = MessageDigest.getInstance("MD5");
  92. } catch (Exception e) {
  93. System.out.println(e.toString());
  94. e.printStackTrace();
  95. return "";
  96. }
  97. char[] charArray = inStr.toCharArray();
  98. byte[] byteArray = new byte[charArray.length];
  99.  
  100. for (int i = 0; i < charArray.length; i++)
  101. byteArray[i] = (byte) charArray[i];
  102. byte[] md5Bytes = md5.digest(byteArray);
  103. StringBuffer hexValue = new StringBuffer();
  104. for (int i = 0; i < md5Bytes.length; i++) {
  105. int val = ((int) md5Bytes[i]) & 0xff;
  106. if (val < 16)
  107. hexValue.append("0");
  108. hexValue.append(Integer.toHexString(val));
  109. }
  110. return hexValue.toString();
  111.  
  112. }
  113.  
  114. // Base64工具类
  115. public static String ToBase64(String base_data, String encrypt_key) {
  116. char[] base_datachar = base_data.toCharArray();
  117. char[] base_datacharBak = new char[base_datachar.length];
  118. char[] encrypt_keychar = encrypt_key.toCharArray();
  119. int j = 0;
  120. for (int i = 0; i < base_datachar.length; i++) {
  121. base_datacharBak[i] = (char) (base_datachar[i] ^ encrypt_keychar[j]);
  122. j = (++j) % (encrypt_keychar.length);
  123. }
  124. return new String(base_datacharBak);
  125. }
  126.  
  127. }

  

  1. package com.edaixi.util;
  2.  
  3. import java.io.UnsupportedEncodingException;
  4.  
  5. public class Base64Util {
  6. private static char[] base64EncodeChars = new char[] { 'A', 'B', 'C', 'D',
  7. 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q',
  8. 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd',
  9. 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q',
  10. 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3',
  11. '4', '5', '6', '7', '8', '9', '+', '/' };
  12.  
  13. private static byte[] base64DecodeChars = new byte[] { -1, -1, -1, -1, -1,
  14. -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
  15. -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
  16. -1, -1, -1, -1, 62, -1, -1, -1, 63, 52, 53, 54, 55, 56, 57, 58, 59,
  17. 60, 61, -1, -1, -1, -1, -1, -1, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
  18. 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1,
  19. -1, -1, -1, -1, -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37,
  20. 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1,
  21. -1, -1 };
  22.  
  23. public static String encode(byte[] data) {
  24. StringBuffer sb = new StringBuffer();
  25. int len = data.length;
  26. int i = 0;
  27. int b1, b2, b3;
  28. while (i < len) {
  29. b1 = data[i++] & 0xff;
  30. if (i == len) {
  31. sb.append(base64EncodeChars[b1 >>> 2]);
  32. sb.append(base64EncodeChars[(b1 & 0x3) << 4]);
  33. sb.append("==");
  34. break;
  35. }
  36. b2 = data[i++] & 0xff;
  37. if (i == len) {
  38. sb.append(base64EncodeChars[b1 >>> 2]);
  39. sb.append(base64EncodeChars[((b1 & 0x03) << 4)
  40. | ((b2 & 0xf0) >>> 4)]);
  41. sb.append(base64EncodeChars[(b2 & 0x0f) << 2]);
  42. sb.append("=");
  43. break;
  44. }
  45. b3 = data[i++] & 0xff;
  46. sb.append(base64EncodeChars[b1 >>> 2]);
  47. sb.append(base64EncodeChars[((b1 & 0x03) << 4)
  48. | ((b2 & 0xf0) >>> 4)]);
  49. sb.append(base64EncodeChars[((b2 & 0x0f) << 2)
  50. | ((b3 & 0xc0) >>> 6)]);
  51. sb.append(base64EncodeChars[b3 & 0x3f]);
  52. }
  53. return sb.toString();
  54. }
  55.  
  56. public static byte[] decode(String str) throws UnsupportedEncodingException {
  57. StringBuffer sb = new StringBuffer();
  58. byte[] data = str.getBytes("US-ASCII");
  59. int len = data.length;
  60. int i = 0;
  61. int b1, b2, b3, b4;
  62. while (i < len) {
  63. /* b1 */
  64. do {
  65. b1 = base64DecodeChars[data[i++]];
  66. } while (i < len && b1 == -1);
  67. if (b1 == -1)
  68. break;
  69. /* b2 */
  70. do {
  71. b2 = base64DecodeChars[data[i++]];
  72. } while (i < len && b2 == -1);
  73. if (b2 == -1)
  74. break;
  75. sb.append((char) ((b1 << 2) | ((b2 & 0x30) >>> 4)));
  76. /* b3 */
  77. do {
  78. b3 = data[i++];
  79. if (b3 == 61)
  80. return sb.toString().getBytes("ISO-8859-1");
  81. b3 = base64DecodeChars[b3];
  82. } while (i < len && b3 == -1);
  83. if (b3 == -1)
  84. break;
  85. sb.append((char) (((b2 & 0x0f) << 4) | ((b3 & 0x3c) >>> 2)));
  86. /* b4 */
  87. do {
  88. b4 = data[i++];
  89. if (b4 == 61)
  90. return sb.toString().getBytes("ISO-8859-1");
  91. b4 = base64DecodeChars[b4];
  92. } while (i < len && b4 == -1);
  93. if (b4 == -1)
  94. break;
  95. sb.append((char) (((b3 & 0x03) << 6) | b4));
  96. }
  97. return sb.toString().getBytes("ISO-8859-1");
  98. }
  99. }

  

Android 应用接入广点通统计API 方案的更多相关文章

  1. 腾讯广告联盟 Android SDK(广点通)demo的使用方式

    1. 下载示例文件. 2. 解压之后的目录: 3. 使用android studio,选择import project,导入如图所示文件夹: 4. 重点来了,由于官方demo的上传时间很久远(大概是上 ...

  2. Android平台接入Facebook登录

    官方教程地址: https://developers.facebook.com/docs/android/getting-started 开发环境为Android Studio,官方要求SDK最低版本 ...

  3. Android各版本代号、版本号、API/NDK级别、发布时间及市场份额

    Android各版本代号.版本号.API/NDK级别.发布时间及市场份额 代号 版本号 API/NDK级别 发布时间 - O 8.0 API level 26 2017-3-21 牛轧糖 Nougat ...

  4. cocos2d-js添加广点通插屏(通过jsb反射机制)

    1.把广点通的jar包加入libs文件夹 2.修改AndroidManifest.xml文件 添加权限: <uses-permission android:name="android. ...

  5. Unity在Android和iOS中如何调用Native API

    本文主要是对unity中如何在Android和iOS中调用Native API进行介绍. 首先unity支持在C#中调用C++ dll,这样可以在Android和iOS中提供C++接口在unity中调 ...

  6. Android 6.0 新功能及主要 API 变更

    运行时权限 这个版本中引入了新的权限模型,现在用户可以在运行时直接管理应用程序的权限.这个模型基于用户对权限控制的更多可见性,同时为应用程序的开发者提供更流畅的应用安装和自动升级.用户可以为已安装的每 ...

  7. Android 支付宝接入时常见的问题

    1.概述 首先说明下,Android支付宝接入用的是快捷支付,下载地址是https://b.alipay.com/order/techService.htm    支付宝移动接入地址https://b ...

  8. 百度统计API的使用

    百度统计API的使用 在搭建自己博客的时候,希望自己能有个日志系统,能够看到PV.UV等信息,同时自己也搭建了个ELK系统,可惜服务器配置太低(1GHZ+1G内存),根本运行不起来.只能使用第三方的日 ...

  9. Android BLE与终端通信(五)——Google API BLE4.0低功耗蓝牙文档解读之案例初探

    Android BLE与终端通信(五)--Google API BLE4.0低功耗蓝牙文档解读之案例初探 算下来很久没有写BLE的博文了,上家的技术都快忘记了,所以赶紧读了一遍Google的API顺便 ...

随机推荐

  1. MediaController

    前言 本章内容是android.widget.MediaController,版本为Android 2.3 r1,翻译来自"唐明",再次感谢"唐明" !期待你一 ...

  2. 如风一样,飞翔------Day37

    我一直都觉得自己是个反应没有那么敏锐的人,而不幸的是其实也是,所以,在菜鸟的头衔上,我不得不再背负上一个笨鸟的"光芒".我不苛求一飞冲天的传奇,却也有着不甘寂寞的激昂,我选择先飞, ...

  3. 一个C/C++结构体初始化有趣的现象

    我们知道C语言当中结构可以使用{}进行初始化,例如有结构体定义如下: typedef struct type_t { int a; int b; int c; int d; }type_t; 我们可以 ...

  4. Java基础学习笔记2-循环

    while循环与do while循环: while循环的格式: while(条件表达式) { 执行语句; } do while循环格式: do { 执行语句; } while(条件表达式); do w ...

  5. <原>ASP.NET 学习笔记之HTML helper中参数何时会是路由参数,何时又会是query string?

    HTML helper中参数何时会是路由参数,何时又会是query string?   @Html.ActionLink("Edit", "Edit", new ...

  6. iOS退出键盘的两种方式

    1,可以让叫出键盘的那个控件,退出第一响应者; 例如:textField叫出的键盘,那么就可以调用textField.resignFirstResponder,达到谁叫出的键盘谁退回去 2,可以让叫出 ...

  7. JAVA关键字transient

    转载自http://www.cnblogs.com/liuling/archive/2013/05/05/transient.html 1.transient关键字只能修饰变量,而不能修饰方法和类.注 ...

  8. 处理date类型对象的方式

    在jsp中通过key属性映射到编译后jsp页面的name属性,通过model中的 setxxxx()方法将jsp页面通过wdatepicker插件产生的string类型的数据转换为timestamp类 ...

  9. Python进阶之自定义排序函数sorted()

    sorted() .note-content {font-family: "Helvetica Neue",Arial,"Hiragino Sans GB",& ...

  10. echarts的使用总结;

    题外话:好久没来博客园了,这几个月自己的工作经历可以算是相当丰富,其实一直不知道自己做web前端能做到什么时候,但是想说既然现在还在做着这个职位,就好好的学习.之前很少写js代码,来了新公司大多数都是 ...