我使用 Ionic 2 开发了一个 Android 应用程序。 该应用程序运行良好,并且通知已正确发送到应用程序。 但是,我总是收到推送通知,但统计通知的图标徽章却不会出现。
我尝试了很多,在互联网上搜索了很多,但没有一个解决方案有效。
信息:
- 我安装了
cordova-plugin-badge
。 - 在我的
app.component.ts
中,我已经导入了 Badge 插件:import { Badge } from 'ionic-native';
- 为了测试,我将徽章计数设置为 10,并使用以下代码:
Badge.set(10);
- 我将此代码放入的
。constructor
中app.components.ts
我关注了Ionic tutorial使用徽章。
我尝试使用 plugin tutorial 进行开发,但它并不特定于 Ionic。然后,我不知道这有什么帮助。
我使用了Ionic 2 tutorial to do the push notifications而且,正如我所说,工作正常。
嗯,有关 Badge 的 Ionic 文档告知我必须使用 Badge.increase(x)
。我不知道该把这段代码放在哪里。我想我必须指定:当通知到达设备时,然后 Badge.increase(x)
。但是,我不知道该怎么做。
我的推送通知代码是:
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();
});
但是此代码仅在应用程序打开时运行。 当我收到后台通知时,如何增加徽章?
另一个重要信息:
我使用 Android Studio 提供的 Android 模拟器来模拟 Android。 device specs .
在 Android 设备监视器中,我看到以下错误:
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
错误列表continues here .
尝试在 Google 中搜索此错误。结果很少。 Ionic 特有的零结果。太棒了,是吧?
而且...我在 Android 中看到徽章计数通知。 可以做到这一点。但是,怎么办?
抱歉我的英语和长文本。
谢谢!
编辑 1 --------------------
我的环境:
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
编辑 2 --------------------
我的 PHP 代码通过 CURL 将通知发送到 Ionic:
$yourApiSecret = "myApiSecret"; // Available in Ionic Dashboard
$androidAppId = "myAndroidAppId"; // Available in Ionic Dashboard
$api_token = "my.api.token"; // Created in Ionic Dashboard
$data = array(
"tokens" => "send_to_all",
"profile" => "my_created_profile", //Created in Ionic Dashboard
"send_to_all" => true,
"notification" => array(
'title' => $title,
'message' => $message,
)
);
$data_string = json_encode($data);
$ch = curl_init('https://api.ionic.io/push/notifications');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER,
array(
'Content-Type: application/json',
'X-Ionic-Application-Id: '.$androidAppId,
'Content-Length: ' . strlen($data_string),
'Authorization: Bearer '.$api_token
)
);
$result = curl_exec($ch);
最佳答案
我最近也遇到了同样的问题。默认情况下,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 处理后台通知的魔法。使用 ionic 提供的推送插件,有效负载结构与应用程序处理通知的方式极其相关。这是一个很好的引用:https://github.com/phonegap/phonegap-plugin-push/blob/master/docs/PAYLOAD.md#notification-vs-data-payloads
现在,在应用程序中处理消息。
首先,确保您已正确遵循 ionic-native/push
文档来设置插件并将其注入(inject)您的应用中。
在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';
注入(inject):
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
插件的 ionic 文档,当您收到推送通知时,您可以获取有效负载数据,然后使用它来设置徽章编号。此外,如果您愿意,还可以在应用程序中处理推送通知。
希望这有帮助。
关于android - 如何使用 Ionic 2 增加 Android 应用程序图标中的徽章计数通知?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41864305/