안녕하세요.
레퍼런스를 찾아보구, 블로그 뒤저가면서 개발진행중인데, 서버단으로 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 ***************************************************************
답변감사드립니다. ^^
php로 푸시를 보낼건데요..
$headers = array(
'Content-Type:application/json',
'Authorization:key=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'
);
$arr = array();
$arr['data'] = array();
$arr['data']['msg'] = "gcm으로 보낼 메시지를 쓰면 된다.";
$arr['registration_ids'] = array();
$arr['registration_ids'][0] = "디바이스에서 얻어낸 아이디";
빨간영역이
TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
tm.getDeviceId()
registrationId 이게아닌 위의 디바이스 아이디를 말하는 건가요?




너무 어렵게 생각하지 마세요..
레지스터메소드로 레지스트레이션 아이디가 발급이 되었다는걸 GCM서버에서 메시지를 던져주면
그 메시지를 onRegistered메소드에서 받을수 있는겁니다.
직접 호출하시는것이 아니에요.
C2DM과는 다르게 서비스 자체가 메시지 종류 별로 구분이 되어 들어오게 된겁니다.