友盟+搜索

{{errorMsg}}

Android

概述

Umeng Analytics Hybrid 支持android+WebView开发的应用、游戏。 通过在app中加入SDK,在 友盟+官方网站获取相应应用功能的最新数据。 统计所有指标,均和标准移动统计完全相同。

下载SDK

在官方地址下载相应的sdk

导入SDK

- Umeng.js拷贝至android项目assets目录下
- UMHybrid.java拷贝到项目中,并且修改相应的包名
- 将下载的Android/umeng-analytics**.jar拷贝到项目的libs目录中,并且导入    

基本功能集成

配置manifest和appkey

    <manifest……>
        <uses-sdk android:minSdkVersion="4"></uses-sdk>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.INTERNET"></uses-permission>
    <uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>
    <application ……>
    ……
    <activity ……/>
    <meta-data android:value="YOUR_APP_KEY" android:name="UMENG_APPKEY"></meta-data>
    <meta-data android:value="Channel ID" android:name="UMENG_CHANNEL"/>
    </application>
    </manifest>

不在manifest里配置友盟的appkey,而在Activity中配置:只需在程序启动时的Activity中调用此接口实现:MobclickAgent.startWithConfigure(UMAnalyticsConfig config);

Java代码配置

添加自定义的 WebViewClient,实现参考下面的代码:

    class CustomWebViewClient extends WebViewClient {

    @Override
    public void onPageFinished(WebView view, String url) {
        view.loadUrl("javascript:setWebViewFlag()");
        if (url != null && url.endsWith("/index.html")) {
            MobclickAgent.onPageStart("index.html");
        }
    }

    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        try {
            Log.d("UMHybrid", "shouldOverrideUrlLoading url:" + url);
            String decodedURL = java.net.URLDecoder.decode(url, "UTF-8");
            UMHybrid.getInstance(MainActivity.this).execute(decodedURL, view);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
        }
    }

主要作用是对URL进行处理. 其中参数 setWebViewFlag 是SDK的javascript和native代码通讯的开关。这个开关需要 重写WebVeiwClient.shouldOverrideUrlLoading 方法来处理.如果不按照此方法集成则不能正常使用

HTML页面配置

在对应的html页面中引入 Umeng.js 文件,然后调用 Umeng.js里的方法即可实现不同的统计功能.

统计方法

  • JavaScript方法介绍

    • MobclickAgent.getDeviceId(deviceId) 获取Android IMEI
    • MobclickAgent.onEvent(eventId) 自定义事件
    • MobclickAgent.onCCEvent(evenArray, evenValue, eventLabel) 结构化自定义事件
    • MobclickAgent.onEventWithLabel(eventId, eventLabel) 自定义事件
    • MobclickAgent.onEventWithParameters(eventId, eventData) 自定义事件
    • MobclickAgent.onEventWithCounter(eventId, eventData, eventNum) 自定义事件
    • MobclickAgent.onPageBegin(pageName) 页面开始的时候调用此方法
    • MobclickAgent.onPageEnd(pageName) 页面结束的时候调用此方法
    • MobclickAgent.profileSignInWithPUID(puid) 统计帐号登录接口
    • MobclickAgent.profileSignInWithPUIDWithProvider(puid, provider) 统计帐号登录接口
    • MobclickAgent.profileSignOff() 帐号统计退出接口
    • MobclickAgent.setUserLevelId(level) 当玩家建立角色或者升级时,需调用此接口
    • MobclickAgent.startLevel(level) 在游戏开启新的关卡的时候调用
    • MobclickAgent.finishLevel(level) 关卡结束时候调用
    • MobclickAgent.failLevel(level) 关卡失败时候调用
    • MobclickAgent.exchange(orderId, currencyAmount, currencyType, virtualAmount, channel) 真实消费统计
    • MobclickAgent.pay(cash, source, coin) 真实消费统计
    • MobclickAgent.payWithItem(cash, source, item, amount, price) 真实消费统计
    • MobclickAgent.buy(item, amount, price) 虚拟消费统计
    • MobclickAgent.use(item, amount, price) 物品消耗统计
    • MobclickAgent.bonusWithItem(item, amount, price, source) 额外奖励
    • MobclickAgent.(coin, source) 额外奖励

Android标准统计方法可以正常使用.具体参考 友盟+统计分析友盟+游戏统计分析

代码混淆

集成完毕后,如果你的应用使用了混淆,请添加:

-keepclassmembers class * {
   public <init> (org.json.JSONObject);
}

这是由于SDK中的部分代码使用反射来调用构造函数, 如果被混淆掉, 在运行时会提示"NoSuchMethod"错误。 另外,由于SDK需要引用导入工程的资源文件,通过了反射机制得到资源引用文件R.java,但是在开发者通过proguard等混淆/优化工具处理apk时,proguard可能会将R.java删除,如果遇到这个问题,请在proguard配置文件中添加keep命令如:

-keep public class [您的应用包名].R$*{
public static final int *;
}

把[您的应用包名] 替换成您自己的包名,如com.yourcompany.example。如果您使用5.0.0及以上版本的SDK,请添加如下命令:


-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}
把[您的应用包名] 替换成您自己的包名
-keep public class [您的应用包名].UMHybrid { *;}

iOS

添加插件

a). 将文件夹中的 UMHybrid.hUMHybrid.mUMMobClick.framework 添加到 iOS 工程中。
b). 将文件夹中的 Umeng.js 复制到混合模式的项目中。

配置插件

在 iOS 工程使用 UIWebView 控件的 xxxxViewController.m 文件中引入 UMHybrid.h 头文件,在UIWebViewDelegate 的方法中加入以下代码:

        #import "UMHybrid.h"
        - (BOOL)webView:(UIWebView *)webView
        shouldStartLoadWithRequest:(NSURLRequest *)request
        navigationType:(UIWebViewNavigationType)navigationType {
        NSURL * url = [request URL];
        if ([UMHybrid execute:url webView:webView]) {
            return NO;
        }
            return YES;
        }
           - (void)webViewDidFinishLoad:(UIWebView *)webView {

          [webView stringByEvaluatingJavaScriptFromString:@"setWebViewFlag()"];

            }

如果 js 触发的是 Umeng 的事件,execute 方法会返回 YES,否则返回 NO

使用WKWebView配置:

a). 将文件夹中的 `UMWKHybrid.h`、`UMWKHybrid.m` 和 `UMMobClick.framework` 添加到 iOS 工程中。

b). 将文件夹中的 `Umeng.js` 复制到混合模式的项目中。

在 iOS 工程使用 `WKWebView` 控件的 `xxxxViewController.m` 文件中引入 `UMWKHybrid.h` 头文件,在`WKNavigationDelegate` 的方法中加入以下代码:

 #import "UMWKHybrid.h"
- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler {

NSString *url = [navigationAction.request.URL.absoluteString stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

NSString *parameters = [url stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
[UMWKHybrid execute:parameters webView:webView];
decisionHandler(WKNavigationActionPolicyAllow);

}

- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation {
[webView evaluateJavaScript:@"setWebViewFlag()" completionHandler:^(id _Nullable response, NSError * _Nullable error) {

}];

}

工程配置

在工程目录结构中,添加友盟统计框架,在选项 TARGETS-->Build Phases-->Link Binary With Libraries--> Add Other,找到下载的UMMobClick.framework文件并选择确认;添加系统的依赖框架(Framework)和编译器选项 TARGETS-->Build Phases-->Link Binary With Libraries--> + -->CoreTelephony.framework libz.tbd libsqlite.tbd.

iOS9中ATS配置

由于iOS9引入了App Transport Security (ATS)特性,要求App访问的网络使用HTTPS协议,如果不做特殊设置,http请求会失败,所以需要开发者在工程中增加设置以便可以发送http请求,在info plist中增加字段:

 <key>NSAppTransportSecurity</key> <dict>
 <key>NSAllowsArbitraryLoads</key><true/> </dict>

页面集成

Javascript 文件集成
index.html 中引入 Umeng.js 文件。

统计方法

JavaScript方法介绍

- MobclickAgent.getDeviceId(deviceId) 获取IOS UUID  
- MobclickAgent.onEvent(eventId) 自定义事件  
- MobclickAgent.onCCEvent(evenArray, evenValue, eventLabel) 结构化自定义事件  
- MobclickAgent.onEventWithLabel(eventId, eventLabel) 自定义事件  
- MobclickAgent.onEventWithParameters(eventId, eventData) 自定义事件  
- MobclickAgent.onEventWithCounter(eventId, eventData, eventNum) 自定义事件  
- MobclickAgent.onPageBegin(pageName) 页面开始的时候调用此方法  
- MobclickAgent.onPageEnd(pageName) 页面结束的时候调用此方法  
- MobclickAgent.profileSignInWithPUID(puid) 统计帐号登录接口  
- MobclickAgent.profileSignInWithPUIDWithProvider(puid, provider) 统计帐号登录接口  
- MobclickAgent.profileSignOff() 帐号统计退出接口  
- MobclickAgent.setUserLevelId(level) 当玩家建立角色或者升级时,需调用此接口  
- MobclickAgent.startLevel(level) 在游戏开启新的关卡的时候调用  
- MobclickAgent.finishLevel(level) 关卡结束时候调用  
- MobclickAgent.failLevel(level) 关卡失败时候调用  
- MobclickAgent.exchange(orderId, currencyAmount, currencyType, virtualAmount, channel) 真实消费统计  
- MobclickAgent.pay(cash, source, coin) 真实消费统计  
- MobclickAgent.payWithItem(cash, source, item, amount, price) 真实消费统计  
- MobclickAgent.buy(item, amount, price) 虚拟消费统计  
- MobclickAgent.use(item, amount, price) 物品消耗统计  
- MobclickAgent.bonusWithItem(item, amount, price, source) 额外奖励  
- MobclickAgent.bonus(coin, source) 额外奖励    

iOS标准统计方法可以正常使用.具体参考 友盟+统计分析友盟+游戏统计分析