消息推送是根据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 页面。