2012-11-18 4 views
4

Android에서 GCM에 문제가 있습니다. 내 테스트 장치 (Droid2) 중 하나에서 onRegistered() 콜백을 실행하지 못하거나 좋은 regId를 반환하지 못합니다.하지만 다른 장치 (Galaxy Nexus)에서 제대로 작동합니다.GCM Android : onRegistered()가 호출되지 않음

기본 예인 here을 따르고 있습니다.

GCMRegistrar.checkDevice(this); 
GCMRegistrar.checkManifest(this); 

final String regId = GCMRegistrar.getRegistrationId(this); 

if (regId.equals("")) 
    GCMRegistrar.register(this, Constants.SENDER_ID); 
else 
    Log.v(TAG, "Already registered"); 

그리고 내 매니페스트이 있습니다 : 호출자는 다음과 같습니다

<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> 
<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.GET_ACCOUNTS" /> 
<uses-permission android:name="android.permission.WAKE_LOCK" /> 

와 왜 onRegistered() 콜백이 작동하지

<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="com.gcl.myapp" /> 
    </intent-filter> 
</receiver> 

? 그리고 한 장치에서 작동하지만 다른 장치에서는 작동하지 않을 수 있습니다. ?? 감사. 그것은 일부 장치에서 작동하지만 다른 사람들이 다음 다음 중 하나를 수행하는 경우

답변

5

는 :

사전 안드로이드 장치를 4.0.4
  • 이 작동하려면 유효한 구글 계정이 필요합니다.
  • GCM은 Play 스토어 앱 및 API 8 이상이 설치된 기기에서만 작동합니다.
  • 매니페스트의 형식이 잘못되었습니다. 린트를 사용하여 확인하십시오!
  • Device/App이 이미 등록되어 있으므로 Play 구현이 다시 돌아 오지 않을 수 있습니다. 먼저 GCMRegistrar.unregister(this);을 시도해보십시오.

희망 하시겠습니까?

+0

감사합니다. @ Chris.Jenkins. 작동하지 않는 기기는 Android 2.3.4 (API 레벨 10)를 실행 중입니다. 유효한 고글 계정과 함께 Play 스토어가 설치되었습니다. 하지만 다른/작업중인 기기와 동일한 Google ID를 사용합니다. 그게 문제가 될 수 있습니까? – gcl1

+0

Reg ID는 기기/앱과 관련이 없습니다. Humm, 그 수표에 FC가 아니라면. 그렇다면 매우 이상합니다. GCM이 해당 기기에서 작동하지 않는다고 가정 할 수 있습니까? 동기화가 켜져 있습니까? –

+0

또한 GCM이 이전 기기의 일부 (Droid2)에서 부분적으로 작동하고있었습니다. 그 당시, onRegistered() 호출은 결코 반환되지 않았지만 ... GCMRegistrar.register() 호출은 응용 프로그램에서 사용할 수있는 좋은 regId를 생성했습니다. 나는 무엇이 바뀌 었는지 모르겠지만 GCMRegistrar.register()와 onRegistered() 콜백 모두 작동하지 않습니다. – gcl1

0

같은 문제가있었습니다. AngularJS + IonicFramework를 사용하는 경우 다음 작업을 수행 할 필요가 없습니다.

onDeviceReady 함수를 사용하여 팩토리를 만든 후 onNotificationGCM 함수를 만듭니다. 다음과 같이 입력하십시오 :

app.factory('PushProcessingService', function() { 
.. 

}); 

function onNotificationGCM(e) { 
} 

내 공장에서는 onNotificationGCM을 생성하고있었습니다. 이것은 내 문제를 해결합니다.

관련 문제