마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

GCM관련 질문드립니다..

0 추천
안녕하세요. 대학생이며, 어플을 개발하면서 GCM을 같이 써보려구 개발중에 있습니다.

GCM이라는 기능을 사용을 하는데 마음대로 안되어서 질문을 올려봅니다.

google cloude service 에 처음 등록을 하고, regId를 전송받아서 그 regId를 통해 서버에서 어플에 메시지를 전송할 수 있는걸루 대략 알고 있는데요.

문제는 어플을 매번 킬때마다(아예 종료 후)  다시 등록을 시도 하더군요..;;

등록을 하는데도 소스를 보내 random()를 써서 시간이 좀 길고, 그 시간동안 다른 버튼에서 수행해야할 기능이 작동도 안되구요(DB 데이터를 불러와야하는데.. 전혀 안먹더군요)

마땅히 자료조사를 해보았으나, 이런 문제에 대해선 언급이 없어서요..

대략 등록 소스는

if (regId.equals("")) {
            // Automatically registers application on startup.
            GCMRegistrar.register(this, SENDER_ID);
        } else {
            // Device is already registered on GCM, check server.
            if (GCMRegistrar.isRegisteredOnServer(this)) {
                // Skips registration.
                //message.append(getString(R.string.already_registered) + "\n");
            } else {
                // Try to register again, but not in the UI thread.
                // It's also necessary to cancel the thread onDestroy(),
                // hence the use of AsyncTask instead of a raw thread.
                final Context context = this;
                mRegisterTask = new AsyncTask<Void, Void, Void>() {

                    @Override
                    protected Void doInBackground(Void... params) {
                        boolean registered = ServerUtilities.register(context, regId);
                        // At this point all attempts to register with the app
                        // server failed, so we need to unregister the device
                        // from GCM - the app will try to register again when
                        // it is restarted. Note that GCM will send an
                        // unregistered callback upon completion, but
                        // GCMIntentService.onUnregistered() will ignore it.
                        if (!registered) {
                            GCMRegistrar.unregister(context);
                        }
                        return null;
                    }

                    @Override
                    protected void onPostExecute(Void result) {
                        mRegisterTask = null;
                    }

                };
                mRegisterTask.execute(null, null, null);
            }
        }

입니다.

 

Q1. 카톡처럼인지 맞는지 모르겠는데요, 처음에 등록한 후에 종료를 하고 다시 어플을 실행시켜도 등록을 안하는법.

Q2. gcm 등록시간이 너무 긴거 같습니다..; 이 시간을 줄이는 방법이 없을까요?

 

부탁드립니다.
익명사용자 님이 2013년 6월 11일 질문

1개의 답변

+1 추천
1.gcm등록시 주어지는 디바이스 값은 언제 바뀔지 모르는 값입니다.

   거의 바뀌지 않지만 그렇다고 절대 바뀌지 않는 값이라고 할 수는 없습니다.

  그렇기에 등록된 디바이스값인지 확인후 등록되지 않은 경우 다시 등록 하는 방법을 써야 겠지요...

 

2.gcm등록 시간이 길다라??? 구글에서 디바이스 값을 받아오는게 길다는 건가요??

  아니면 서드파티 서버에 디바이스값을 저장 할때 오래 걸린다는 건가요??

  결론 부터 말슴드리면 두가지 사항 모두 오래 걸리지 않습니다. 제경험상 두가지 일 모두 처리하는데 0.5초면 되는거 같은     데요???

오래걸린다면 무언가 다른 이유가 있을 듯 합니다.

만약 고칠수 없는 이유라면 gcm자체는 어플에 미치는 영향이 없으므로 쓰레드를 따로 태우시면 될 듯 합니다.
ThisPlus (46,920 포인트) 님이 2013년 6월 12일 답변
...