FCM 成功,但 Ionic V1 中的设备未收到通知

问题描述 投票:0回答:2

我正在将 FIREBASE CLOUD MESSAGING 服务与我的 ionic 产品和 phonegap-plugin-push cordova 插件一起使用,以从 PHP 后端获取推送通知。

当我尝试获取推送通知时,php 端会成功获得结果,如下所示。

示例推送数据负载

{"multicast_id":8853634389214913500,"成功":1,"失败":0,"canonical_ids":0,"结果":[{"message_id":"0:1495614850271706%39688dd8f9fd7ecd"}]}

技术规格:

  • cordova推送通知插件版本:1.9.4

  • 平台和版本:Ionic V1

  • 离子 CLI 版本:2.1.13

  • 科尔多瓦版本:科尔多瓦--6.4.0

  • cordova Android 平台:6.0.0

  • Android)我测试过哪些设备供应商:三星、华为、小米 等等

  • 说明问题的示例代码如下

    离子部分:

    //推送通知 如果(窗口.科尔多瓦){ if (!localStorage.getItem('device_token')) { var apkId = 0; var iosId = 0; 变量选项= { 安卓: { senderID:我的 FCM 发件人 ID, 图标:“警报”, }, 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 部分:

$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;

提前致谢!

php cordova ionic-framework firebase-cloud-messaging phonegap-pushplugin
2个回答
8
投票

如果您想在锁定屏幕上显示通知,请使用

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
投票

根据 FCM 的最新更新,以下是代码:

$curl = curl_init(); 
$msg = [
    "message" => [
          "notification" => [ 
        "title" =>  $content->title,
                "body" => $content->notification_body,
        "image" => $content->notification_image
          ],                
                "token" => $token
            ]
    ];
$data = json_encode($msg); 

curl_setopt_array($curl, array(
    CURLOPT_URL => 'https://fcm.googleapis.com/v1/projects/'. $project_id .'/messages:send',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_ENCODING => '',
    CURLOPT_MAXREDIRS => 10,
    CURLOPT_TIMEOUT => 0,
    CURLOPT_FOLLOWLOCATION => true,
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_POSTFIELDS => $data,
    CURLOPT_HTTPHEADER => array(
        'Authorization: Bearer ' . getGoogleAccessToken($project_id),
        'Content-Type: application/json'
    ),
));
    
$response = curl_exec($curl);
    
$resp = json_decode($response);

function getGoogleAccessToken($file_name) { 
    $credentialsFilePath = base_path(). "/". $file_name .".json"; //replace this with your actual path and file name
    echo "Cred_file". $credentialsFilePath;
    $client = new \Google_Client();
    $client->setAuthConfig($credentialsFilePath);
    $client->addScope('https://www.googleapis.com/auth/firebase.messaging');
    $client->refreshTokenWithAssertion();
    $token = $client->getAccessToken();
    return $token['access_token'];
   }

© www.soinside.com 2019 - 2024. All rights reserved.