跳到主要内容
版本:2.6

弹窗 SDK (Android)

信息

最低兼容 Android 版本 4.2 API 17

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

集成 SDK

集成 GrowingIO Android CDP SDK

信息

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

版本建议使用最新版本,如已集成请跳过

参考 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,弹窗使用了新版的方法,否则会报错。