안녕하세요.
어제 질문을 올렸지만 다시 올립니다. (답변을 달아주신 모든 분들께 감사를 표합니다. 꾸벅)
메인실행시 "요청"이란 토스트 메시지가 뜹니다.
그 아래의 gcmDataMAnager.setContactList 가 호출되면 서버에 기록을 남깁니다.
자료를 찾아본 결과 registrationId 아이디가 없다면, 구글서버로 아이디를 요청하고, 구글 서버에서 GCMIntentService 를 통하여 onRegistered() 메소드를 통하여 registrationId 를 받는다고 알고있고, 받는동시나 GCMIntentService 의 어떤 메소드가 호출이 되더라도 내용이 서버에 저장 되게끔 구현을 하였습니다..........
그런데 GCMIntentService 의 어떤 메소드도 호출이 안되는것 같습니다........ ㅜㅜ
방법이 있을까요?
시간은 촉박한데, 몇일째 제자리 걸음 입니다........ 도와주세요.... ㅜㅜ
메니페스트에 추가된 사항도 올렸습니다....
좋은하루 되시구요, 답변 부탁 드리겠습니다.
감사합니다.
MainActivity ************************************************
GCMRegistrar.checkDevice(this);
GCMRegistrar.checkManifest(this);
final String regId = GCMRegistrar.getRegistrationId(this);
if(regId.equals("")){
GCMRegistrar.register(this, StringLib.STRING_GCM_KEY);
Toast.makeText(getApplicationContext(), "요청", Toast.LENGTH_SHORT).show(); // 실행이 됩니다.
}else{
Toast.makeText(getApplicationContext(), "실패???", Toast.LENGTH_SHORT).show();
}
MainActivity ************************************************
public class GCMIntentService extends GCMBaseIntentService{
public GCMIntentService() {
super(StringLib.STRING_GCM_KEY);
}
@Override
protected void onRegistered(Context context, String registrationId) {
TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
GCMDataManagerJson gcmDataMAnager = new GCMDataManagerJson();
gcmDataMAnager.setContactList(registrationId,tm.getLine1Number()); // 서버에 저장
}
@Override
protected void onUnregistered(Context context, String str) {
GCMDataManagerJson gcmDataMAnager = new GCMDataManagerJson();
gcmDataMAnager.setContactList(str+" : ","onUnregistered"); // 서버에 저장
}
@Override
protected void onMessage(Context context, Intent intent) {
GCMDataManagerJson gcmDataMAnager = new GCMDataManagerJson();
gcmDataMAnager.setContactList(intent.getStringExtra("message")+" : ","onMessage"); // 서버에 저장
}
@Override
protected void onError(Context context, String errorId) {
GCMDataManagerJson gcmDataMAnager = new GCMDataManagerJson();
gcmDataMAnager.setContactList(errorId+" : ","onError"); // 서버에 저장
}
@Override
protected boolean onRecoverableError(Context context, String errorId) {
GCMDataManagerJson gcmDataMAnager = new GCMDataManagerJson();
gcmDataMAnager.setContactList(errorId+" : ","onRecoverableError"); // 서버에 저장
return super.onRecoverableError(context, errorId);
}
}
메니페스트 *******************************************
<uses-sdk android:minSdkVersion="8" />
<permission android:name="패키지.permission.C2D_MESSAGE" android:protectionLevel="signature" />
<uses-permission android:name="패키지.permission.C2D_MESSAGE" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<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="com.yanolja.mobile.date.app" />
</intent-filter>
</receiver>
<service android:name=".GCMIntentService" />
다른 권한이 더 필요한건 가요???
메니페스트 *******************************************
*******************************************************************************************************
***************************************** 어제 올린질문 ************************************************
*******************************************************************************************************
안녕하세요.
레퍼런스를 찾아보구, 블로그 뒤저가면서 개발진행중인데, 서버단으로 registrationId 를 저장하려고 합니다......
C2DM 으로는 경험이 있는데요...... GCM으로 하려니 잘 안풀립니다.
삼일째 제자리 걸음입니다...... ㅜㅜ
메인에서 GCMRegistrar.register(this, StringLib.STRING_GCM_KEY); 호출로
GCMBroadcastReceiver 가 실행이 되어 // registrationId 아이디 서버에 저장 영역까지 호출이 되는것은 확인 되었습니다.
registrationId 는 GCMIntentService 에서 생성이 된다고 참고사이트에서 봤구요.....
protected void onRegistered(Context context, String registrationId) {
Toast.makeText(context, "1 : "+ registrationId, Toast.LENGTH_LONG).show();
}
위의 영역에 서버에 단말기 아이디를 저장하면 될것 같다는 생각이 드는데요.
GCMIntentService .onRegistered() 을 어떻게 호출하는지 도저히 모르겠습니다..
아니면 다른 방법이 있나요?
참고가 될만한 사이트 URL도 좋구요..... 조언을 해주셔도 좋습니다......
이번주안에 개발 완료해야하는데, 푸시기능에서 막히니 진도가 안나가네요.... ㅜㅜ
좋은하루 되시구요, 답변 부탁 드리겠습니다.
감사합니다.
MainActivity ******************************************************************
..........................
try {
GCMRegistrar.checkDevice(this);
GCMRegistrar.checkManifest(this);
final String regId = GCMRegistrar.getRegistrationId(this);
if(regId.equals("")){
GCMRegistrar.register(this, StringLib.STRING_GCM_KEY);
}else{
Toast.makeText(getApplicationContext(), "실패???", Toast.LENGTH_SHORT).show();
}
} catch (Exception e) {
..........................
MainActivity ******************************************************************
GCMBroadcastReceiver **********************************************************
public class GCMBroadcastReceiver extends BroadcastReceiver{
static String registration_id = null;
static String c2dm_msg = "";
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals("com.google.android.c2dm.intent.REGISTRATION")) {
// registrationId 아이디 서버에 저장
} else if (intent.getAction().equals("com.google.android.c2dm.intent.RECEIVE")) {
// 알림서비스를 제공
}
}
}
GCMBroadcastReceiver **********************************************************
GCMIntentService ***************************************************************
public class GCMIntentService extends GCMBaseIntentService{
private static final String TAG = "===GCMIntentService===";
public GCMIntentService() {
super(StringLib.STRING_GCM_KEY);
}
@Override
protected void onRegistered(Context context, String registrationId) {
Toast.makeText(context, "1 : "+ registrationId, Toast.LENGTH_LONG).show();
}
@Override
protected void onUnregistered(Context context, String str) {
Toast.makeText(context, "2 : "+ str, Toast.LENGTH_LONG).show();
}
@Override
protected void onMessage(Context context, Intent intent) {
}
@Override
protected void onError(Context context, String errorId) {
Toast.makeText(context, "4 "+ errorId, Toast.LENGTH_LONG).show();
}
@Override
protected boolean onRecoverableError(Context context, String errorId) {
return super.onRecoverableError(context, errorId);
}
}
GCMIntentService ***************************************************************




<receiver
android:name=".GCMBroadcastReceiver"
이부분
android:name="com.google.android.gcm.GCMBroadcastReceiver"
로 바까 보세요.