Android Studio GCM 注册 id 显示为空

Posted

技术标签:

【中文标题】Android Studio GCM 注册 id 显示为空【英文标题】:Android Studio GCM Registration id shows null 【发布时间】:2015-08-14 04:44:01 【问题描述】:

创建项目并从https://developers.google.com/cloud-messaging/android/start获取服务器api密钥和发件人ID。并使用以下代码生成注册ID

GoogleCloudMessaging gcm;
String   SENDER_ID = "mysenderid";
String Reg_id;
Context context;
EditText firstNumber;
@Override

protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Reg_id=registerGCM();

public String registerGCM()

    String regid=null;
    try 

        firstNumber = (EditText)findViewById(R.id.regisid_1);
        context = getApplicationContext();
        gcm = GoogleCloudMessaging.getInstance(context);
        regid = gcm.register(SENDER_ID);
        firstNumber.setText(regid);
    
    catch(Exception ae)
    

    
    return regid;

但执行代码后,regid 显示为空。

【问题讨论】:

可能有异常。尝试在你的 catch 块中打印异常堆栈跟踪.. result = String@3816 "java.io.IOException: MAIN_THREAD" count = 32 hashCode = 0 offset = 0 value = char[41]@3817 shadow$_klass_ = Class@第3428章它的节目是这样的 通过查看您的代码,我认为它是NetworkOnMainThreadException。请通过编辑您的问题发​​布完整的logcat 其实我只添加了这些代码。在设计中单独添加了一个 EditText 来显示注册 ID。使用安卓模拟器。我必须连接手机吗? 先阅读本文developers.google.com/cloud-messaging/android/client 【参考方案1】:

如果 gcm id 为 null,请尝试启动后台任务并获取 id。检查以​​下代码

private void registerInBackground()  
        new AsyncTask() 
            @Override 
            protected String doInBackground(Object[] params) 
                String msg = "";
                try  
                    if (gcm == null)  
                        gcm = GoogleCloudMessaging.getInstance(context);
                     
                    regid = gcm.register(SENDER_ID); 
                    msg = "Device registered, registration ID=" + regid;


                    sendRegistrationIdToBackend(); 


                    // Persist the regID - no need to register again. 
                    storeRegistrationId(context, regid); 
                 catch (IOException ex) 
                    msg = "Error :" + ex.getMessage();


                 
                return msg;
             

            @Override 
            protected void onPostExecute(Object msg) 
//                mDisplay.append(msg + "\n"); 

             
        .execute(null, null, null);
     

【讨论】:

谢谢,但如何在 MainActivity onCreate 中调用它? 从你的 oncreate 调用这个方法--- registerInBackground()

以上是关于Android Studio GCM 注册 id 显示为空的主要内容,如果未能解决你的问题,请参考以下文章

GCM 响应是无效的 Android 应用注册 ID

为啥 GCM 会为某些 android 设备返回空的注册 ID?

android GCM注册ID最大长度

我无法从Android GCM获取注册ID

Android GCM:GCMRegistrar 提供空的注册 ID

android中两个应用程序的相同GCM注册ID?