使用 GCM 发送推送消息时,错误代码“notRegistered”是啥意思?

Posted

技术标签:

【中文标题】使用 GCM 发送推送消息时,错误代码“notRegistered”是啥意思?【英文标题】:what does mean by error code "notRegistered" when sending push messages using GCM?使用 GCM 发送推送消息时,错误代码“notRegistered”是什么意思? 【发布时间】:2015-12-16 09:21:49 【问题描述】:

我正在尝试使用以下代码通过 Java 服务器向注册设备发送推送通知:

import java.io.IOException;
import java.util.ArrayList;

import com.google.android.gcm.server.Constants;
import com.google.android.gcm.server.Message;
import com.google.android.gcm.server.MulticastResult;
import com.google.android.gcm.server.Result;
import com.google.android.gcm.server.Sender;


public class Test 




    private void sendNotification()
    
           try
                 Sender sender = new Sender("AIzaSyD9GblH8c9qCBqDhLPKMca3dH8JsY4cgjg");
                 ArrayList<String> devicesList = new ArrayList<String>();
                 devicesList.add("APA91bEtN2c3FYSFPpW-KuNtkWT6B9NJUviKN0L0DCjviJ2BtMyhZLqsFSFKfsySI1s88I0u68xETjvpqhvepffRSgwoTmpRXAv0Fbr0gH8CLhHO5CJC-M8");
                 String data = "hi.......";
                 Message message = new Message.Builder()
                                    .collapseKey("1")
                                    .timeToLive(3)
                                    .delayWhileIdle(true)
                                    .addData("message",
                                            data)
                                    .build();
                MulticastResult result = sender.send(message, devicesList, 1);
                            sender.send(message, devicesList, 1);

                            System.out.println(result.toString());
                            if (result.getResults() != null) 
                                int canonicalRegId = result.getCanonicalIds();
                                if (canonicalRegId != 0) 
                               System.out.println("hi...");
                                
                             else 
                                int error = result.getFailure();
                                System.out.println(error);
                            

            
           catch(Exception e)
           
               System.out.println(e);
           
    
    public static void main(String ar[])
    
        new Test().sendNotification();


    


我收到以下错误:

MulticastResult(multicast_id=7574342191790679138,total=1,success=0,failure=1,canonical_ids=0,结果: [[错误代码=未注册]]

之前发布了类似的问题,但我没有找到任何令人满意的答案。

【问题讨论】:

GCM 'Error : Not Registered'的可能重复 未注册一般表示您使用的令牌(设备id)无效。您应该丢弃它并生成另一个。 【参考方案1】:

您在devicesList 中提供的设备的注册 ID 未在 gcm 中注册。您首先需要在 gcm 中注册您的设备以获得有效的 RegistrationId。获取此 RegId 后,您将其传递给那么,只有你的服务器可以通过 GCM 推送通知。

【讨论】:

以上是关于使用 GCM 发送推送消息时,错误代码“notRegistered”是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 GCM 在 Android 中解析或实际获取推送消息

将GCM令牌用于FCM中的推送消息

使用亚马逊 sns 未收到 GCM 推送

GCM 错误代码

为啥 GCM 不在 android 设备中提供推送通知?

发送 GCM 上游消息后收到空推送消息