2017-01-26 4 views
1

Я разработал приложение для Android с использованием Ionic 2. Приложение прекрасно работает, и уведомления отправляются в приложение правильно. Тем не менее, я всегда получаю push-уведомление, значок значка, на который рассчитываются уведомления, не отображается.Как увеличить уведомление о значке в значке приложения Android с помощью Ionic 2?

Я пробовал много, я много искал в Интернете, и ни одно решение не работает.

Информация:

  1. У меня есть cordova-plugin-badge установлен.
  2. В моей app.component.ts я уже импортирован Знак Plugin: import { Badge } from 'ionic-native';
  3. Чтобы проверить, я выставиться счетчик жетонов до 10, с этим кодом: Badge.set(10); - я гнал этот код внутри constructor в app.components.ts.

Я использовал Ionic tutorial, чтобы использовать значок.

Я попытался разработать, используя plugin tutorial, но это неспецифично для Ионного. Тогда я не знаю, как это может помочь.

Я использовал Ionic 2 tutorial to do the push notifications и, как я сказал, отлично работает.

Ну, документация Ion о значке сообщает, что я должен использовать 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 с использованием Android Emulator, предоставленный Android Studio. 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. Результаты мало. Характеристики нулевого результата для ионного. Удивительно, да?

И ... Я вижу уведомления о значке в Android. Это можно сделать. Но как?

Извините, мой английский и длинный текст.

Спасибо!

EDIT 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 

EDIT 2 ----- ---------------

Мой PHP код которым отправить уведомление ионического через CURL:

$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); 
+0

При отправке push-уведомления из вашего внутреннего блока вы можете предоставить счетчик значков. – JoeriShoeby

+0

Привет @JoeriShoeby, спасибо за ответ. Но как я могу это сделать? Я так много пробовал и ничего не делал. Используя Ionic 2, как поместить значок значка в значок приложения, получив push-уведомление? –

+0

Что у вас есть в качестве заднего сервера? – JoeriShoeby

ответ

1

вам нужно отправить что-то вроде этого, чтобы установить знак 5:

{ "data": { 
"badge": "5"},"to" : "your push token"} 

уведомление, чтобы сделать эту работу для Android вы не должны посылать объект уведомления с ним. Только данные. Таким образом, приложение Android будет просыпаться. На IOS вы можете получить текущий значок и увеличить его с помощью плагина. Что я обычно делаю, чтобы рассчитать значок на бэкэнде и послал новый значок

+0

Привет @ yernar-amergaliyev, спасибо ответ. Проблема в том, что у Ionic нет «значка» для Android. Посмотрите параметры [CURL] Ionic (http://docs.ionic.io/api/endpoints/push.html#post-notifications). Используя Ionic, я не знаю, как это сделать. –

+1

есть андроид не поддерживает нашивка. Каждый производитель телефонов Android делает это сам. для этого есть плагин. просто используйте его. И отправил уведомление о данных для телефонов Android. они пробудят приложение, и вы можете изменить значок с помощью своего плагина. –

+0

Где часть приращения? Если значок уже показывает счетчик, скажем 1, и получено другое уведомление, то как увеличить счетчик на значке, чтобы сказать 2 в этом случае? – Baig

0

Я только что столкнулся с той же проблемой. Android не поддерживает оповещения по push-уведомлениям по умолчанию. Но это можно сделать: для выполнения этой работы вам понадобится комбинация ionic-native/badge с push-уведомлениями.

уведомление Нажимных может быть отправлено в качестве фона уведомления, установив content_available: 1 в полезной нагрузке, ссылка: http://docs.ionic.io/services/push/#ios-background-notifications

Хотя ссылка упоминает конкретно IOS, вы можете заставить его работать на Android с помощью следующей полезной нагрузки через Ионный Пуш уведомления:

"notification": { 
    "android": { 
     "content_available": 1, 
     "payload": { 
      "badge": 5, 
      "title": "Alert", 
      "text": "Notifications" 
     }, 
     "data": { 
      "badge": 5 
     } 
    } 
} 

что это означает:

content_available:1 сообщает устройство при получении толчок уведомления, что это фон уведомлено который не должен предупреждать пользователя. Таким образом, ваше приложение сможет обрабатывать уведомление, не беспокоя пользователя.

payload Это предпочтение, но вот почему у меня есть это: для меня есть волшебная комбинация с этими оповещениями о фоновых тонах. Я не хочу, чтобы пользователь был предупрежден, когда приложение закрыто, но я хочу обработать его, когда приложение открыто. Вы не можете поместить title и message в фоновое push-уведомление и по-прежнему использовать его в фоновом режиме (по крайней мере, на 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, когда вы получаете push-уведомление, вы можете взять данные полезной нагрузки, а затем использовать его для установки номера значка. Кроме того, если вы хотите, чтобы вы также могли обрабатывать push-уведомление в приложении.

Надеюсь, это поможет.

+0

Спасибо, я попробую! –