<permission android:name="앱패키지명.permission.C2D_MESSAGE" android:protectionLevel="signature" />
<uses-permission android:name="앱패키지명.permission.C2D_MESSAGE" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<uses-permission android:name="com.google.android.c2dm.permission.SEND" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<application
android:name=".LoginInfo"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<!-- 알림 서비스(시작) -->
<receiver android:name=".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="앱패키지명"/>
</intent-filter>
</receiver>
<service android:name=".GCMIntentService" />
<!-- 알림 서비스(끝) -->
</application>
=====================================================================
[TestActivity.java]
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.test);
context = TestActivity.this;
GCMRegistrar.checkDevice(context);
GCMRegistrar.checkManifest(context);
final String strPushId = GCMRegistrar.getRegistrationId(context); // GCM ID 가져오기
if(strPushId.equals("")){
// 할당받은 GCM ID가 없으면 신규로 받음
GCMRegistrar.register(context, "GCM등록으로 발급받은 PROJECT ID");
}
}
...(중략)....
@Override
public void onDestroy() {
super.onDestroy();
GCMRegistrar.unregister(context);
}
=====================================================================
[GCMIntentService.java]
public GCMIntentService() {
super("GCM등록으로 발급받은 PROJECT ID");
}
@Override
protected void onError(Context arg0, String arg1) {
Log.d("GCM", "onError");
}
@Override
protected void onMessage(Context arg0, Intent arg1) {
Log.d("GCM", "onMessage");
}
/**
* GCM에 정상적으로 등록되었을 경우 발생하는 메서드
*/
@Override
protected void onRegistered(Context context, String regid) {
Log.d("GCM", "onRegistered : " + regid);
// 여기서 써드파티 서버 (제가 소유한 서버)에 regid 전달하는 코드 삽입.
}
=====================================================================
[GCMBroadcastReceiver.java]
@Override
public void onReceive(Context context, Intent intent) {
Log.d("GCMBroadcastReceiver", "onReceive");
}
=====================================================================
별 문제없어 보이는 소스코드인데.. 이틀째 앓고 있습니다..;;
11-16 01:37:36.671: D/GCMRegistrar(16522): resetting backoff for kr.co.wlv.m.doubleu
11-16 01:37:36.671: V/GCMRegistrar(16522): Registering app 앱패키지명 of senders 113290292212
11-16 01:37:37.722: D/GCMBroadcastReceiver(16522): onReceive
GCM 관련된 로그를 확인해봐도 위에서 보이듯 GCM 패키지 내에서 찍어주는 로그만 확인될뿐..
제 소스코드에 작성된 로그는 죽었다 깨어나도 노출되지 않으니.. 대략 낭패입니다..
세번째 줄 로그는
public void onReceive(Context context, Intent intent)
요녀석 내부에 작성한 로그인데.. 이게 호출되는건 또 뭔지..
이건 구글 서버로 부터 푸싱 메세지가 도착한 경우에 캐치하는 리시버가 아니던가요..
GCMRegistrar.register(context, "GCM등록으로 발급받은 PROJECT ID");
요녀석을 호출하면 당연히~
protected void onRegistered(Context context, String regid)
요녀석이 호출되어야 할거인데~~
그리고 혹시나 오류라도 발생했다치면
protected void onError(Context arg0, String arg1)
요녀석이라도 호출하면 조금이라도 속이 시원했을텐데~~~
몇번이고 확인해보고 확인해봐도.. 빠진 코드가 없는거 같은데~~ 당췌~~ 저에게 이런 시련을 주시는거인지~~~ ㅠㅠㅠ
혹시나 뭔가 설정이 잘못됐나 싶어서..
https://code.google.com/apis/console/b/0/#project:발급받은PROJECTID
요기드가서 확인해봤더니~
Overview > Project ID 필드 영역에 Regist 어쩌고 라는 링크가 떠있길래 아이디 마~구~ 작성해서~ 생성까지하고
Services > 중간쯤 뵈는 Google Cloud Messaging for Android > 이미 ON했었으나~ 요녀석 ON 되있나 확인도 해보고~
API Access > 요기가서 생성된 녀석들을 오른쪽에 있는 'Delete key..' 눌러서 다 삭제해버리고~
'Create new Server key..', 'Create new Browser key...' 둘다 눌러서 재생성해보기도 해보고..
그 외에도 구글링 해가면서 이짓 저짓 다 해봤지만... 결과는 OTL...
아~ 미챠버리겠네요~~~~ ㅠㅠㅠ
도움 부탁드려요~ ㅠ
자답입니다...
<receiver android:name=".GCMBroadcastReceiver" android:permission="com.google.android.c2dm.permission.SEND">
이부분이 잘못된거였네요..
<receiver android:name="com.google.android.gcm.GCMBroadcastReceiver" android:permission="com.google.android.c2dm.permission.SEND">
빨간 부분 추가하셔야 합니다...
돌아다니는 예제 상에는 저 부분이 없었는데.. 구글 측 가이드를 꼼꼼히 살펴본 결과 찾았네요 ㅠ
혹시나 예제를 그대로 카피해서 사용하시는 분들.. 조심 또 조심..
저처럼 삽질하는 분들이 없으시길..
GCMBroadcastReceiver.java 는 기존 라이브러리 안에 있는 자바파일을 말씀하긴거면..
그 파일에 있는 receivere는 모든 푸쉬되는 메시지를 라이브러리 안에있는 저 receiver에서 받아서
intentservice로 다시 보내서 그걸 GCMIntentService.java 에서 받을수 있게 되어있습니다.
그래서 registered에 대한건 onRegistered로 들어오고
push message에 대한건 onMessage로 들어오게 됩니다.