FCM дает успех, но устройство не получает уведомление в Ionic V1

Я использую услугу FIREBASE CLOUD MESSAGING с моим ионным продуктом и PhoneGap-плагин нажатие Плагин Cordova для получения push-уведомлений от PHP BACK END.

Когда я пытаюсь получить push-уведомление, php end получает результат с успехом, как показано ниже.

Пример Push Data Payload

{ «Multicast_id»: 8853634389214913500, «успех»: 1, «провал»: 0, «canonical_ids»: 0, «Результаты»: [{ «message_id»: «0: 1495614850271706% 39688dd8f9fd7ecd»}]}

Технологическая спецификация:

  • Версия плагина для push-уведомлений Cordova: 1.9.4

  • Платформа и версия: Ionic V1

  • Ионная версия CLI: 2.1.13

  • Кордова версия: Кордова — 6.4.0

  • Платформа Android для Cordova: 6.0.0

  • Android) Какого производителя устройства я тестировал: Samsung, HUWAWEI, Xiaomi
    и т.п.

  • Пример кода, который иллюстрирует проблему, как показано ниже

    ИОННАЯ ЧАСТЬ:

    //Отправить уведомление
    if (window.cordova) {
    if (! localStorage.getItem (‘device_token’)) {
    var apkId = 0;
    var iosId = 0;
    var options = {
    Android: {
    senderID: мой идентификатор отправителя FCM,
    значок: «оповещение»,
    },
    IOS: {
    предупреждение: «правда»,
    значок: «правда»,
    звук: «правда»},
    окна: {}
    };

        //localStorage.getItem('gcmRegId')
    // initialize
    $cordovaPushV5.initialize(options).then(function () {
    // start listening for new notifications
    $cordovaPushV5.onNotification();
    // start listening for errors
    $cordovaPushV5.onError();// register to get registrationId
    $cordovaPushV5.register().then(function (data) {
    //alert("GCM"+data);
    // if Android device.
    if (ionic.Platform.isAndroid()) {
    apkId = data;
    }
    // if ios device.
    if (ionic.Platform.isIOS()) {
    iosId = data;
    }
    // Updating member details with apkId or iosId
    var pushParams = {
    'app_token': Config.appToken,
    'device_uiu_token': device.uuid,
    'apk_token': apkId,
    'ios_token': iosId
    }
    $http.post(Config.apiUrl + "member/save_token", pushParams)
    .success(function (data) {
    if (data.status == 200) {
    localStorage.setItem("device_token", device.uuid);
    
    }
    /* else{
    alert("Sorry!Error occurs!");
    } */
    });
    })
    // Updating end.
    });
    
    // triggered every time notification received
    $rootScope.$on('$cordovaPushV5:notificationReceived', function (event, data) {
    alert("recieved" + JSON.stringify(data));
    // data.message,
    // data.title,
    // data.count,
    // data.sound,
    // data.image,
    // data.additionalData
    });
    
    // triggered every time error occurs
    $rootScope.$on('$cordovaPushV5:errorOcurred', function (event, e) {
    alert('push ERROR' + e.message);
    // e.message
    });
    

    // конец уведомления

PHP PART:

$push_title = $this->input->post('push_title');
$push_msg = $this->input->post('push_msg');
$members = $this->members_model->get_members();
$apk_tokens = array();
$ios_tokens = array();
foreach ($members as $member) {
if ($member['apk_token'] != 0 || $member['apk_token'] != "") {
array_push($apk_tokens, $member['apk_token']);
}
if ($member['ios_token'] != 0 || $member['ios_token'] != "") {
array_push($ios_tokens, $member['ios_token']);
}
}
//Sending the push notification using GCM.
$msg = array(
'message' => $push_msg,
'title' => $push_title,
'vibrate' => 1,
'sound' => 1,
'largeIcon' => 'large_icon',
'smallIcon' => 'small_icon',
);

$fields = array
(
'registration_ids' => $apk_tokens,
'data' => $msg,
'priority' => 'high'
);

$headers = array
(
'Authorization: MY FCM SERVER KEY',
'Content-Type: application/json'
);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://fcm.googleapis.com/fcm/send');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($fields));
$result = curl_exec($ch);
curl_close($ch);
echo $result;

Заранее спасибо!

0

Решение

Если вы хотите показать уведомление на экране блокировки, используйте notification в $fields, Объект требует title а также body элементы.

https://firebase.google.com/docs/cloud-messaging/server#implementing-http-connection-server-protocol

$fields = array
(
'registration_ids' => $apk_tokens,
'data' => $msg,
'priority' => 'high',
'notification' => array(
'title' => 'This is title',
'body' => 'This is body'
)
);

Я не пробовал этот код, но такая же проблема с node.js SDK была исправлена ​​таким образом.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]