资源位SDK主要提供两种接入方式:
在视图对应位置进行轮播图GTouchBanner的初始化,banner配置后调用轮播图API,数据请求、banner视图的样式、图片缓存、点击跳转行为等全部通过接口下发的配置在SDK内部处理
集成与使用代码参考 shopping分支的HomeFragment文件
调用API接口GrowingTouch#loadBannerData获取banner数据模型以及响应信息,后续展示及点击逻辑由用户进行自实现
集成SDK
1. 集成GrowingIO Android无埋点SDK
添加资源位 SDK前请确保您已经集成了我们公司的埋点 SDK,版本需要在 2.6.9 及以上,详细情况请移步。最低兼容的 Android 版本为 4.2 。
2. 添加依赖
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"
//触达原生banner模板依赖
implementation "com.growingio.android.widget:gtouch-banner:$gtouch_version"
}
3. 需要的权限列表
所需权限同无埋点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" />
4. 初始化SDK
请将以下GrowingTouch.startWithConfig
加在您的Application 的 onCreate
方法中,且保证在埋点SDK初始化代码GrowingIO.startWithConfiguration
后
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
GrowingIO.startWithConfiguration(this, new Configuration()
.trackAllFragments()
.setChannel("XXX应用商店")
);
GrowingTouch.startWithConfig(this, new GTouchConfig()
.setDebugEnable(BuildConfig.DEBUG)
);
}
}
6. 代码混淆
如果您启用了代码混淆,请务必在您的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. 参数说明
在服务端进行查看后配置到本地,一个bannerKey对应一个banner(唯一标识),不设置抛出IllegalArgumentException
默认为Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM
gtouchPlaceholderDrawable
gtouchErorReplaceDrawable
用户设置,不设置抛出IllegalArgumentException
2. 在对应视图xml中添加Banner控件(建议使用xml布局)
<com.growingio.android.sdk.gtouch.widget.banner.GTouchBanner
android:id="@+id/gtouch_banner"
android:layout_width="match_parent"
android:layout_height="107dp"
app:gtouchBannerKey="99299c5d32d6e14a"
app:gtouchErrorReplaceDrawable="@mipmap/load_error"
app:gtouchIndicatorGravity="bottom|right"
app:gtouchPlaceholderDrawable="@mipmap/loading" />
3. GTouchBanner初始化代码如下
private GTouchBanner mGTouchBanner;
mGTouchBanner = findViewById(R.id.gtouch_banner);
mGTouchBanner.loadData(new BannerStateChangedListener() {
/**
* Banner数据加载成功
*
* @param banner Banner控件对象
*/
@Override
public void onLoadDataSuccess(GTouchBanner banner) {
Log.e(TAG, "onLoadDataSuccess: ");
}
/**
* Banner数据加载失败
*
* @param banner Banner控件对象
* @param errorCode 错误码
* @param description 错误描述,有可能为null
*/
@Override
public void onLoadDataFailed(GTouchBanner banner, int errorCode, String description) {
Log.e(TAG, "onLoadDataFailed: errorCode = " + errorCode + ", description = " + description);
}
/**
* Banner item被点击
*
* @param banner Banner控件对象
* @param position item所处位置
* @param targetUrl 需要跳转的路由url
* @return 返回为true,资源位SDK不在处理跳转的路由url;返回为false,资源位SDK会处理跳转内部界面和H5两种资源位系统提供的路由
*/
@Override
public boolean onItemClick(GTouchBanner banner, int position, String targetUrl) {
Log.e(TAG, "onItemClick: position = " + position + ", targetUrl = " + targetUrl);
return false;
}
/**
* 加载失败图片被点击
*
* @param banner Banner控件对象
*/
@Override
public void onErrorImageClick(GTouchBanner banner) {
Log.e(TAG, "onErrorImageClick");
}
});
自渲染接入
1. 数据模型说明
banner的所有item,类型为bannerItemData
2. 获取banner数据模型
使用GrowingTouch#loadBannerData(@NonNull String bannerKey,@NonNull final BannerDataCallback callback)
v1.3.0版本新增了对灵活资源位的支持,注意灵活资源位可能发生没有banner的情况,需要特殊处理。
// bannerKey在服务端进行查看后配置到本地
GrowingTouch.loadBannerData("9e38f09a9cc50a79", new BannerDataCallback() {
/**
* Banner数据请求成功
*
* @param bannerData Banner所有数据
*/
@Override
public void onSuccess(BannerData bannerData) {
if(bannerData.getItems().size < 1){
throw new GTouchSDKException("灵活资源位会发生item为0的情况,需特殊处理")
}
}
/**
* Banner数据请求失败
*
* @param errorCode 错误码
* @param description 错误描述,有可能为null,如网络错误时
*/
@Override
public void onLoadFailed(int errorCode, String description) {
}
});
3. bannerItem绑定对应的itemview的点击事件
使用BannerItemData#bindItemDataToClickView(final View clickView, final BannerItemOnClickListener listener)
// itemView即每个bannerItemData对应的视图
bannerItemData.bindItemDataToClickView(itemView, new BannerItemOnClickListener() {
/**
* 点击回调
*
* @param clickView 点击的View
* @param itemData 点击的Item的数据
* @param targetUrl 需要跳转的目标Url
* targetUrl两种格式分别为:
* 1.直接的网址(如:https://www.growingio.com)
* 2.跳转应用内部界面(如:GInApp://com.growingio.gtouch.InAppPageActivity?key1=value1&key2=value2),在自渲染中跳转需要用户进行处理
*/
@Override
public void onClick(View clickView, BannerItemData itemData, String targetUrl) {
}
});
原生模板接入异常情况说明
1. 获取Banner数据失败(包括获取到的BannerItem的size为0)
当存在上一次获取到Banner数据时,将会加载上一次数据
没有上一次数据时,将会回调用户错误(onLoadDataFailed)并加载设置的错误图片
获取到的BannerItem的size为0时,原生模板所在的view会自动隐藏,界面上会有对应的隐藏动画,请开发者酌情考虑使用我们的模板。
2. 后端返回的配置数据banneritem的index不连续(包括:自渲染接入)
SDK中会将index进行去重并重新编号
3. BannerItem单张图加载失败
删除该item,删除后不存在item将会加载用户与设置的错误图片(errorReplaceDrawable)