Andriod - SDK接入指南

客服MM发表于:2016年08月08日 15:13:58更新于:2019年10月12日 14:42:46

最新版本V 2.9.7
更新时间2019-10-09
更新内容

修改H5页面无法自定义返回按键bug


历史版本V 2.9.6
更新内容

优化 sdk


sdk 下载

android sdk & Demo下载

欢迎使用活动盒子SDK

(在线文档的排版比较乱,请下载 sdk 查看本地的文档说明)

 活动盒子 帮助文档

活动盒子 为APP敏捷运营解决方案 
建立精准、自动化营销运营,提供千人千面的客户体验

  • 功能丰富 :支持事件触发活动, banner 投放活动, app 分析,第三方平台推送活动



  • 欢迎使用活动盒子SDK

    • 介绍

    • APP Scheme 配置

    • 设置 deeplink 数据监听

    • 通过活动的 token 打开活动的页面参与活动

    • 流程说明

    • 推送功能 api

    • 极光推送/leanCloud example

    • 个推 example

    • 触发活动及 投放接入流程

    • 触发活动接口

    • 触发事件 Example

    • 投放功能

    • android_studio 配置

    • eclipse 配置

    • 开始接入

    • SDK初始化

    • 触发活动及 投放投放功能

    • 推送功能

    • DeepLink功能

    • 分享添加抽奖次数接口

    • SDK标签,条件,参数功能使用(可选)

    • 页面统计功能 (可选)


开始接入

android_studio 配置

  • 解压麦多sdk开发文档,其中sdk文件夹是麦多sdk的sdk开发包,SDKdemo是集成了麦多sdk的开发demo项目

  • 把sdk文件夹里面的jar库资源复制到项目的libs文件下

  • 把 sdk 文件里面的 so 包复制项目到 libs 文件下

  • 配置build.gradle文件,让项目引用so包资源

repositories {
    flatDir {dirs 'libs'}
}
//引用so包资源 如果已有的项目已经有 so 文件存在了 可不用配置此设置//as 3.1版本后不用设置
sourceSets{main{jniLibs.srcDirs = ['libs']}
}
dependencies {//此配置不是必须的 compile 'com.android.support:appcompat-v7:23.4.0'}

eclipse 配置

  • 解压麦多sdk开发文档,其中sdk文件夹是麦多sdk的sdk开发包,SDKdemo是集成了麦多sdk的开发demo项目

  • 把sdk文件夹里面的jar 包跟 so 包复制到项目的libs文件下

配置AndroidManifest权限跟相关的节点信息

  • 权限配置

<!--获取网络权限-->
<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"/>

配置节点信息

<!--sdk begin-->
<!-- 注册打开活动页面的 activity-->
<!--1.h5页面的 theme 必须继承 @android:style/Theme.Translucent.NoTitleBar 的样式
    2.如果自定义的 webview 去加载盒子的活动链接的话需要配置windowBackground,windowIsTranslucent属性设置为透明
        <style name="WebviewStyle" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="android:windowBackground">@android:color/transparent</item>
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowIsTranslucent">true</item>
        </style>-->
        
   <!--注意:在某些手机android8.0 系统android:windowIsTranslucent=true跟android:screenOrientation不能同时存在,就得不用再h5 activity使用此属性 --> 
<activity 
    android:name="com.hdhz.hezisdk.b.H5"
    android:theme="@android:style/Theme.Translucent.NoTitleBar"
    />
    
<!--sdk所需要的参数key 替换自己应用的key值即可 也可以在代码初始化的时候设置 appkey-->
<meta-data android:name="HEZIKEY"android:value="自己的应用 appkey"/>
<!--sdk end-->

SDK初始化

盒子 sdk 初始化必须在程序的 application中调用

HzSDK.getInstance().openDebug(true) //打开调式的日志
                    .useTencentX5(true)//是否使用腾讯的tbs预览服务,使用的话 需要导入腾讯的tbs包,不使用可忽略//配置私有化部署的链接,如果不是私有化部署的用户 请忽略此属性(所谓私有化部署就是把盒子的代码部署到商家的服务器,用商家的域名访问)//                .configDomain("http://emma.myserverDomain.com")//私有化部署的商家需要设置自己私有化部署的域名,普通商家忽略此属性
                    .setAppkey("2d137de047e2a9cc314118ac39e60cd4")//设置appkey,在盒子商家后台获取
                    .init(this);
                    //可选功能
                    //deeplink 功能初始化 在盒子初始化之后 回调具体看 DeepLink 功能
                    HzSDK.getInstance().initDeepLinks(this,new HzSDKAppLinksListener(){});
                    //是否捕获异常 异常文件在 sdcard/android/data/包名/cache/filelog
                    HzSDK.getInstance().crashException(this);
                    //是否使用统计分析功能 统计用户的启动跟退出
                    HzSDK.getInstance().initAnalysis(this);

sdk初始化可选配置说明

//开启 debug 模式,如果开启app 运行时会有日志打印输出openDebug(true);
//针对私有化部署的用户 可配置自己的接口域名 configDomain(" 
for example:    
        HzSDK.getInstance()
        .openDebug(true)
        .configDomain("http://emma.mydomain.com")
        .init(this);

触发活动及 投放投放功能

触发活动及 投放接入流程


触发活动接口

活动触发接口

  • 在 activity 的主线程中触发活动,此接口触发的图标是显示在activity 的

字段名称描述
this当前 activity 对象
sdkBeanHzSDKBean对象
HzSDK.getInstance().trigger(this,sdkBean);
  • 在 RelativeLayout/FrameLayout中触发,调用次接口小图标或者大图是作为页面的子控件显示的.

字段名称描述
this当前 activity 对象
rootViewRelativeLayout或者FrameLayout的对象
sdkBeanHzSDKBean对象
HzSDK.getInstance().triggerWithViewGroup(Activity var1, ViewGroup rootView,HzSDKBean sDkBeanHz);

HZSDKBean对象

属性描述
Event触发条件对应商家后台的触发条件字段(必填)
UserName用户唯一 id 如果没有可填设备 id(必填)
mobile用户手机 (必填(不用是手机格式))
city用户城市属性(对应触发用户属性)
Province用户省级属性 (对应触发用户属性)
sex用户属性性别(男/女)(对应触发用户属性)
price金额
PositionKey用于投放活动时的活动位置 key(触发活动不用)
HzBackIcon活动 h5页面的返回图标(21X21)
HzBarBackground活动 h5页面标题栏背景 (颜色值)
HzBarTitleColor活动 h5页面标题字体颜色
IconAutoTransparent小图标是否自动隐半隐藏
IconAutoHidden小图标自动隐藏
IconAutoPullOver小图标自动靠边
HzSDkListener活动页面打开回调,分享回调
HzSDKBean sdkBean = new HzSDKBean();
//活动触发条件必填 设置活动触发条件可以是自定义的event字符串
sdkBean.setEvent(HzSDKEventType.LOGIN.getType());
//设置用户的唯一名称或者用户的 id 必填
sdkBean.setUserName("1563461343212423");
//设置手机号码 必填
sdkBean.setMobile("13800138000");
//用于投放活动设置活动位置 key
sdkBean.setPositionKey("");
//设置h5的返回图标 
sdkBean.setHzBackIcon(R.drawable.hdhz_close);
//设置h5的背景颜色
sdkBean.setHzBarBackground(getResources().getColor(R.color.colorAccent));
//设置 h5页面的标题颜色
hzSdkBean.setHzBarTitleColor(Color.BLACK);
//触发的小图标是否自动透明
sdkInfo.setIconAutoTransparent(true);
//触发的小图标是否自动隐藏
sdkInfo.setIconAutoHidden(true);
//触发的小图标是否自动靠边
sdkInfo.setIconAutoPullOver(true);
//设置打开活动的相关回调
sdkInfo.setHzSDKListener();

活动图标点击事件回调

public abstract HzSDKListener {
/*** the linkUrl is webview's url* the title is webview's title
    * @param linkUrl 活动分享链接地址
    * @param title  活动标题
    * @param content  活动内容
    * @param imgUrl 活动分享图标
    * @param shareCallBackUrl用于统计分享成功的链接
    */
    public void onWebViewShareClick(Context context,String linkUrl, String title,String content,String imgUrl,String shareCallBackUrl);
    
    public void onWebViewFinish();
    
    /*** 用户点击小图标或者大图时打开活动页面的拦截事件
    * @param linkUrl活动原始链接
    *  return  true 表示不拦截             false将会拦截活动页面打开
    **/
    public boolean onWebViewOpen(Context context,String linkUrl);
    
    /**
    * retun true 表示默认点击图标会关闭小图标 return false 表示点击图标后不会关闭小图标
    * @param isSmallIcon 当前图标是否小图标
    * @return
    */
    public boolean dismissWithTrigger(boolean isSmallIcon,HzSDKTriggerView view);}
    
    /**
    * 触发请求失败的回调,便于用户判断是否触发请求成功
    * 请求失败 用户可以再次触发
    * @param errorMsg
    * @return
    */
    public void requestError(String errorMsg){};
    
    /**
    * 服务器响应成功
    * @param result 请求成功
    */
    public void requestSuccess(String result);
    /**
     * 返回触发弹窗对象
     * @param hzSDKFloatView
     */
    public abstract void returnFloatView(HzSDKFloatView hzSDKFloatView);

触发事件 Example

HzSDKBean sdkBean = new HzSDKBean();
sdkBean.setEvent(HzSDKEventType.LOGIN.getType());
sdkBean.setUserName("13800138000");
sdkBean.setMobile("13800138000");
sdkBean.setCity("广州");
sdkBean.setProvince("广东");
sdkBean.setSex("男");
sdkBean.setHzBackIcon(R.drawable.hdhz_close); 
sdkBean.setHzBarBackground(getResources().getColor(R.color.colorAccent));
sdkBean.setIconAutoTransparent(true);
sdkBean.setIconAutoHidden(true);
sdkBean.setIconAutoPullOver(true);
sdkBean.setHzSDKListener(new HzSDKListener() {
@Override
public void onWebViewShareClick(Context context, String linkUrl, String title, String content, String imgUrl,String shareCallBackUrl) 
{
//活动分享事件//用户可以做自己的调用自己的分享功能
AlertDialog.Builder builder = new AlertDialog.Builder(context);builder.setTitle(title);
builder.setMessage(content+"分享地址="+linkUrl);
builder.setNegativeButton("取消", null);
builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Overridepublic void onClick(DialogInterface dialog, int which) {}});
builder.show();}
@Overridepublic void onWebViewFinish() {
//活动页面关闭回调}
@Overridepublic boolean onWebViewOpen(Context context, String url) {
//点击活动图标触发打开活动页面时的回调//用户可以设置为false 自己做跳转动作
return true;}
public boolean dismissWithTrigger(boolean isSmallIcon, HzSDKTriggerView triggerView) {
//return false 表示点击小图标后图标不消失return true;}
@Overridepublic boolean onWebViewOpen(Context context, String url) {
//点击活动图标触发打开活动页面时的回调
//                startActivity(new Intent(context,CustomeWebViewAty.class).putExtra("url",url));
return  true;}});
HzSDK.getInstance().trigger(MainActivity.this,sdkBean);

注意:sdkBean.setEvent();是触发活动的条件,sdk除了提供三种活动类型可供选择

属性描述
HzSDKEventType.LOGIN表示平台默认的登录触发事件
HzSDKEventType.REGISTER表示平台默认的注册触发事件
HzSDKEventType.PAY表示平台默认的支付触发事件

用户还可以自定义触发条件例如: 

//设置要自定义的event 后 在商家后台的触发条件里面的触发条件列表可找到对应的 event 条件 
sdkBean.setEvent("myEvent"); 

关闭小图标跟大图的方法

HzSDK.getInstance().stopShow();

投放功能

投放是一种控件的方式给用户使用,对接者只需要拿到此控件进行活动投放即可,投放包括平常使用启动页, banner, 信息流功能只是图片显示的大小不一样

  • HzSDKBannerView对象,如果在使用HzSDKBannerView出现ANR情况可改用HzSDKBannerViewNew对象

字段属性描述
DefaultLoadingBg网络图片加载过程中显示的默认图片
PointBottomMarginbanner 小圆点相对于banner 底部的间距(多张图片的时候生效)
PointRightMargin两个小圆点的间距(多张图片的时候生效)
PointSize设置小圆点的大小(多张图片的时候生效)
NomalPointBgColor设置小圆点默认的颜色(多张图片的时候生效)
SelectPointBgColor设置当前显示小圆点的颜色(多张图片的时候生效)
setImgScaleType设置图片的裁剪方式(用法跟 imageview 一样)
BannerListenerbanner 图片点击事件

banner控件图标点击事件回调对象

public interface HzSDkBannerListener {
/**** banner图片点击事件回调,用户可以在点击过程中增加自己的逻辑需求
* @param view* @param bannerPosition
* @param targetUrl
* @return true
*/
boolean onBannerClick(View view,int bannerPosition,String targetUrl);

/**
* banner数据是否为空的回调 让用户更好的控制banner是否显示
* @param empty true 表示数据为空
* @return 
*/
void bannerDataIsEmpty(View view,boolean empty);}
  1. 在 xml 添加 HzSDKBannerView控件

<com.hdhz.hezisdk.views.HzSDKBannerView
    android:layout_width="match_parent"
    android:layout_height="120dp"
    android:id="@+id/banner"/>
  1. 代码设置相关活动参数

HzSDKBean sdkBean = new HzSDKBean();
//必填 设置用户 idsdkBean.setUserName("13800138000");
//必填 设置手机号码sdkBean.setMobile("13800138000");
//必填 设置活动位置keysdkBean.setPositionKey("bfb706d6b8");
sdkBean.setCity("广州");
sdkBean.setProvince("广东");
sdkBean.setSex("男");
HzSDKBannerView bannerView = (HzSDKBannerView)view.findViewById(R.id.banner);
//设置默认加载图片
bannerView.setDefaultLoadingBg(R.mipmap.ic_launcher);
//设置轮播小圆点距离图片底部的距离bannerView.setPointBottomMargin(20);
//设置轮播图片两个小圆点的间距 bannerView.setPointRightMargin(18);
//设置小圆点的大小bannerView.setPointSize(20);
//设置小圆点默认背景bannerView.setNomalPointBgColor(Color.GRAY);
//设置被选中图片的小圆点背景bannerView.setSelectPointBgColor (Color.WHITE);
//设置banner 图片的点击监听bannerView.setBannerListener(new HzSDkBannerListener() {
@Overridepublic boolean onBannerClick(View view, int i, String s) {
Log.e("banner position=",i+"");return true;}
@Overridepublic void bannerDataIsEmpty(View bannerView, boolean arg1) {
// TODO Auto-generated method stub
//返回banner数据是否为空
if(arg1){
//数据为空自己控制是否隐藏like
bannerView.setVisibility(View.GONE);}}});
bannerView.disPlayWithBean(sdkBean);
//开始展示

推送功能

活动盒子支持使用第三方平台推送活动盒子的活动到客户端,要使用推送功能的商家, app 必须要接入第三方的推送 sdk, 活动盒子本身是不具备推送的能力的

现在支持的第三方推送平台列表

平台字段平台描述
JPush极光推送平台
GeTui个推推送平台
LeanCloudleancloud推送平台

流程说明


推送功能 api

  • 提交推送设备 id 到活动盒子

字段属性描述
regId第三方推送平台的设备 id
platform平台标识 通过HzSDKPushType类获取
HzSDK.getInstance().configWithPushRegisterIdAndPlatform(regId, HzSDKPushType.JPush.getType());
  • 处理用户点击通知栏消息的页面跳转

字段属性描述
contextcontext 上下文环境
intent接收的消息 intent
HzsdkBean盒子 sdk 对象用于传递用户数据,设置监听
//isHzSDkMsg 是否活动盒子推送的活动
boolean isHzSDkMsg = HzSDK.getInstance().dealWithNotifyMessage(context,intent,hzSDKBean);
if (!isHzSDkMsg){
    //不是活动盒子的数据 自己做跳转处理
}
  • 消息 action 说明

字段描述
JPushInterface.ACTION_NOTIFICATION_OPENED极光消息打开 action
HzSDK.HZSDK_EXTRAS_MSG_OPEN个推自定义的打开action
HzSDK.HZSDK_LEANCLOUD_EXTRAS_MSG_OPENleancloud 的消息打开 action

* 注意 * 
leanCloud 需要用到自定义的广播接收盒子的推送消息,menifest 的配置文件的广播接收器的 action 需要跟在盒子后台配置 leanCloud 的 action 保持一致


  <!--leancloud-->
  <intent-filter>
  <action android:name="android.intent.action.BOOT_COMPLETED" />
  <action android:name="android.intent.action.USER_PRESENT" />
  <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
  <!--此处为自定义的 action 用于接收 leacnCloud 的自定义消息-->
  <action android:name="${applicationId}" />
  </intent-filter>

极光推送/leanCloud example

*** 自定义接收器** 如果不定义这个 Receiver,则:* 1) 默认用户会打开主界面* 2) 接收不到自定义消息*/public class MyReceiver extends BroadcastReceiver {private static final String TAG = "JPush";@Overridepublic void onReceive(Context context, Intent intent) {Bundle bundle = intent.getExtras();Log.d(TAG, "[MyReceiver] onReceive - " + intent.getAction() + ", extras: " + printBundle(bundle));Log.d(TAG, "[MyReceiver] 接收到推送下来的自定义消息: " + bundle.getString(JPushInterface.EXTRA_MESSAGE)+"");if(context.getPackageName().equals(intent.getAction())){//leanCloud 接收自定义消息 这里的 action 是用户自定义的//统计接受到消息Bundle leanCloudBundle = intent.getExtras();if(leanCloudBundle.containsKey("com.avoscloud.Data")){try {JSONObject sjson = new JSONObject(leanCloudBundle.getString("com.avos.avoscloud.Data"));String title = sjson.optString("hzsdk_title");String content = sjson.optString("hzsdk_content");String extras = sjson.optString("hzsdk_extras");int msg = sjson.optInt("hzsdk_leancloud_id",-1);if(msg>0){HzSDK.getInstance().statisticPushMsg(msg+"",HzSDKPushType.LeanCloud.getType());}if(!TextUtils.isEmpty(title)){showNotification(context,title,content,extras.toString(),msg+"");}} catch (JSONException e) {e.printStackTrace();}}}if (JPushInterface.ACTION_REGISTRATION_ID.equals(intent.getAction())) {String regId = bundle.getString(JPushInterface.EXTRA_REGISTRATION_ID);//提交注册 id 到活动盒子HzSDK.getInstance().configWithPushRegisterIdAndPlatform(regId, HzSDKPushType.JPush.getType());} else if (JPushInterface.ACTION_NOTIFICATION_OPENED.equals(intent.getAction()) || HzSDK.HZSDK_EXTRAS_MSG_OPEN.equals(intent.getAction())||HzSDK.HZSDK_LEANCLOUD_EXTRAS_MSG_OPEN.equals(intent.getAction())) {Log.d(TAG, "[MyReceiver] 用户点击打开了通知");//处理消息 用户无需设置 eventHzSDKBean hzSDKBean  = new HzSDKBean();hzSDKBean.setUserName("123156456464");hzSDKBean.setMobile("13800138000");hzSDKBean.setHzBackIcon(R.drawable.icon_launch);hzSDKBean.setHzBarBackground(context.getResources().getColor(R.color.colorAccent));//活动页面打开,分享,关闭监听hzSDKBean.setHzSDKListener(new HzSDKListener() {@Overridepublic void onWebViewShareClick(Context context, String linkUrl, String title, String content, String imgUrl) {}@Overridepublic void onWebViewFinish() {}@Overridepublic boolean onWebViewOpen(Context context, String s) {//活动打开 return true表示不拦截打开事件//return false 表示拦截打开事件return true;}});//isDeal 是否活动盒子推送的活动boolean isHzSDkMsg = HzSDK.getInstance().dealWithNotifyMessage(context,intent,hzSDKBean);if (!isHzSDkMsg){//不是活动盒子的数据 自己做跳转处理Intent myIntent = new Intent();myIntent.setClass(context, MainActivity.class);myIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);context.startActivity(myIntent);}}}}

个推 example

* 在继承个推GTIntentService的 server 中处理接受到的盒子 sdk 的推送信息 *

payload json 对象

字段属性描述
hzsdk_title推送的标题
hzsdk_content推送的内容
hzsdk_extras推送的活动信息
/*** 个推接受推送消息的方法* @param context* @param msg 个推推送消息*/@Overridepublic void onReceiveMessageData(Context context, GTTransmitMessage msg) {Log.e(TAG,"onreceiveMsg->"+msg.getMessageId()+""+new String(msg.getPayload())+""+msg.getTaskId());String appid = msg.getAppid();String taskid = msg.getTaskId();String messageid = msg.getMessageId();String pkg = msg.getPkgName();String cid = msg.getClientId();//处理盒子sdk 推送信息 推送的内容存在在自定义的 payload 字段byte[] payload = msg.getPayload();String data = new String(payload);if(!TextUtils.isEmpty(data)){try {JSONObject jsonObject = new JSONObject(data);//盒子 sdk推送的通知栏标题String title = jsonObject.optString("hzsdk_title");//盒子 sdk 推送的通知栏内容String content = jsonObject.optString("hzsdk_content");//盒子 sdk 推送的活动信息String extras = jsonObject.optString("hzsdk_extras");if(!TextUtils.isEmpty(title)){//显示在通知栏//显示在通知栏showNotification(context,title,content,extras,taskid);}} catch (JSONException e) {e.printStackTrace();}}}

把个推的个推 id 发送到盒子后台

//继承个推GTIntentService的@Overridepublic void onReceiveClientId(Context context, String clientid) {Log.e(TAG, "onReceiveClientId -> " + "clientid = " + clientid);HzSDK.getInstance().configWithPushRegisterIdAndPlatform(clientid, HzSDKPushType.GeTui.getType());}

显示到通知栏的方法,用户可以使用自有的通知栏显示方法,此处只提供参考:

/**         * 显示一个普通的通知         * @param context 上下文         */public static void showNotification(Context context,String title,String content,String extras,String taskid) {PendingIntent pendingIntent = null;//点击通知栏信息的消息处理类,此处是一个广播接收器 处理逻辑跟极光的 myReceiver 相同Intent pushIntent = new Intent(context,MyReceiver.class);//广播的 action 必须是盒子 sdk @ linke(HzSDK.HZSDK_EXTRAS_MSG_OPEN)pushIntent.setAction(HzSDK.HZSDK_EXTRAS_MSG_OPEN);//广播的消息 idpushIntent.putString(HzSDK.HZSDK_PUSH_MSG_ID,taskid);int id = (int) (System.currentTimeMillis() / 1000);Bundle bundle = new Bundle();//把 hzsdk_extras储存到 bundle 里面 bundle的 key 必须是 HzSDK.HZSDK_EXTRAS_MSGbundle.putString(HzSDK.HZSDK_EXTRAS_MSG,extras);pushIntent.putExtras(bundle);//用于统计推送目标打开数bundle.putString(HzSDK.HZSDK_PUSH_MSG_ID,msgid);pendingIntent = PendingIntent.getBroadcast(context.getApplicationContext(), id, pushIntent, PendingIntent.FLAG_UPDATE_CURRENT);Notification notification = new NotificationCompat.Builder(context)/**设置通知左边的大图标**/.setLargeIcon(BitmapFactory.decodeResource(context.getResources(), R.mipmap.icon))/**设置通知右边的小图标**/.setSmallIcon(R.mipmap.icon)/**通知首次出现在通知栏,带上升动画效果的**/.setTicker(title)/**设置通知的标题**/.setContentTitle(title)/**设置通知的内容**/.setContentText(content)/**通知产生的时间,会在通知信息里显示**/.setWhen(System.currentTimeMillis())/**设置该通知优先级**/.setPriority(Notification.PRIORITY_DEFAULT)/**设置这个标志当用户单击面板就可以让通知将自动取消**/.setAutoCancel(true)/**设置他为一个正在进行的通知。他们通常是用来表示一个后台任务,用户积极参与(如播放音乐)或以某种方式正在等待,因此占用设备(如一个文件下载,同步操作,主动网络连接)**/.setOngoing(false)/**向通知添加声音、闪灯和振动效果的最简单、最一致的方式是使用当前的用户默认设置,使用defaults属性,可以组合:**/.setDefaults(Notification.DEFAULT_VIBRATE | Notification.DEFAULT_SOUND).setContentIntent(pendingIntent).build();NotificationManager notificationManager = (NotificationManager) context.getSystemService(context.NOTIFICATION_SERVICE);/**发起通知**/notificationManager.notify(id, notification);}

DeepLink功能

介绍

盒子 sdk 的 deeplink 不支持 android6.0的 app links 的功能,因为谷歌在中国的限制以及各种手机定制开发商的不一致,盒子仅以 app Scheme 的方式为活动页面提供deeplink 功能服务

APP Scheme 配置

定义一个用于接收uri scheme 跳转的参数的 activity

<!--配置scheme 的值请与 ios 的 schem 保持一值 以便于 更好的服务体验--><activityandroid:name=".activity.DeepLinkActivity"android:screenOrientation="portrait"android:noHistory="true"android:launchMode="singleTask"><!--配置scheme--><intent-filter><data  android:scheme="your app scheme"/><action android:name="android.intent.action.VIEW" /><category android:name="android.intent.category.DEFAULT" /><category android:name="android.intent.category.BROWSABLE" /></intent-filter></activity>

在活动盒子的活动页面分享回调里面创建深度链接

//根据原始链接生成深度链接String deepLink   = appLinksBuilder.build(context).configScheme("your app scheme://").addCustomeParams("自定义参数","自定义参数").buildUrl("原始链接");

for example

public void onWebViewShareClick(final Context context, String linkUrl, String title, String content, String imgUrl, final String callBackUrl) {//创建活动深度链HzSDKAppLinksBuilder appLinksBuilder = new HzSDKAppLinksBuilder();final String deepLink   = appLinksBuilder.build(context).configScheme("your app scheme://").addCustomeParams("channle","qq").addCustomeParams("page","homePage").buildUrl(linkUrl);Log.e("deepLink===>",deepLink);//活动分享事件//用户可以做自己的调用自己的分享功能AlertDialog.Builder builder = new AlertDialog.Builder(context);builder.setTitle(title);builder.setMessage(content+"分享地址="+linkUrl);builder.setNegativeButton("取消", null);builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {//模拟分享成功 调用分享成功统计功能HzSDK.getInstance().requestShareCallBack(context,callBackUrl,deepLink);}});builder.show();}

在 接收 schem 参数的activity 的 onNewIntent 函数中设置setIntent(intent)

public class DeepLinkActivity extends AppCompatActivity{@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);//防止出现空白页面this.finish();}@Overrideprotected void onNewIntent(Intent intent) {super.onNewIntent(intent);setIntent(intent);}}

设置 deeplink 数据监听

// 使用 deeplink 功能 解析深度链接的回调 不适用此功能的不用设置HzSDK.getInstance().initDeepLinks(this,new HzSDKAppLinksListener() {@Overridepublic void getHzSDKAppLinksInfo(HzSDKAppLinksBean hzSDKAppLinksBean) {if(null != hzSDKAppLinksBean){//活动盒子的 tokenString token = hzSDKAppLinksBean.getToken();//深度链接分享者 idString shareUid = hzSDKAppLinksBean.getUid();//深度链接自定义参数HashMap<String,String> customeParams = hzSDKAppLinksBean.getCustome();//新增参数 invitation 用于邀请有礼活动String invitation = hzSDKAppLinksBean.getInvitation();//通过活动 token 打开分享的活动if(!TextUtils.isEmpty(token)){HzSDKBean hzSDKBean = new HzSDKBean();hzSDKBean.setEvent(token);//此处的 event 值设置为活动 token 值即可hzSDKBean.setMobile("13800138000"+System.currentTimeMillis());hzSDKBean.setUserName("13800138000"+System.currentTimeMillis());hzSDKBean.setInvitation(invitation);//用于打开邀请有礼hzSDKBean.setHzSDKListener(new HzSDKListener() {@Overridepublic void onWebViewShareClick(Context context, String s, String s1, String s2, String s3, String s4) {}@Overridepublic void onWebViewFinish() {}@Overridepublic boolean onWebViewOpen(Context context, String s) {//return false 后可以打开自己的 webview 去加载次链接startActivity(new Intent(context, H5.class).putExtra("url",s).addFlags(Intent.FLAG_ACTIVITY_NEW_TASK));return false;}//                            @Overridepublic boolean dismissWithTrigger(boolean b, HzSDKTriggerView triggerView) {triggerView.onDismiss();return true;}});//通过 token 打开活动,程序具体在什么时候打开不 app 要开发者自己判断 HzSDK.getInstance().openActivityWithToken(MyAppLication.this,hzSDKBean);}}}});

通过活动的 token 打开活动的页面参与活动

HzSDKBean hzSDKBean = new HzSDKBean();//此处的 event 即 deeplink 获取的活动 tokenhzSDKBean.setEvent(shareActivityToken);hzSDKBean.setUserName("134a3sdsds");hzSDKBean.setMobile("18826457896");HzSDK.getInstance().openActivityWithToken(MyApplication.this,hzSDKBean);

分享添加抽奖次数接口

在 app 分享成功后调用

/*** 用于统计分享成功,并且给有设置分享规则的活动增加抽奖次数* @param context* @param shareCallBackUrl 活动页面分享回调回来的 callBackUrl link @HzSDKListener* @param resourceUrl 活动页面分享回调回来的 linkUrl/deepLink link @HzSDKListener*/public void requestShareCallBack(Context context,String shareCallBackUrl,String resourceUrl);

SDK标签,条件,参数功能使用(可选)

在触发或者投放功能里面添加参数即可

//sdk 标间功能使用 设置系统内置单标签
HashMap<String,String> customeDatas= new HashMap<String, String>();
customeDatas.put("age","1");
customeDatas.put("constellation","1");
// 自定义SDK标签分类与标签值(二者必须同时存在)'defined_category': '班级',          
// 自定义标签分类'defined_tag': '学生'                 
customeDatas.put("defined_category","自定义标签名称");
customeDatas.put("defined_tag","自定义标签值");
//自定义多标签
 JSONObject jsonObject = new JSONObject();
 jsonObject.put("name",250);
 jsonObject.put("count",10000);
 customeDatas.put("defined_tags",jsonObject.toString());
 //自定义参与条件(推荐)
JSONObject extra_params  = new JSONObject();
extra_params.put("vip","vip1");
extra_params.put("model","华为p10");
customeDatas.put("extra_params",extra_params.toString());
//设置自定义参数
JSONObject custome_datas  = new JSONObject();
custome_datas.put("name","mumu");
custome_datas.put("cutsdata","4567897");
customeDatas.put("custom_datas",custome_datas.toString());
//在HzSDKBean对象中提交
sdkBean.setReserveParams(customeer);

SDK标签值列表规范:SDK标签值列表规范

// 系统自带SDK标签分类'age': '1',                           // 年龄段'constellation ': '1',                // 星座 'education': '1',                     // 学历 'salary': '1',                        // 年收入'interest': '1',                      // 兴趣'industry ': '1',                     // 行业'car ': '1',                          // 车辆'house ': '1',                        // 住房 'marital ': '1',                      // 婚姻状况'children ': '1',                     // 子女状况'online_shop ': '1',                  // 网购行为'risk_sensitivity ': '1',             // 风险敏感度'price_sensitivity ': '1',            // 价格敏感度'category_preferences ': '1',         // 品类偏好'shopping_times ': '1',               // 每月购物频次'shopping_time_preference': '12:59',  // 购物时间偏好'max_price': '100.00',                // 单次购物最高金额// 自定义SDK标签分类与标签值(二者必须同时存在)'defined_category': '班级',            // 自定义标签分类'defined_tag': '学生'                  // 自定义标签

页面统计功能 (可选)

1.在盒子初始化的时候使用统计功能

/***********************************         * 页面统计功能:如果是所有页面都是 Activity 构成的话 ,只需要设置 setAutoStatistics 为 true 即可         * 如果页面又 fragment 或者 fragmentActivity ,等页面的话 要在关闭自动统计功能,然后在每个页面添加相关的 onPageStart 跟 onPageEnd方法         **********************************/HzSDK.getInstance().setAutoStatistics(true);// 如果是 fragment 的页面 取消自动统计页面功能//是否使用统计分析功能HzSDK.getInstance().initAnalysis(this);

2.如果是全 Activity 的页面 自动集成统计 
3.如果是 fragment 的页面

  • 停用自动统计 Activity 设置

    HzSDK.getInstance().setAutoStatistics(false);//取消自动统计页面
  • 要在 fragment 的 onpause 跟 onresume 调用

@Overridepublic void onPause() {super.onPause();HzSDK.getInstance().onPageEnd(PutIn2EventFragment.class.getSimpleName());}@Overridepublic void onResume() {super.onResume();HzSDK.getInstance().onPageStart(PutIn2EventFragment.class.getSimpleName());}

4.在app 退出时调用退出的方法

HzSDK.getInstance().onAppExit();