当前位置: 首页 > 后端技术 > Java

HMS Core地理围栏能力助你实现指定范围人群的精准消息推送

时间:2023-04-01 15:50:53 Java

HMSCore的地理围栏能力可以帮助你针对指定范围的人群策略精准推送消息,但是很难根据用户所属的地域来推送消息。目前市场上大部分第三方消息推送服务商在系统没有深度定制的情况下,通常不支持将推送人群精确定位到某个商圈或更小的区域。地理围栏技术可以很好地弥补这一点。一点。地理围栏是用虚拟的围栏来划定一个虚拟的地理边界。当手机进入、离开或在这个被围起来的特定地理区域内移动时,手机可以自动接收通知和警告信息。地理围栏与消息推送相结合,可以实现对特定区域人员的精准消息推送。例如,某旅游APP想在江苏推广其票务业务,可以针对南京、苏州等城市的热门旅游景点设置地理围栏。当目标人群在特定时间段内到达某个旅游景点附近时,将发送特定消息推送“XX景点门票券已入账,立即领取>>”当用户有购买需求时XX景点门票,优惠信息会相应推送,让用户无法拒绝。实现方法利用华为定位服务的地理围栏能力结合推送服务的消息推送能力,可以实现对指定范围内人员的精准消息推送。通过设置特定区域,可以检测用户的事件状态,例如他们何时进入、离开或停留在该区域。一旦满足触发条件,用户设备将收到实时消息推送。即使应用程序未在后台运行,消息也可以传递并显示在用户设备上,消息传递率高达99%。实际展示:在测试设备上安装演示应用程序。启动演示应用程序,在地理围栏屏幕上单击添加地理围栏,并设置相关参数以创建地理围栏。等待地理围栏被触发。触发地理围栏时检查收到的消息。开发步骤配置SDK的Maven仓库地址。(AndroidStudiocodebase配置对于Gradleplugin7.0以下版本、7.0版本和7.1及以上版本有所不同,请根据您当前的Gradleplugin版本选择相应的配置流程,这里以7.1版本为例)a)在Add中“buildscript>dependencies”中的agcp插件配置。构建脚本{i.依赖关系{ii。...三。//添加agcp插件配置,建议使用最新版本的agcp插件。四.类路径'com.huawei.agconnect:agcp:1.6.0.300'}v。}b)项目级“settings.gradle”文件,配置HMSCoreSDK的Maven仓库地址。pluginManagement{repositories{gradlePluginPortal()google()mavenCentral()//配置HMSCoreSDK的Maven仓库地址。maven{url'https://developer.huawei.com/repo/'}}}dependencyResolutionManagement{...repositories{google()mavenCentral()//配置HMSCoreSDK的Maven仓库地址。maven{url'https://developer.huawei.com/repo/'}}}2、在dependencies中添加如下编译依赖。//应用级“build.gradle”文件依赖{implementation'com.huawei.hms:location:6.4.0.300'implementation'com.huawei.hms:push:6.3.0.304'}在AndroidManifest.xml中声明系统文件权限。由于华为定位服务采用GNSS、Wi-Fi、基站等多种定位方式进行定位,让您的应用能够快速、准确地获取用户位置信息。需要使用网络、精确定位权限、粗略定位权限如果需要应用即使在后台运行也有持续定位能力,需要在Manifest文件中申请ACCESS_BACKGROUND_LOCATION权限:<使用权限android:name="android.permission.ACCESS_NETWORK_STATE"/><使用权限android:name="android.permission.ACCESS_FINE_LOCATION"/><使用-permissionandroid:name="android.permission.ACCESS_WIFI_STATE"/>注意:由于ACCESS_FINE_LOCATION、WRITE_EXTERNAL_STORAGE和READ_EXTERNAL_STORAGE是危险的系统权限,需要动态申请这些权限。如果权限不足,定位服务将拒绝为您的应用启用定位。关键代码说明代码文件路径:com.huawei.hmssample2.geofence\GeoFenceActivity.java如果您的应用需要集成栅栏服务实现服务推送,您只需要参考将GeoFenceActivity集成到您的应用中接收栅栏发送推送即可回调广播,可以实现。触发地理围栏。a)根据需要创建地理围栏和地理围栏组,并设置相应的参数,如围栏半径、触发时间等。if(checkStyle(geofences,data.uniqueId)==false){LocationLog.d("GeoFenceActivity","notuniqueID!");LocationLog.i("GeoFenceActivity","addGeofencefailed!");返回;}geoBuild.setRoundArea(data.latitude,data.longitude,data.radius);geoBuild.setUniqueId(data.uniqueId);geoBuild.setConversions(data.conversions);geoBuild.setValidContinueTime(data.validContinueTime);geoBuild.setDwellDelayTime(data.dwellDelayTime);geoBuild.setNotificationInterval(data.notificationInterval);geofences.add(geoBuild.build());LocationLog.i("GeoFenceActivity","addGeofencesuccess!");b)设置好相关参数之后通过intent注册广播GeofenceRequest.BuildergeofenceRequest=newGeofenceRequest.Builder();geofenceRequest.createGeofenceList(GeoFenceData.returnList());if(trigger.getText()!=null){inttrigGer=Integer.parseInt(trigger.getText().toString());geofenceRequest.setInitConversions(trigGer);定位日志.d(TAG,"触发器是"+trigGer);}else{geofenceRequest.setInitConversions(5);LocationLog.d(TAG,"defaulttriggeris5");}finalPendingIntentpendingIntent=getPendingIntent();try{geofenceService.createGeofenceList(geofenceRequest.build(),pendingIntent).addOnCompleteListener(newOnCompleteListener(){@Override}publicvoidonComplete(Tasktask){if(task.isSuccessful()){LocationLog.i(TAG,"添加地理围栏成功!");setList(pendingIntent,GeoFenceData.getRequestCode(),GeoFenceData.returnList());GeoFenceData.createNewList();}else{//获取错误的状态代码并使用用户友好的消息记录它。LocationLog.w(TAG,"addgeofencefailed:"+task.getException().getMessage());}}});}catch(Exceptione){LocationLog.i(TAG,"addgeofenceerror:"+e.getMessage());}privatePendingIntentgetPendingIntent(){Intentintent=newIntent(this,GeoFenceBroadcastReceiver.class);intent.setAction(GeoFenceBroadcastReceiver.ACTION_PROCESS_LOCATION);Log.d(TAG,"新请求");GeoFenceData.newRequest();returnPendingIntent.getBroadcast(this,GeoFenceData.getRequestCode(),intent,PendingIntent.FLAG_UPDATE_CURRENT);}trigger消息推送在GeoFenceBroadcastReceiver的onReceive收到围栏触发成功的提示后发送推送通知,并接收并显示通知栏中的通知。GeofenceDatageofenceData=GeofenceData.getDataFromIntent(intent);if(geofenceData!=null){interrorCode=geofenceData.getErrorCode();intconversion=geofenceData.getConversion();ArrayListlist=(ArrayList)geofenceData.getConvertingGeofenceList();位置myLocation=geofenceData.getConvertingLocation();布尔状态=geofenceData.isSuccess();sb.append("错误码:"+errorCode+next);sb.append("转换:"+转换+下一步);if(list!=null){for(inti=0;i>访问华为开发者联盟官网获取开发指导文档华为移动服务开源仓库地址:GitHub、Gitee关注我们,第一时间了解HMSCore最新技术资讯~