sugo-android-sdk-xwalk

....

License

License

GroupId

GroupId

io.sugo.android
ArtifactId

ArtifactId

sugo-android-sdk-xwalk
Last Version

Last Version

1.1.1
Release Date

Release Date

Type

Type

aar
Description

Description

sugo-android-sdk-xwalk
....
Project URL

Project URL

https://github.com/Datafruit/sugo-android-sdk
Source Code Management

Source Code Management

https://github.com/Datafruit/sugo-android-sdk.git

Download sugo-android-sdk-xwalk

How to add to project

<!-- https://jarcasting.com/artifacts/io.sugo.android/sugo-android-sdk-xwalk/ -->
<dependency>
    <groupId>io.sugo.android</groupId>
    <artifactId>sugo-android-sdk-xwalk</artifactId>
    <version>1.1.1</version>
    <type>aar</type>
</dependency>
// https://jarcasting.com/artifacts/io.sugo.android/sugo-android-sdk-xwalk/
implementation 'io.sugo.android:sugo-android-sdk-xwalk:1.1.1'
// https://jarcasting.com/artifacts/io.sugo.android/sugo-android-sdk-xwalk/
implementation ("io.sugo.android:sugo-android-sdk-xwalk:1.1.1")
'io.sugo.android:sugo-android-sdk-xwalk:aar:1.1.1'
<dependency org="io.sugo.android" name="sugo-android-sdk-xwalk" rev="1.1.1">
  <artifact name="sugo-android-sdk-xwalk" type="aar" />
</dependency>
@Grapes(
@Grab(group='io.sugo.android', module='sugo-android-sdk-xwalk', version='1.1.1')
)
libraryDependencies += "io.sugo.android" % "sugo-android-sdk-xwalk" % "1.1.1"
[io.sugo.android/sugo-android-sdk-xwalk "1.1.1"]

Dependencies

There are no dependencies for this project. It is a standalone project that does not depend on any other jars.

Project Modules

There are no modules declared in this project.

Sugo Android SDK 使用文档

1. SDK 集成

集成 Sugo Android SDK

通过 Gradle 集成

dependencies {
    compile 'io.sugo.android:sugo-android-sdk:2.3.5'
}

添加 sugo sdk 依赖后,进入项目管理 / SDK 接入 / Android 接入页面,点击【接入说明】按钮,
拷贝 SDK 配置,运行 app 即可完成接入。

如需了解更多详细配置和功能使用,可继续往下看。

Weex 支持

Weex 是一套简单易用的跨平台开发方案,能以 web 的开发体验构建高性能、可扩展的 native 应用,
若要支持 Weex 生成的页面,请额外添加

    compile 'io.sugo.android:sugo-weex:0.0.1'

XWalkView 支持

如果需要支持XWalkView,请另外再添加
(如果不知道这个,就不需要)

    compile 'io.sugo.android:sugo-xwalkview-support:2.1.0'

2. SDK 配置

请先登录您的【数果星盘】管理台,在数据管理-埋点项目-新建项目-新建应用中,创建您的应用,以获取对应的 Token 等。

image

image

2.1 AndroidManifest.xml 基本配置

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    >

    <!-- 必要的权限 -->
    <uses-permission android:name="android.permission.INTERNET"/>
    <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.BLUETOOTH"/>

  <application

    >
    ...
  </application>
</manifest>
  • SDK 配置说明

以下配置不包括{},填入配置时,请删除大括号{}

2.1.0 权限说明

2.1.1 调试模式

开启调试模式,可以输出 SugoSDK 的日志

    <meta-data
        android:name="io.sugo.android.SGConfig.EnableDebugLogging"
        android:value="true"/>

2.1.2 Token 配置

必填

    <meta-data
        android:name="io.sugo.android.SGConfig.token"
        android:value="{YOUR_TOKEN}" />

2.1.3 Project Id 配置

必填

    <meta-data
        android:name="io.sugo.android.SGConfig.ProjectId"
        android:value="{YOUR_PROJECT_ID}" />

2.1.4 埋点配置地址

必填

    <meta-data
        android:name="io.sugo.android.SGConfig.APIHost"
        android:value="{API_URL}" />

2.1.5 可视化埋点地址

必填

<meta-data
        android:name="io.sugo.android.SGConfig.EditorHost"
        android:value="{EDITOR_URL}" />

2.1.6 数据上报地址

必填

    <meta-data
        android:name="io.sugo.android.SGConfig.EventsHost"
        android:value="{EVENTS_URL}" />

2.1.7 扫码跳转页面

必填

在启动的 Activity 上,也就是配置有

    <intent-filter>
        <action android:name="android.intent.action.MAIN" />

        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>

的 Activity 下,添加以下配置

    <intent-filter>
        <data android:scheme="sugo.{YOUR_TOKEN}"/>
        <action android:name="android.intent.action.VIEW"/>

        <category android:name="android.intent.category.DEFAULT"/>
        <category android:name="android.intent.category.BROWSABLE"/>
    </intent-filter>

2.1.8 代码混淆

如果您的应用使用了代码混淆, 请添加


#保护注解
-keepattributes *Annotation*
#不混淆资源类
-keepclassmembers class **.R$* {
    public static <fields>;
}
-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}
-keepattributes *JavascriptInterface*

-keep class android.view.* { *; }
-keep class io.sugo.* { *; }
-keep class io.sugo.android.metrics.SugoAPI { *; }
-keep class io.sugo.android.metrics.SugoWebEventListener { *; }
-keep class io.sugo.android.metrics.SugoWebNodeReporter { *; }


3. SDK 使用

添加依赖

    compile 'com.android.support:support-annotations:{support_version}'
    compile 'com.android.support:support-compat:{support_version}'
    compile 'com.android.support:support-v4:{support_version}'

初始化

    public class App extends Application {
    
        @Override
        public void onCreate() {
            super.onCreate();
            SugoAPI.startSugo(this, SGConfig.getInstance(this));
        }
    
    }

标准的使用实例,应该是在 APP 启动的第一个Activity中,添加以下代码

public class MainActivity extends Activity {

    SugoAPI mSugo;

    public void onCreate(Bundle saved) {
        // 获取 SugoAPI 实例,在第一次调用时,
        mSugo = SugoAPI.getInstance(this);
    }

    // 使用 SugoAPI.track 方法来记录事件
    public void whenSomethingInterestingHappens(int flavor) {
        JSONObject properties = new JSONObject();
        properties.put("flavor", flavor);
        mSugo.track("Something Interesting Happened", properties);
    }

    public void onDestroy() {
        // 如果启动的 Activity 不是最后销毁的 Activity,
        // 这行代码可以移到对应的最后销毁的 Activity 的 onDestroy 方法里
        mSugo.flush();      // 非必须,仅推荐使用
        super.onDestroy();
    }
}

3.1 基本功能

3.1.1 自定义事件

调用 SugoAPI.track()实现在代码中埋点来统计一次用户行为 参数说明

  • eventId : 事件 id
  • eventName : 事件名称
  • properties : 事件的属性
SugoAPI sugoAPI = SugoAPI.getInstance(context);

JSONObject props = new JSONObject();
props.put("Gender", "Female");
props.put("Plan", "Premium");

sugoAPI.track("Plan Selected", props);

3.1.2 时长事件

调用SugoAPI.timeEvent()来追踪一个事件发生的时长,例如统计一次图片上传所消耗的时间

SugoAPI sugoAPI = SugoAPI.getInstance(context);

// start the timer for the event "Image Upload"
sugoAPI.timeEvent("Image Upload");

// stop the timer if the imageUpload() method returns true
if(imageUpload()){
    sugoAPI.track("Image Upload");
}

3.1.3 首次登录

调用 SugoAPI.login(userIdKey, userIdValue) 来记录一次用户登录行为(后台需要配置用户表)
其中,userIdKey 是上报 userIdValue 的维度名,userIdValue 一般是用户标识,例如 SugoAPI.login("userId", 123456)
调用 login之后,如果是第一次登录,则触发【首次登录】事件,并且将来所有上报的事件都会带上【首次登录时间】【userIdKey】这个维度。
调用 SugoAPI.logout() 退出登录,这两个维度将不会继续上报。

3.1.3 开启 H5 埋点

3.1.3.1. WebView 支持
    webView.getSettings().setJavaScriptEnabled(true);
    SugoAPI instance = SugoAPI.getInstance(this);
    instance.addWebViewJavascriptInterface(webView);
    webView.setWebViewClient(new SugoWebViewClient() {
    });
    webView.loadUrl("http://sugo.io");

如果开发者不能实现或继承SugoWebViewClient,想要设置自己的WebViewClient, 则需要在自己的WebViewClientonPageFinished()回调里, 调用SugoWebViewClient.handlePageFinished(webView, url)即可

webView.setWebViewClient(new WebViewClient() {
        @Override
        public void onPageFinished(WebView view, String url) {
            super.onPageFinished(view, url);
            SugoWebViewClient.handlePageFinished(webView, url);
        }
    });
3.1.3.2 XWalkView 支持

如果您想要在项目中支持 XWalkView 的可视化埋点 ,可以使用以下代码 (先要引用 sugo android sdk 的 xwalk 扩展库)

  • 1 初始化 SugoAPI 是,使能 XWalkView
    // 首先,在第一次初始化 SugoAPI 的时候,使能 XWalkView 功能
    mSugoAPI = SugoAPI.getInstance(this);
    SugoXWalkViewSupport.enableXWalkView(mSugoAPI, true);
  • 2 然后,在 XWalkView 使用的 Activity (继承了 XWalkActivity ) 中, 调用SugoXWalkViewSupport.handleXWalkView
  • 3 接着,调用XWalkView.setResourceClient 重写 onLoadFinished方法,调用SugoXWalkViewClient.handlePageFinished 即可完成
    @Override
    protected void onXWalkReady() {
        mXWalkView = (XWalkView) findViewById(R.id.xwalkview);
        SugoXWalkViewSupport.handleXWalkView(SugoAPI.getInstance(this), mXWalkView);
        mXWalkView.setResourceClient(new XWalkResourceClient(mXWalkView) {
                    @Override
                    public void onLoadFinished(XWalkView view, String url) {
                        super.onLoadFinished(view, url);
                        SugoXWalkViewClient.handlePageFinished(view, url);
                    }
                });
        mXWalkView.load("http://sugo.io", null);
    }
  • 4 最后,在onCreate 中调用XWalkPreferences.setValue(XWalkPreferences.ANIMATABLE_XWALK_VIEW, true); 才能使得 XWalkView 的网页内容被上传至可视化埋点
3.1.3.3 H5 代码埋点

在进行了 3.1.3.13.1.3.2 的操作之后,SugoSDK 可支持 H5 的可视化埋点。 如果需要代码埋点,可在 js 中调用以下方法:

自定义事件,参数如下: 参数说明

  • event_id : 事件 id
  • event_name : 事件名称
  • props : 事件的属性
sugo.track(event_id, event_name, props);

时长事件(可参照 3.1.2)

sugo.timeEvent(event_name);

3.1.4 默认属性

有一种很常见的情况,你想让一些常见的属性在每一个事件中都添加上,因此,你可以将这些属性注册为默认属性

默认属性是保存在设备上的,将会持续存在 APP 里。 SugoSDK 也设置了一些默认的默认属性点这里查看

想要设置默认属性,调用SugoAPI.registerSuperProperties

SugoAPI sugoAPI = SugoAPI.getInstance(context);

// Send a "User Type: Paid" property will be sent with all future track calls.
JSONObject props = new JSONObject();
props.put("User Type", "Paid");
sugoAPI.registerSuperProperties(props);

接下来,你记录的任何事件,这些默认属性都会被一起发送。 默认属性是存储在设备上的,退出 APP 后下次启动,该默认属性依旧存在。

只设置一次默认属性 通过SugoAPI.registerSuperProperties会强行覆盖已有的同名属性,如果有些属性你想只设置一次(例如第一次登录的时间),可以调用SugoAPI.registerSuperPropertiesOnce,这个方法只保存第一次设置时的值,后面对该属性的修改操作将无效。

移除默认属性 通过SugoAPI.unregisterSuperProperty可移除已设置的默认属性


3.2 热图

2 在启动的 Activity 上,配置

如果已经配置了可视化埋点,这里也是一样的,可以跳过

    <intent-filter>
        <data android:scheme="sugo.c6749a4f1ef039ca196148ed1cb65d87"/>

        <action android:name="android.intent.action.VIEW"/>

        <category android:name="android.intent.category.DEFAULT"/>
        <category android:name="android.intent.category.BROWSABLE"/>
    </intent-filter>

在控制台网页点击【埋点热图】,使用浏览器扫描二维码,跳转到该App,即可进入热图模式。

1 进入热图模式后,热图模式将一直存在,只有 kill 掉 App 进程才会退出 2 在热图模式中,无法进入可视化埋点,反之,在可视化埋点模式时,无法进入热图

4 Q&A

Q. 定位 View 失败
A. SDK 通过资源 id 定位 View,如果 applicationId 与应用包名不一致,则需要修改

        <meta-data
            android:name="io.sugo.android.SGConfig.ResourcePackageName"
            android:value="{YOUR_PACKAGE_NAME}" />
io.sugo.android

Versions

Version
1.1.1
1.1.0