最低兼容Android版本4.2 API 17
弹窗 SDK 会根据运营人员对用户的分组情况,下发弹窗消息
添加弹窗SDK前请确保您已经集成了我们公司的CDP SDK,版本需要在 cdp-1.1 及以上,详细情况请移步Android CDP SDK帮助文档。最低兼容的 Android 版本为 4.2 。
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"/>
请将以下GrowingTouch.startWithConfig
加在您的Application 的 onCreate
方法中,且保证在埋点SDK初始化代码GrowingIO.startWithConfiguration
后
public class MyApplication extends Application {@Overridepublic void onCreate() {super.onCreate();GrowingIO.startWithConfiguration(this, new Configuration().setProjectId("获取您的项目ID").setDataSourceId("填写您的数据源ID").setURLScheme("填写UrlScheme").setDebugMode(BuildConfig.DEBUG).setTrackerHost("这里设置为您的 HOST ").setChannel("XXX应用商店"));GrowingTouch.startWithConfig(this, new GTouchConfig().setEventPopupShowTimeout(5000).setEventPopupEnable(true).setDebugEnable(BuildConfig.DEBUG).setMessageHost("获取您的服务器上发出的弹窗和banner数据").setEventPopupListener(new EventPopupListener() {@Overridepublic void onLoadSuccess(String eventId, String eventType) {Log.d(TAG, "onLoadSuccess: eventId = " + eventId + ", eventType = " + eventType);}@Overridepublic void onLoadFailed(String eventId, String eventType, int errorCode, String description) {Log.d(TAG, "onLoadFailed: eventId = " + eventId + ", eventType = " + eventType);}@Overridepublic boolean onClicked(String eventId, String eventType, String openUrl) {Log.d(TAG, "onClicked: eventId = " + eventId + ", eventType = " + eventType);return false;}@Overridepublic void onCancel(String eventId, String eventType) {Log.d(TAG, "onCancel: eventId = " + eventId + ", eventType = " + eventType);}@Overridepublic void onTimeout(String eventId, String eventType) {Log.d(TAG, "onTimeout: eventId = " + eventId + ", eventType = " + eventType);}@Overridepublic boolean popupEventDecideShow(PopupWindowEvent popup, EventPopupDecisionAction decisionAction) {String target = popup.getRule().getTarget();Log.d(TAG, "popupEventDecideShow message name = " + popup.getName() + "target = " + target);return false;}}));}}
如果您启用了代码混淆,请务必在您的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.**{*;}
设置弹窗的开关,可以在初始化的时候选择关闭弹窗功能,这样弹窗SDK就不会在APP的logo页和闪屏页显示弹窗,然后在APP的内容页打开时再打开弹窗开关。
setEventPopupEnable(boolean eventPopupEnable)
参数名 | 类型 | 必填 | 默认值 | 说明 |
enable | boolean | 是 | true | 开关弹窗功能,true开启,false关闭 |
GrowingTouch.startWithConfig(this, new GTouchConfig().setEventPopupEnable(true)...);
查看数据采集发送日志,能够在Android Studio中通过Logcat查看GrowingTouch打印的数据发送日志,在 APP 的 Application onCreate 初始化SDK地方添加配置。
setDebugEnable(boolean debugEnable)
参数名 | 类型 | 必填 | 默认值 | 说明 |
debugEnable | boolean | 是 | false | 开启弹窗日志,true开启,false关闭 |
GrowingTouch.startWithConfig(this, new GTouchConfig()//BuildConfig.DEBUG 这样配置就不会上线忘记关闭.setDebugEnable(BuildConfig.DEBUG)...);
埋点事件的产生到弹窗完全显示的超时时间,如网络情况可能会影响到弹窗的加载时间,或者两个弹窗埋点事件先后触发,前面一个弹窗的显示时间过长导致后面的弹窗事件超时等等。
setEventPopupShowTimeout(long eventPopupShowTimeout)
参数名 | 类型 | 必填 | 默认值 | 说明 |
eventPopupShowTimeout | long | 是 | 5000 | 埋点事件的产生到弹窗完全显示的超时时间,单位ms。0<=有效值<=100000 |
GrowingTouch.startWithConfig(this, new GTouchConfig().setEventPopupShowTimeout(8000)...);
通过监听获取事件和参数,您可以根据事件和参数以及您的业务场景执行相关的交互。
setEventPopupListener(EventPopupListener eventPopupListener)
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);/*** 触达弹窗消费时(待展示时)* @param popup 待展示的弹窗数据** @param action 弹窗绑定的操作行为** @return true:自定义展示该弹窗,触达SDK不在处理;false:由触达来展示该弹窗,* @discussion 在 popup.rule.target 数据中可以取出配置的 target 数据,比如一张图片的链接或其他参数,进行自定义的弹窗展示*/boolean popupEventDecideShow(PopupWindowEvent popup, EventPopupDecisionAction decisionAction);}
GrowingTouch.startWithConfig(this, new GTouchConfig().setEventPopupListener(new EventPopupListener() {@Overridepublic void onLoadSuccess(String eventId, String eventType) {Log.d(TAG, "onLoadSuccess: eventId = " + eventId + ", eventType = " + eventType);}@Overridepublic void onLoadFailed(String eventId, String eventType, int errorCode, String description) {Log.d(TAG, "onLoadFailed: eventId = " + eventId + ", eventType = " + eventType);}@Overridepublic boolean onClicked(String eventId, String eventType, String openUrl) {Log.d(TAG, "onClicked: eventId = " + eventId + ", eventType = " + eventType);return false;}@Overridepublic void onCancel(String eventId, String eventType) {Log.d(TAG, "onCancel: eventId = " + eventId + ", eventType = " + eventType);}@Overridepublic void onTimeout(String eventId, String eventType) {Log.d(TAG, "onTimeout: eventId = " + eventId + ", eventType = " + eventType);}@Overridepublic boolean popupEventDecideShow(PopupWindowEvent popup, EventPopupDecisionAction decisionAction) {String target = popup.getRule().getTarget();Log.d(TAG, "popupEventDecideShow message name = " + popup.getName() + "target = " + target);return false;}})...);
如果您的popupEventDecideShow方法返回true的话,您必须手动实现弹窗的样式,并调用相关api手动触发弹窗的展示,点击或关闭事件。
public class EventPopupDecisionAction {/// 弹窗展示、会发送展示事件public void appeared();/// 弹窗点击、会发送点击事件public void clicked();/// 弹窗关闭、会发送关闭事件public void closed()}
打开弹窗并触发AppOpen事件。
应用场景时:担心弹窗SDK在APP启动的Logo页或者闪屏页显示弹窗,这时可以选择在初始化时关闭弹窗开关,然后在APP的内容页打开时再打开弹窗开关。
如果只是单纯调用`GrowingTouch.setEventPopupEnable(true)`只会打开弹窗开关,并不会触发AppOpen的弹窗事件。调用该API则会打开弹窗的同时触发一个AppOpen的弹窗事件。(AppOpen 对应的是触发时机选择“打开App时”)
弹窗是否正在显示
若弹窗跳转链接为 GInApp://com.growingio.gtouch.InAppPageActivity?key1=value1&key2=value2 那么会打开原生界面 InAppPageActivity,并携带两个参数。
对应的Web弹窗页面配置如下图所示:
弹窗配置页面:
其中「自定义参数」意思是输入任何您自己的scheme(自定义协议),
比如: myapp://productdetails/itemabc?key1=111&key2=222 ,然后在onclick事件回调中解析出来就行了
@Overrideprotected 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时,无论是冷启动还是热启动,第一个Activity的onStart生命周期的时候触发。
需要升级到3.12.1,弹窗使用了新版的方法,否则会报错。