【情景感知服务】让“买买买”有了新的打开方式(新增代码开源和demo)

情景感知,让“买买买”有了新的打开方式

场景

情景感知服务能带来什么

作为线下购物和消费类App,如何引流,促进用户消费,是痛点之一。即使商家准备了大量的优惠券,用户依然需要进入App内才能看到。

HMS情景感知服务(Awareness Kit),能提供一套完善的智能推送解决方案,根据多种感知状态的组合,精准判断用户意图,帮助商圈或店铺类的App,在每个潜在消费者用户拿起手机时,就能第一时间接收到各种优惠信息,从而促进销售。对于不适合的时间和场景,情景感知服务也能精准判断,避免对用户频繁打扰的通知。

什么是情景感知服务?

情景感知服务(Awareness Kit)能感知用户当前的时间、地理位置、活动状态、耳机状态、天气状况、环境光、车载连接状态、信标连接状态等情景,并通过能常驻后台运行的围栏能力向APP进行提醒,使APP能第一时间给用户提供精准和贴心的服务。上述情景感知能力还在不断扩充中,而且您可以自由组合这些感知能力,构建组合围栏,从而让APP的服务能力更加智能,更加精准。

在情景感知服务的支持下,App能给用户带来如下体验:

–闲暇时光,当你不经意的走到商场附近,或者在某个店铺门口驻留了数分钟,此时手机通知栏消息提醒你,今天商场有特别的优惠哟,要不要去消费一把?

–不用打开App,直接点通知,各类优惠券顺利到手,省去我左挑右选的时间。

–每个网红店,你走进去就能自动签到打卡噢,离专属优惠又更近了一步。

–可根据天气、时间的不同,推荐最合适的优惠信息,也可设置排除场景,避免在不适合购物和消费的时间、天气状态下打扰用户。

–可根据用户的活动状态,进行是否要进行推送的判断。用户步行经过商圈,或在商圈内驻足,则需要推送,但如果用户是骑车、乘车等状态,则避免推送。

情景感知服务提供的感知功能如下

地理围栏感知:自由设置围栏半径,用户进入/离开/驻留在围栏中均可提醒,建议使用围栏驻留感知,便于精准识别,避免无效提醒打扰用户

天气感知、时间感知、活动状态感知:根据合适的时间、天气,用户在商圈附近的活动状态,精准识别购物场景,避免无效提醒打扰用户

信标感知:实体店铺内安装信标(Beacon,一种基于蓝牙技术的硬件),用户进入范围后可进行通知提醒。信标和地理围栏的区别是范围大小不同,信标的感知范围一般只有十几米,可实现商场内不同店铺间的精确提醒。

情景感知服务的优势

–无需用户提前开启App,用户进入地理围栏范围后,即可后台激活App,触发通知。

–无惧App进程被系统杀死,通过围栏服务,依然可接受到通知。

–点击通知,即可前台激活APP,点击直接跳转App推荐界面。

–通过组合围栏实现精准推送;也可避免在用户不需要的场景提供无效通知,避免频繁打扰。

开发前准备

Awareness Kit集成需要有如下3个关键步骤,可以参考华为开发者联盟的文档

  1.  AppGallery Connect配置
    
  2. 集成HMS Awareness SDK
    
  3. 配置混淆脚本
    

https://developer.huawei.com/consumer/cn/doc/development/HMS-Guides/awareness-preparation

代码开发关键步骤

1.创建围栏

double latitude = 22.4943;
double longitude = 113.7436;
double radius = 100;
long timeOfDuration = 30 * 1000L;
//创建一个stay的地理围栏,经纬度为商圈店铺的经纬度,半径设置为100m,驻留时间设置为30s
AwarenessBarrier stayBarrier = LocationBarrier.stay(latitude, longitude, radius, timeOfDuration);
//创建一个活动识别的围栏,识别的活动状态为乘车和骑行
AwarenessBarrier behaviorBarrier = BehaviorBarrier.keeping(BehaviorBarrier.BEHAVIOR_ON_BICYCLE,BehaviorBarrier.BEHAVIOR_IN_VEHICLE);
//创建一个时间围栏,该围栏的状态在深夜时间段(21点到次日6点)内为true
AwarenessBarrier timeBarrier = TimeBarrier.inTimeCategory(TimeBarrier.TIME_CATEGORY_NIGHT);
//对这三个围栏进行组合,组合围栏的状态只有在以下情况才会变为true:当用户驻留在地理围栏内超过30s且活动状态不是乘车或者骑行,且不是在夜晚时间段
AwarenessBarrier combinedBarrier = AwarenessBarrier.and(stayBarrier, AwarenessBarrier.not(timeBarrier), AwarenessBarrier.not(behaviorBarrier));
 
//创建一个PendingIntent,当围栏状态改变的时候,会触发该PendingIntent,这里以启动一个Service为例.
PendingIntent pendingIntent;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    
    
    //在安卓8.0及以上,app处于后台时只可以启动前台Service
    pendingIntent = PendingIntent.getForegroundService(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
} else {
    
    
    pendingIntent = PendingIntent.getService(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
}
 
//创建围栏的标签,后续可以通过标签查询或者删除该围栏
String combinedBarrierLabel = "combined barrier label";

2.注册围栏

//把刚刚创建好的组合围栏和它对应的label,pendingIntent注册给Awareness kit
Awareness.getBarrierClient(context).updateBarriers(new BarrierUpdateRequest.Builder()
        .addBarrier(combinedBarrierLabel, combinedBarrier,pendingIntent).build())
        .addOnSuccessListener(aVoid -> {
    
    
            //注册围栏成功
            Log.i(TAG,"add barrier success");
        })
        .addOnFailureListener(e -> {
    
    
            //注册围栏失败
            Log.e(TAG,"add barrier failed");
            e.printStackTrace();
        });

3.创建Service监听围栏事件

本示例中我们组合围栏的PendingIntent设置的是启动一个Service,所以需要定义对应的Service来监听围栏的状态
public class DemoService extends IntentService {
    
    
 
    public DemoService() {
    
    
        super("AwarenessDemoService");
    }
 
    @Override
    public void onCreate() {
    
    
        super.onCreate();
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    
    
            NotificationManager manager = getSystemService(NotificationManager.class);
            if (manager == null) {
    
    
                return;
            }
            String channel_ID = "DemoService";
            NotificationChannel channel = new NotificationChannel(channel_ID,getResources().getString(R.string.app_name),NotificationManager.IMPORTANCE_LOW);
            manager.createNotificationChannel(channel);
            Notification notification = new Notification.Builder(this,channel_ID).build();
            startForeground(1,notification);
        }
    }
 
    @Override
    protected void onHandleIntent(@Nullable Intent intent) {
    
    
        if (intent == null) {
    
    
            Log.e(TAG, "Intent is null");
            return;
        }
        //围栏的信息通过intent传递过来,我们通过Barrier.extract方法将其解析出来
        BarrierStatus barrierStatus = BarrierStatus.extract(intent);
        //通过BarrierStatus获取label和围栏的当前状态
        String barrierLabel = barrierStatus.getBarrierLabel();
        int status = barrierStatus.getPresentStatus();
        if (status == BarrierStatus.TRUE && barrierLabel.equals(combinedBarrierLabel)) {
    
    
            //围栏状态为true,代表用户已经在商铺附近驻留超过30s,且不是在骑行或者乘车,且现在不是深夜时间段
            //这时就可以通知优惠信息给用户,或者进行其他业务逻辑
            //send Notification....
        }
    }
}

Demo效果

我们做了一个简单的app demo,展示情景感知带来的购物体验提升

代码也做了开源,请移步github

https://github.com/Bun-Cheung/Awa-Shopping

在这里插入图片描述
开发者交流
更多建议和需求,欢迎联系 [email protected]

猜你喜欢

转载自blog.csdn.net/weixin_47546655/article/details/107855828
今日推荐