如何使用Ionic 2增加Android应用图标中的徽章数通知?

时间:2017-01-26 00:49:27

标签: android cordova ionic-framework notifications ionic2

我使用Ionic 2为Android开发了一个应用程序。 该应用程序工作正常,通知正确发送到应用程序。 但是,我始终会收到推送通知,图标徽章会计算通知未显示。

我尝试了很多,我在互联网上搜索了很多,没有解决方案可行。

信息:

  1. 我安装了cordova-plugin-badge
  2. 在我的app.component.ts我已导入徽章插件:import { Badge } from 'ionic-native';
  3. 要进行测试,我将徽章计数设置为10,使用以下代码:Badge.set(10); - 我将此代码放在constructor的{​​{1}}内。
  4. 我按照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
    

2 个答案:

答案 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这是一个偏好,但这就是为什么我有这个:对我来说,这些背景推送通知有一个神奇的组合。当应用程序关闭时,我不希望用户收到警报,但我想在应用程序打开时处理它。你不能在背景推送通知上放置titlemessage,并且仍然在后台默默地传递它(至少在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插件的离子文档,当您收到推送通知时,您可以获取有效负载数据,然后使用它来设置徽章编号。此外,如果您愿意,您还可以在应用程序中处理推送通知。

希望这有帮助。