您的当前位置:首页正文

Leancloud根据地理位置将信息推送给附近的人

2022-06-15 来源:知库网

消息推送是根据installation来推送信息的

首先配置好消息推送的相关内容:

在AndroidManifest.xml 的 <application> 中包含如下内容:

(1)开启服务

<service android:name="com.avos.avoscloud.PushService"
  android:exported="true"/>

(2)设置权限

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

(3)为了让应用能在关闭的情况下也可以收到推送,你需要在 <application> 中加入:

<receiver android:name="com.avos.avoscloud.AVBroadcastReceiver">
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED" />
        <action android:name="android.intent.action.USER_PRESENT" />
        <action  />
    </intent-filter>
</receiver>

一:给附近的人发送消息推送

在此之前要确认AVUSer表中要有installation信息

先获取当前的位置信息。

//先纬度,后经度
AVGeoPoint point = new AVGeoPoint(30.0, 120.0);

将获取到的信息保存到相关列表中:

 AVObject object = new AVObject("_User");
 object.put("location", point);
 object.save()

设定默认打开的activity:

PushService.setDefaultPushCallback(this, PushDemo.class);

查询相关在附近的人

//内嵌查询
AVQuery<AVObject> innerQuery  = new AVQuery<>("_User");
AVGeoPoint point = new AVGeoPoint(39.9, 116.4);
innerQuery.whereNear("whereCreated", point);
//设备查询
AVQuery<AVObject> query = new AVQuery<>("_Installation");
query.whereMatchesQuery("installationId", innerQuery);
query.findInBackground(new FindCallback<AVObject>() {
    @Override
    public void done(List<AVObject> list, AVException e) {
        
    }
});

二:订阅和退订消息推送:

订阅:

PushService.subscribe(this, "public", PushDemo.class);
PushService.subscribe(this, "private", Callback1.class);
PushService.subscribe(this, "protected", Callback2.class);
AVInstallation.getCurrentInstallation().saveInBackground();

退订:

PushService.unsubscribe(context, "protected");
//退订之后需要重新保存 Installation
AVInstallation.getCurrentInstallation().saveInBackground();

注意

  • 频道名称:每个 channel 名称只能包含 26 个英文字母和数字。
  • 回调对象:指用户点击通知栏的通知进入的 Activity 页面。
显示全文