chicken_dy/Assets/Plugins/ToukaGames/AnalyticsSDK/Umeng/Scripts/Analytics.cs

578 lines
12 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// Created by ZhuCong on 1/1/14.
// Copyright 2014 Umeng.com . All rights reserved.
//
//#undef UNITY_EDITOR
using UnityEngine;
using System;
using System.Runtime.InteropServices;
using System.Collections;
using System.Collections.Generic;
using System.Text;
namespace Umeng
{
public partial class Analytics
{
#if UNITY_ANDROID
static bool hasInit = false;
protected static AndroidJavaClass UMConfigure = new AndroidJavaClass("com.umeng.commonsdk.UMConfigure");
//protected static AndroidJavaClass Agent = new AndroidJavaClass("com.umeng.analytics.game.UMGameAgent");
protected static AndroidJavaClass Agent = new AndroidJavaClass("com.umeng.analytics.MobclickAgent");
protected static AndroidJavaObject Context = new AndroidJavaClass("com.unity3d.player.UnityPlayer").GetStatic<AndroidJavaObject>("currentActivity");
#endif
private const string Version = "3.2";
public enum DeviceType
{
Phone = 0,
Box = 1
}
//iOS Android Universal API
//
/// <summary>
/// 开始友盟统计 默认发送策略为启动时发送
/// </summary>
/// <param name="appKey">友盟appKey</param>
/// <param name="channelId">渠道名称</param>
///
///
public static void StartWithAppKeyAndChannelId(string appKey, string channelId)
{
#if UNITY_EDITOR
//Debug.LogWarning("友盟统计在iOS/Android 真机上才会向友盟后台服务器发送事件 请在真机上测试");
#elif UNITY_IPHONE
UMCommonSetAppkeyAndChannel(appKey,channelId);
//iOS 必须设置 android 无此API
_SetScenarioType();
#elif UNITY_ANDROID
UMCommonSetAppkeyAndChannel(appKey,channelId);
//2次init 第一次UMConfigureinit在UMCommonSetAppkeyAndChannel方法内,第二次在这里UMGameAgent.init()
Agent.CallStatic("init",Context);
if(!hasInit)
{
//Debug.LogWarning("onResume");
onResume();
AddUmengAndroidLifeCycleCallBack();
hasInit = true;
}
#endif
}
private static void UMCommonSetAppkeyAndChannel(string appkey, string channelId,DeviceType deviceType=DeviceType.Phone,string pushSecret=null)
{
#if UNITY_EDITOR
#elif UNITY_IPHONE
_SetWrapperTypeAndVersion("Unity", Version);
_UMCommonSetAppkeyAndChannel(appkey, channelId);
#elif UNITY_ANDROID
UMConfigure.CallStatic("setWraperType","Unity",Version);
UMConfigure.CallStatic("init",Context,appkey,channelId,(int)deviceType,pushSecret);
#endif
}
/// <summary>
/// 设置是否打印sdk的信息,默认不开启
/// </summary>
/// <param name="value">设置为true,Umeng SDK 会输出日志信息,记得release产品时要设置回false.</param>
///
public static void SetLogEnabled(bool value)
{
#if UNITY_EDITOR
//Debug.Log("SetLogEnabled");
#elif UNITY_IPHONE
_SetLogEnabled(value);
#elif UNITY_ANDROID
UMConfigure.CallStatic("setLogEnabled",value);
#endif
}
//使用前请先到友盟App管理后台的设置->编辑自定义事件 中添加相应的事件ID然后在工程中传入相应的事件ID
//eventId、attributes中key和value都不能使用空格和特殊字符且长度不能超过255个字符否则将截取前255个字符
//id ts du是保留字段不能作为eventId及key的名称
/// <summary>
/// 基本事件
/// </summary>
/// <param name="eventId">友盟后台设定的事件Id</param>
public static void Event(string eventId)
{
#if UNITY_EDITOR
//Debug.Log("Event");
#elif UNITY_IPHONE
_Event(eventId);
#elif UNITY_ANDROID
Agent.CallStatic("onEvent", Context, eventId);
#endif
}
//不同的标签会分别进行统计,方便同一事件的不同标签的对比,为nil或空字符串时后台会生成和eventId同名的标签.
/// <summary>
/// 基本事件
/// </summary>
/// <param name="eventId">友盟后台设定的事件Id</param>
/// <param name="label">分类标签</param>
public static void Event(string eventId, string label)
{
#if UNITY_EDITOR
//Debug.Log("Event");
#elif UNITY_IPHONE
_EventWithLabel(eventId, label);
#elif UNITY_ANDROID
Agent.CallStatic("onEvent", Context, eventId, label);
#endif
}
/// <summary>
/// 属性事件
/// </summary>
/// <param name="eventId">友盟后台设定的事件Id</param>
/// <param name="attributes"> 属性中的Key-Vaule Pair不能超过10个</param>
public static void Event(string eventId, Dictionary<string, string> attributes)
{
#if UNITY_EDITOR
//Debug.Log("Event");
#elif UNITY_IPHONE
_EventWithAttributes(eventId, DictionaryToJson(attributes));
#elif UNITY_ANDROID
Agent.CallStatic("onEvent", Context, eventId, ToJavaHashMap(attributes));
#endif
}
/// <summary>
/// 页面时长统计,记录某个页面被打开多长时间
/// </summary>
/// <param name="pageName">被统计view名称</param>
///
public static void PageBegin(string pageName)
{
#if UNITY_EDITOR
//Debug.Log("PageBegin");
#elif UNITY_IPHONE
_BeginLogPageView(pageName);
#elif UNITY_ANDROID
Agent.CallStatic("onPageStart", pageName);
#endif
}
/// <summary>
/// 页面时长统计,记录某个页面被打开多长时间
/// 与PageBegin配对使用
/// </summary>
/// <param name="pageName">被统计view名称</param>
///
public static void PageEnd(string pageName)
{
#if UNITY_EDITOR
//Debug.Log("PageEnd");
#elif UNITY_IPHONE
_EndLogPageView(pageName);
#elif UNITY_ANDROID
Agent.CallStatic("onPageEnd", pageName);
#endif
}
/// <summary>
/// 自定义事件 — 计算事件数
/// </summary>
public static void Event(string eventId, Dictionary<string, string> attributes, int value)
{
try
{
if (attributes == null)
attributes = new System.Collections.Generic.Dictionary<string, string>();
if (attributes.ContainsKey("__ct__"))
{
attributes["__ct__"] = value.ToString();
Event(eventId, attributes);
}
else
{
attributes.Add("__ct__", value.ToString());
Event(eventId, attributes);
attributes.Remove("__ct__");
}
}
catch (Exception)
{
}
}
public static string GetTestDeviceInfo()
{
#if UNITY_EDITOR
//Unity Editor 模式下 返回null 请在iOS/Anroid真机上测试
//Debug.Log("GetDeviceInfo return null");
return null;
#elif UNITY_IPHONE
return _GetDeviceID();
#elif UNITY_ANDROID
Debug.Log("GetDeviceInfo return ");
return UMConfigure.CallStatic<String[]>("getTestDeviceInfo", Context)[0];
#else
return null;
#endif
}
//设置是否对日志信息进行加密, 默认false(不加密).
//value 设置为true, SDK会将日志信息做加密处理
public static void SetLogEncryptEnabled(bool value)
{
#if UNITY_EDITOR
//Debug.Log("SetLogEncryptEnabled");
#elif UNITY_IPHONE
_SetEncryptEnabled(value);
#elif UNITY_ANDROID
UMConfigure.CallStatic("setEncryptEnabled",value);
#endif
}
public static void SetLatency(int value)
{
#if UNITY_EDITOR
//Debug.Log("SetLatency");
#elif UNITY_IPHONE
//_SetLatency(value);
#elif UNITY_ANDROID
Agent.CallStatic("setLatencyWindow", (long)value);
#endif
}
//Android Only
#if UNITY_ANDROID
//设置Session时长
public static void SetContinueSessionMillis(long milliseconds)
{
#if UNITY_EDITOR
//Debug.Log("setContinueSessionMillis");
#else
Agent.CallStatic("setSessionContinueMillis", milliseconds);
#endif
}
/*
android6.0中采集mac方式变更新增接口 public static void setCheckDevice(boolean enable) 该接口默认参数是true即采集mac地址
但如果开发者需要在googleplay发布考虑到审核风险可以调用该接口参数设置为 false 就不会采集mac地址。
*/
public static void SetCheckDevice(bool value)
{
#if UNITY_EDITOR
#else
Agent.CallStatic("setCheckDevice", value);
#endif
}
#endif
//iOS Only
#if UNITY_IPHONE
/// <summary>
/// 页面时长统计,记录某个view被打开多长时间,与调用PageBegin,PageEnd计时等价
/// </summary>
/// <param name="pageName">被统计view名称</param>
/// <param name="seconds">时长单位为秒</param>
///
public static void LogPageViewWithSeconds(string pageName, int seconds)
{
#if UNITY_EDITOR
//Debug.Log("LogPageViewWithSeconds");
#else
_LogPageViewWithSeconds(pageName, seconds);
#endif
}
/// <summary>
/// 判断设备是否越狱,判断方法根据 apt和Cydia.app的path来判断
/// </summary>
/// <returns>是否越狱</returns>
public static bool IsJailBroken()
{
#if UNITY_EDITOR
//always return false in UNITY_EDITOR mode
//Debug.Log("IsJailBroken always return false in UNITY_EDITOR mode");
return false;
#else
return _IsJailBroken();
#endif
}
/// <summary>
/// 判断你的App是否被破解
/// </summary>
/// <returns>是否破解</returns>
public static bool IsPirated()
{
#if UNITY_EDITOR
//always return false in UNITY_EDITOR mode
//Debug.Log("IsPirated always return false in UNITY_EDITOR mode");
return false;
#else
return _IsPirated();
#endif
}
#endif
#region Wrapper
private static void AddUmengAndroidLifeCycleCallBack()
{
GameObject go = new GameObject();
go.AddComponent<UmengAndroidLifeCycleCallBack>();
go.name = "UmengManager";
}
#if UNITY_ANDROID
public static void onResume()
{
#if UNITY_EDITOR
#else
Agent.CallStatic("onResume", Context);
#endif
}
public static void onPause()
{
#if UNITY_EDITOR
#else
Agent.CallStatic("onPause", Context);
#endif
}
public static void onKillProcess()
{
#if UNITY_EDITOR
#else
Agent.CallStatic("onKillProcess", Context);
#endif
}
#endif
#if UNITY_IPHONE && !UNITY_EDITOR
static string DictionaryToJson(Dictionary<string, string> dict)
{
var builder = new StringBuilder("{");
foreach (KeyValuePair<string, string> kv in dict)
{
builder.AppendFormat("\"{0}\":\"{1}\",", kv.Key, kv.Value);
}
builder[builder.Length - 1] = '}';
return builder.ToString();
}
[DllImport("__Internal")]
private static extern void _SetWrapperTypeAndVersion(string wrapperType,string wrapperVersion);
[DllImport("__Internal")]
private static extern void _SetLogEnabled(bool value);
[DllImport("__Internal")]
private static extern void _SetScenarioType();
[DllImport("__Internal")]
private static extern void _UMCommonSetAppkeyAndChannel(string appkey, string channelId);
[DllImport("__Internal")]
private static extern void _Event(string eventId);
[DllImport("__Internal")]
private static extern void _EventWithLabel(string eventId, string label);
[DllImport("__Internal")]
private static extern void _EventWithAttributes(string eventId, string jsonstring);
[DllImport("__Internal")]
private static extern void _LogPageViewWithSeconds(string pageName, int seconds);
[DllImport("__Internal")]
private static extern void _BeginLogPageView(string pageName);
[DllImport("__Internal")]
private static extern void _EndLogPageView(string pageName);
[DllImport("__Internal")]
private static extern bool _IsJailBroken();
[DllImport("__Internal")]
private static extern bool _IsPirated();
[DllImport("__Internal")]
private static extern string _GetDeviceID();
[DllImport("__Internal")]
private static extern void _SetEncryptEnabled(bool value);
#endif
#endregion
}
}