我使用Ionic 2为Android开发了一个应用程序。 该应用程序工作正常,通知正确发送到应用程序。 但是,我始终会收到推送通知,图标徽章会计算通知未显示。
我尝试了很多,我在互联网上搜索了很多,没有解决方案可行。
信息:
cordova-plugin-badge
。app.component.ts
我已导入徽章插件:import { Badge } from 'ionic-native';
Badge.set(10);
- 我将此代码放在constructor
的{{1}}内。我按照Ionic tutorial使用徽章。
我尝试使用plugin tutorial开发,但它对于Ionic来说并不特别。然后,我不知道这有什么用。
我使用了Ionic 2 tutorial to do the push notifications,我说的,工作得很好。
好吧,我必须使用app.components.ts
的关于徽章信息的Ionic文档。我不知道在哪里放这个代码。我想我必须指定:当通知到达设备时,Badge.increase(x)
。但是,我不知道该怎么做。
我的推送通知代码是:
Badge.increase(x)
但是此代码仅在应用程序打开时运行。 当我收到背景通知时,如何增加徽章?
另一项重要信息:
我使用Android Studio提供的Android模拟器模拟Android。 device specs。
在Android设备监视器中,我看到此错误:
this.push.register().then((t: PushToken) => {
return this.push.saveToken(t);
}).then((t: PushToken) => {
console.log('Token saved:', t.token);
});
this.push.rx.notification()
.subscribe((msg) => {
alert(msg.title + ': ' + msg.text);
Badge.clear();
});
错误列表continues here。
尝试在Google中搜索此错误。结果很少。 Ionic的结果为零。太棒了,是吗?
而且......我在Android中看到了徽章计数通知。 有可能做到这一点。但是,怎么样?
对不起我的英文和长文。
谢谢!
编辑1 --------------------
我的环境:
01-25 21:26:54.558: W/PackageManager(6769): Unknown permission com.sec.android.provider.badge.permission.READ in package com.ionicframework.myapp343731
01-25 21:26:54.558: W/PackageManager(6769): Unknown permission com.sec.android.provider.badge.permission.WRITE in package com.ionicframework.myapp343731
编辑2 --------------------
我的PHP代码通过CURL将通知发送给Ionic:
OS: Ubuntu 16.04.1 LTS
node -v: v5.12.0
npm -v: 3.8.6
ionic -v: 2.2.1
cordova -v: 6.4.0
cordova-plugin-badge version: 0.7.4
答案 0 :(得分:1)
你需要发送这样的东西来设置徽章到5:
{ "data": {
"badge": "5"},"to" : "your push token"}
通知让这项工作为Android你不应该发送通知对象。只有数据。这样Android应用程序就会醒来。在IOS上,您可以获取当前徽章并使用插件增加它。我通常用它来计算后端徽章并发送新徽章
答案 1 :(得分:0)
我最近遇到了同样的问题。默认情况下,Android不支持推送通知上的徽章。但是可以做到这一点:要实现这一点,您需要ionic-native/badge与推送通知的组合。
推送通知可以通过在有效负载中设置content_available: 1
作为背景通知发送,参考:http://docs.ionic.io/services/push/#ios-background-notifications
虽然该链接特别提及iOS,但您可以通过Ionic Push通知使用以下有效内容使其在Android上运行:
"notification": {
"android": {
"content_available": 1,
"payload": {
"badge": 5,
"title": "Alert",
"text": "Notifications"
},
"data": {
"badge": 5
}
}
}
这意味着什么:
content_available:1
告知设备接收推送通知时,它是一个不应提醒用户的后台通知。因此,您的应用将能够在不打扰用户的情况下处理通知。
payload
这是一个偏好,但这就是为什么我有这个:对我来说,这些背景推送通知有一个神奇的组合。当应用程序关闭时,我不希望用户收到警报,但我想在应用程序打开时处理它。你不能在背景推送通知上放置title
和message
,并且仍然在后台默默地传递它(至少在Android上),所以我把这些信息放在有效载荷上然后手动访问它
data
这是允许Android处理此背景通知的神奇酱。使用推送插件离子提供,有效负载结构与应用程序处理通知的方式非常相关。这是一个很好的参考:https://github.com/phonegap/phonegap-plugin-push/blob/master/docs/PAYLOAD.md#notification-vs-data-payloads
现在,要在应用程序中处理消息。
首先,请确保您已正确使用ionic-native/push
文档来设置插件并将其注入您的应用。
在app.module
import { Badge } from '@ionic-native/badge';
providers: [
Badge
]
导入您需要的所有内容:
import { Push, PushToken, IPushMessage } from '@ionic/cloud-angular';
import { Platform, Events } from 'ionic-angular';
import { Badge } from '@ionic-native/badge';
注射它:
constructor(
private badge: Badge
) {}
用它来处理有效载荷:
this.push.rx.notification()
.subscribe((message: IPushMessage) => {
console.log(message);
if (message.title && message.text) {
let notification: AppNotification = {
title: message.title,
message: message.text
};
// Handle the push notification in app.
}
let payload: any = message.payload;
// Get the badge number off the payload.
if(payload && payload.badge) {
// Using the badge plugin, set the badge number.
this.badge.set(Number(payload.badge));
}
if(payload && payload.title && payload.text) {
let notification: AppNotification = {
title: payload.title,
message: payload.text
};
// Do something with the background notification if the app is open.
}
});
根据badge
插件的离子文档,当您收到推送通知时,您可以获取有效负载数据,然后使用它来设置徽章编号。此外,如果您愿意,您还可以在应用程序中处理推送通知。
希望这有帮助。