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

GCM 키값 받아오질 않습니다.

0 추천

안녕하십니까 

 

GCM 구글콘솔에 다등록해서 했는데 이상하게 아래호출 했는데

onRegistered함수가 호출이 안됩니다. 에러나 다른곳도 아무반응이 없구요 

무엇을 의심하여야하나요 분명히 GCMRegistrar.register(this, GCMIntentService.SEND_ID);은 호출이 댔는데 말이요 ㅜㅜ

 

 

@Override

protected void onRegistered(Context context, String regId) {

 

private void registGCM() {

try {

GCMRegistrar.checkDevice(this);

} catch (Exception e) {

}

 

GCMRegistrar.checkManifest(this);

 

if(mDataManager.getDeviceToken().length()<1){

            final String regId = GCMRegistrar.getRegistrationId(this);

            if(regId.equals("")){

            GCMRegistrar.register(this, GCMIntentService.SEND_ID);

            }else{

            mDataManager.setDeviceToken(regId);

            }

      }

}

흠바바 1 (4,000 포인트) 님이 2014년 10월 28일 질문

2개의 답변

0 추천
매니페스트 파일에 GCM 관련 퍼미션은 넣어주신 건가요?

적어주신 내용을 봐서는 그 부분이 빠졌을 가능성이 제일 높아 보입니다.
cc1232 (35,280 포인트) 님이 2014년 10월 28일 답변
네 퍼미션을 줬어요
  <!-- GCM 관련 퍼미션 -->
    <permission
        android:name="패키지명.permission.C2D_MESSAGE"
        android:protectionLevel="signature" />

    <uses-permission android:name="패키지명.permission.C2D_MESSAGE" />
    <!-- GCM 받기 -->
    <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
    <!-- GCM을 받으려면 구글 계정 필요 -->
    <uses-permission android:name="android.permission.GET_ACCOUNTS" />
    <!-- 메시지 받을 때 wake up 하기 위해 -->
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <!-- 네트워크 접속 권한 -->
    <uses-permission android:name="android.permission.INTERNET" />

 <!-- GCM 리시버 -->
        <receiver
            android:name="com.google.android.gcm.GCMBroadcastReceiver"
            android:permission="com.google.android.c2dm.permission.SEND" >
            <intent-filter>
                <action android:name="com.google.android.c2dm.intent.RECEIVE" />
                <action android:name="com.google.android.c2dm.intent.REGISTRATION" />
                <!-- <category android:name="pe.sbk.gcmsample" />  젤리빈 부터는 category 빼도 된다 -->
            </intent-filter>
            
        </receiver>

        <!-- GCM 리시버에서 돌리는 서비스 -->
        <service android:name="패키지명.GCMIntentService" /> <!-- 서비스명 변경하면 안됨 -->
아까는 대충 봐서 몰랐는데, 예전 방식으로 하고 계시네요.
http://developer.android.com/reference/com/google/android/gcm/GCMRegistrar.html

보시면 나오지만, This class is deprecated.
Please use the GoogleCloudMessaging API instead. 입니다.

전 변경된 API를 사용해서, 지금도 사용하신 방법이 동작하는지 잘 모르겠네요.
변경된 방법으로 해보시는 건 어떨런지요?
0 추천
GCMBaseIntentService 를 상속받은 class가 아닌 다른 class에서
 
.register(this, GCMIntentService.SEND_ID);
 
했을 때 onRegistered 함수가 호출이 됩니다.
까먹지 (3,960 포인트) 님이 2014년 10월 28일 답변
...