跳到主要内容
版本:2.3

弹窗 SDK (Android)

信息

最低兼容 Android 版本 4.2 API 17

弹窗 SDK 会根据运营人员对用户的分组情况,下发弹窗消息

集成 SDK

集成 GrowingIO Android CDP SDK

信息

弹窗 SDK 依赖于数据数据采集 SDK

版本要求最低 1.2.3,如已集成请跳过

参考 Android SDK

添加依赖

2.1 在 app build.gradle 添加 SDK 依赖

dependencies {

...

//由于弹窗底层网络库依赖OkHttp3网络库,请添加OkHttp3依赖

implementation "com.squareup.okhttp3:okhttp:3.12.1"

//弹窗SDK依赖

implementation "com.growingio.android:gtouch:$gtouch_version"

}

$gtouch_version 为最新 SDK 版本号,现最新的版本号为请参考SDK 更新日志

需要的权限列表

所需权限同埋点 SDK

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

<!--非危险权限,不需要运行时请求,Manifest文件中添加即可-->

<uses-permission android:name="android.permission.ACCESS\_NETWORK\_STATE" />

<uses-permission android:name="android.permission.SYSTEM\_ALERT\_WINDOW"/>

<uses-permission android:name="android.permission.ACCESS\_WIFI\_STATE" />

<uses-permission android:name="android.permission.SYSTEM\_ALERT\_WINDOW"/>

初始化 SDK

请将以下GrowingTouch.startWithConfig加在您的 Application 的 onCreate 方法中,且保证在 GrowingIO 采集 SDK 启动代码后

public  class  MyApplication  extends  Application  {



@Override

public void onCreate() {

super.onCreate();

// GrowingIO采集SDK 启动代码



//调用 弹窗SDK 启动方法

GrowingTouch.startWithConfig(this, new GTouchConfig()

.setEventPopupShowTimeout(5000)

.setEventPopupEnable(true)

.setDebugEnable(BuildConfig.DEBUG)

.setMessageHost("获取您的服务器上发出的弹窗和banner数据")

.setEventPopupListener(new EventPopupListener() {

@Override

public void onLoadSuccess(String eventId, String eventType) {

Log.d(TAG, "onLoadSuccess: eventId = " + eventId + ", eventType = " + eventType);

}



@Override

public void onLoadFailed(String eventId, String eventType, int errorCode, String description) {

Log.d(TAG, "onLoadFailed: eventId = " + eventId + ", eventType = " + eventType);



}



@Override

public boolean onClicked(String eventId, String eventType, String openUrl) {

Log.d(TAG, "onClicked: eventId = " + eventId + ", eventType = " + eventType);

return false;

}



@Override

public void onCancel(String eventId, String eventType) {

Log.d(TAG, "onCancel: eventId = " + eventId + ", eventType = " + eventType);



}



@Override

public void onTimeout(String eventId, String eventType) {

Log.d(TAG, "onTimeout: eventId = " + eventId + ", eventType = " + eventType);

}

})

);

}

}

请注意调用顺序,需要在 GrowingIO 采集 SDK 启动代码调用后,再调用 GrowingTouch.startWithConfig 函数。

代码混淆

如果您启用了代码混淆,请务必在您的 proguard-rules.pro 文件里加入下面的代码:

#GrowingIO

-keep class com.growingio.** {

*;

}

-dontwarn com.growingio.**

-keepnames class * extends android.view.View

-keepnames class * extends android.app.Fragment

-keepnames class * extends android.support.v4.app.Fragment

-keepnames class * extends androidx.fragment.app.Fragment

-keep class android.support.v4.view.ViewPager{

*;

}

-keep class android.support.v4.view.ViewPager$**{

*;

}

-keep class androidx.viewpager.widget.ViewPager{

*;

}

-keep class androidx.viewpager.widget.ViewPager$**{

*;

}



#okhttp

-dontwarn okhttp3.**

-keep class okhttp3.**{*;}



#okio

-dontwarn okio.**

-keep class okio.**{*;}

重要配置

设置弹窗开关

1.1 setEventPopupEnable

设置弹窗的开关,可以在初始化的时候选择关闭弹窗功能,这样弹窗 SDK 就不会在 APP 的 logo 页和闪屏页显示弹窗,然后在 APP 的内容页打开时再打开弹窗开关。

setEventPopupEnable(boolean eventPopupEnable)

1.2 参数说明

参数名类型必填默认值说明
enablebooleantrue开关弹窗功能,true 开启,false 关闭

1.3 代码示例

GrowingTouch.startWithConfig(this,  new  GTouchConfig()

.setEventPopupEnable(true)

...

);

设置 Debug 模式(只在调试时使用,上线请务必关闭)

2.1 setDebugEnable

查看数据采集发送日志,能够在 Android Studio 中通过 Logcat 查看 GrowingTouch 打印的数据发送日志,在 APP 的 Application onCreate 初始化 SDK 地方添加配置。

setDebugEnable(boolean debugEnable)

2.2 参数说明

参数名类型必填默认值说明
debugEnablebooleanfalse开启弹窗日志,true 开启,false 关闭

2.3 代码示例

GrowingTouch.startWithConfig(this,  new  GTouchConfig()

//BuildConfig.DEBUG 这样配置就不会上线忘记关闭

.setDebugEnable(BuildConfig.DEBUG)

...

);

设置弹窗显示超时时间

3.1 setEventPopupShowTimeout

埋点事件的产生到弹窗完全显示的超时时间,如网络情况可能会影响到弹窗的加载时间,或者两个弹窗埋点事件先后触发,前面一个弹窗的显示时间过长导致后面的弹窗事件超时等等。

setEventPopupShowTimeout(long eventPopupShowTimeout)

3.2 参数说明

参数名类型必填默认值说明
eventPopupShowTimeoutlong5000埋点事件的产生到弹窗完全显示的超时时间,单位 ms。0<=有效值<=100000

3.3 代码示例

GrowingTouch.startWithConfig(this,  new  GTouchConfig()

.setEventPopupShowTimeout(8000)

...

);

弹窗的事件监听

4.1 setEventPopupListener

通过监听获取事件和参数,您可以根据事件和参数以及您的业务场景执行相关的交互。

setEventPopupListener(EventPopupListener eventPopupListener)

4.2 参数说明

public  interface  EventPopupListener  {

/**

\* 弹窗显示成功

*

\* @param eventId 埋点事件名称

\* @param eventType 事件类型,system(弹窗SDK内置的事件)或custom(用户自定义的埋点事件)

*/

void onLoadSuccess(String eventId, String eventType);



/**

\* 弹窗加载失败

*

\* @param eventId 埋点事件名称

\* @param eventType 事件类型,system(弹窗SDK内置的事件)或custom(用户自定义的埋点事件)

\* @param errorCode 错误码

\* @param description 错误描述

*/

void onLoadFailed(String eventId, String eventType, int errorCode, String description);



/**

\* 用户点击了弹窗的有效内容。弹窗SDK现在只提供跳转APP内部界面和H5界面两种处理方式。

\* 您可以在这里接管跳转事件,处理需要跳转的url。您也可以自定义Url协议,实现更多业务和交互功能。

*

\* @param eventId 埋点事件名称

\* @param eventType 事件类型,system(弹窗SDK内置的事件)或custom(用户自定义的埋点事件)

\* @param openUrl 跳转的url

\* @return true:点击事件被消费,弹窗SDK不在处理;false:由弹窗SDK处理点击事件

*/

boolean onClicked(String eventId, String eventType, String openUrl);



/**

\* 用户关闭了弹窗

*

\* @param eventId 埋点事件名称

\* @param eventType 事件类型,system(弹窗SDK内置的事件)或custom(用户自定义的埋点事件)

*/

void onCancel(String eventId, String eventType);



/**

\* 弹窗显示超时

*

\* @param eventId 埋点事件名称

\* @param eventType 事件类型,system(弹窗SDK内置的事件)或custom(用户自定义的埋点事件)

*/

void onTimeout(String eventId, String eventType);

}

4.3 代码示例

GrowingTouch.startWithConfig(this,  new  GTouchConfig()

.setEventPopupListener(new EventPopupListener() {

@Override

public void onLoadSuccess(String eventId, String eventType) {

Log.d(TAG, "onLoadSuccess: eventId = " + eventId + ", eventType = " + eventType);

}



@Override

public void onLoadFailed(String eventId, String eventType, int errorCode, String description) {

Log.d(TAG, "onLoadFailed: eventId = " + eventId + ", eventType = " + eventType);



}



@Override

public boolean onClicked(String eventId, String eventType, String openUrl) {

Log.d(TAG, "onClicked: eventId = " + eventId + ", eventType = " + eventType);

return false;

}



@Override

public void onCancel(String eventId, String eventType) {

Log.d(TAG, "onCancel: eventId = " + eventId + ", eventType = " + eventType);



}



@Override

public void onTimeout(String eventId, String eventType) {

Log.d(TAG, "onTimeout: eventId = " + eventId + ", eventType = " + eventType);

}

})

...

);

运行时 API 介绍( GrowingTouch.class )

void enableEventPopupAndGenerateAppOpenEvent()

打开弹窗并触发 AppOpen 事件。

应用场景时:担心弹窗 SDK 在 APP 启动的 Logo 页或者闪屏页显示弹窗,这时可以选择在初始化时关闭弹窗开关,然后在 APP 的内容页打开时再打开弹窗开关。

如果只是单纯调用**GrowingTouch.setEventPopupEnable(true)**只会打开弹窗开关,并不会触发 AppOpen 的弹窗事件。调用该 API 则会打开弹窗的同时触发一个 AppOpen 的弹窗事件。(AppOpen 对应的是触发时机选择“打开 App 时”)

boolean isEventPopupShowing()

弹窗是否正在显示

其他

弹窗跳转原生 Activity 界面

若弹窗跳转链接为 GInApp://com.growingio.gtouch.InAppPageActivity?key1=value1&key2=value2 那么会打开原生界面 InAppPageActivity,并携带两个参数。

对应的 Web 弹窗页面配置如下图所示:

  • 弹窗配置页面:

其中「自定义参数」意思是输入任何您自己的 scheme(自定义协议),

比如: myapp://productdetails/itemabc?key1=111&key2=222 ,然后在 onclick 事件回调中解析出来就行了

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity\_in\_app_page);

Intent intent = getIntent();

Log.e(TAG, "onCreate: key1 = " + intent.getStringExtra("key1"));

Log.e(TAG, "onCreate: key2 = " + intent.getStringExtra("key2"));

}

"打开 APP 时"事件触发的时机

打开 APP 时,无论是冷启动还是热启动,第一个 Activity 的 onStart 生命周期的时候触发。

okhttp 版本要求

需要升级到 3.12.1,弹窗使用了新版的方法,否则会报错。