沃梦达 / 编程问答 / php问题 / 正文

FCM 推送通知问题:“错误":“NotRegistered"

FCM push notification issue: quot;errorquot;:quot;NotRegisteredquot;(FCM 推送通知问题:“错误:“NotRegistered)

本文介绍了FCM 推送通知问题:“错误":“NotRegistered"的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我遇到了使用 FCM 向 Android 发送推送通知的奇怪问题.

I am getting weird issue of sending push notification to Android using FCM.

目标:- 发送推送通知时出错

下面是我有向Android发送推送通知功能的场景

Below is the scenario I do have function for sending push notification to Android

 public static function SendMultipleNotificationAndroid($groups)
    {
        //your api key SERVER API KEY
        $apiKey = Yii::$app->params['android_api_key'];
        $url = 'https://fcm.googleapis.com/fcm/send';    
        $headers = array(
            'Authorization:key=' . $apiKey,
            'Content-Type: application/json'
        );
        
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        
        foreach($groups as $resG){
            $users  = $resG['users'];                        
            $msg    =   $resG['message'];
            $type    =   $resG['notification_type'];
            $notification_data    =   $resG['notification_data'];

            $deviceTokens = [];
            foreach($users as $resUser){
                $deviceTokens[] = $resUser['device_token'];
                //Add  Friend badge count +1
                Common::AddRemoveBadgeCount($resUser['user_id']);
            }
            if(!empty($deviceTokens)){
                $fields = array(
                    'registration_ids' => $deviceTokens,
                    'priority'     => 'high', 
                    'collapse_key' => $resG['notification_type'],   
                    'time_to_live' => 2419200,     
                    "click_action" =>"NotificationListingActivity",     
                    'data'         => [                  
                        "title"             => "ProjectName",
                        "body"              => $resG['message'],
                        "action_tag"        => $resG['notification_type'],
                        "message"           => $resG['message'],
                        'notification_type' => $type,
                        'notification_data' => $notification_data,
                        'sound'             => 'default',
                    ]
                );
                //Print result 
                p($ch,0);
                curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($fields));
                curl_exec($ch);
            }            
        }
        curl_close($ch);
    }

所以问题是当我发送单个通知时它工作正常但是当我发送多个通知时我每次都收到错误

So the issue is when I send single notification it works fine but when I send multiple notification I got error every time

<pre>Resource id #5</pre>{"multicast_id":4818908994630396118,"success":1,"failure":1,"canonical_ids":0,"results":[{"error":"NotRegistered"},{"message_id":"0:1487136045570022%c3bae3c6002e9358"}]}

<pre>Resource id #5</pre>{"multicast_id":5218359780835228544,"success":1,"failure":1,"canonical_ids":0,"results":[{"error":"NotRegistered"},{"message_id":"0:1487136046618669%c3bae3c6002e9358"}]}

当我们调试代码时,我们的数据库中确实有设备令牌,没有防火墙会停止发送推送通知.

As we debug the code we do have device token in our database no firewall which stops sending push notifications.

每次我调用上面的函数我都会得到

Every time I call above function I get

"error":"NotRegistered"

推荐答案

根据文档,这是因为移动设备测试不再安装您的应用程序

According to the doc its because the mobile device testing does not have your app installed anymore

如果是NotRegistered,你应该把注册ID从您的服务器数据库,因为该应用程序已从设备,或者客户端应用未配置为接收消息.

If it is NotRegistered, you should remove the registration ID from your server database because the application was uninstalled from the device, or the client app isn't configured to receive messages.

这篇关于FCM 推送通知问题:“错误":“NotRegistered"的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本文标题为:FCM 推送通知问题:“错误":“NotRegistered"

基础教程推荐