我在后端集成了移动推送的java sdk。使用阿里云页面控制台推送时,可以在App离线的状态下,使用厂商通道弹出系统通知。但使用后端SDK的情况下,只有App在线的情况下才行,不知道哪里出了问题,求大神解决。下面是我的代码
public static void testPushNoticeToAndroid() {
DefaultProfile profile = DefaultProfile.getProfile("cn-beijing", AliCloudApiAccessKay.ACCESS_KEY_ID, AliCloudApiAccessKay.ACCESS_KEY_SECRET);
IAcsClient client = new DefaultAcsClient(profile);
PushRequest pushRequest = new PushRequest();
// 推送目标。
pushRequest.setAppKey(AliCloudApiAccessKay.APP_KEY);
pushRequest.setTarget("ALL"); // 推送目标。DEVICE:推送给设备、ACCOUNT:推送给指定帐号、TAG:推送给自定义标签、ALL:推送给全部。
pushRequest.setTargetValue("ALL");
pushRequest.setPushType("NOTICE"); // 消息类型。取值为MESSAGE、NOTICE。
pushRequest.setDeviceType("ANDROID"); // 设备类型。取值为ANDROID、iOS、ALL。
// 推送配置。
pushRequest.setTitle("ALi Push Title"); // 消息的标题。
pushRequest.setBody("Ali Push Body"); // 消息的内容。
// 推送配置:Android。
pushRequest.setAndroidNotifyType("BOTH");//通知的提醒方式。VIBRATE:震动、SOUND:声音、BOTH:声音和震动、NONE:静音。
pushRequest.setAndroidOpenType("APPLICATION"); //点击通知后动作。APPLICATION:打开应用、ACTIVITY:打开AndroidActivity、URL:打开URL、NONE:无跳转。
// 指定notificaitonchannel id。
pushRequest.setAndroidNotificationChannel("1");
try {
PushResponse response = client.getAcsResponse(pushRequest);
System.out.println(new Gson().toJson(response));
} catch (ServerException e) {
e.printStackTrace();
} catch (ClientException e) {
System.out.println("ErrCode:" + e.getErrCode());
System.out.println("ErrMsg:" + e.getErrMsg());
System.out.println("RequestId:" + e.getRequestId());
}
}
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
根据你的描述,你遇到的问题是通过阿里云移动推送的后端SDK进行推送时,离线设备无法接收到系统通知。这可能是由于以下几个原因造成的:
消息保留策略:阿里云移动推送对于离线消息有默认的保留时间设置,如果App长时间离线,超过这个保留时间的消息可能不会被送达。你可以检查并调整消息的保留策略,确保离线消息在期望的时间内仍然有效。
厂商通道配置:在阿里云移动推送控制台中,需要对Android设备的厂商通道(如华为、小米等)进行相应的配置和验证。这些通道通常能提供更好的离线推送能力。请确认是否已经正确配置了厂商通道,并且该通道的状态是正常的。
SDK集成问题:确保你的App集成的SDK版本是最新的,并且按照官方文档正确地初始化了Push服务。有时候,旧版本的SDK或者不正确的初始化步骤可能导致某些功能不工作。
权限问题:App需要具备接收通知的权限。请检查你的App是否在用户设备上获得了显示通知的权限,特别是在Android 6.0及以上版本,需要动态请求权限。
通知渠道ID:从Android 8.0开始,系统要求所有通知必须指派给一个特定的通知渠道。你已经在代码中设置了setAndroidNotificationChannel("1")
,请确保这个渠道在你的App中已经被定义并且用户可见。同时,检查渠道的重要级别是否被设置为可以响铃或震动,因为静音渠道在设备离线时可能不会触发通知。
测试环境与生产环境差异:确认你在测试时使用的环境(如开发、测试或生产环境)与实际部署时一致,不同环境的配置可能会影响推送效果。
建议你按照上述方向逐一排查,如果问题依旧,可以考虑查看阿里云移动推送的官方文档或直接联系阿里云技术支持获取更专业的帮助。