반응형
http://developer.android.com/guide/google/gcm/gs.html
GCM 사용을 원리부터 이해해서 하려면, 많은 작업이 필요합니다. GCMRegistrar 과 Sender class 들이 각각 client 와 server 에서 사용하기 좋게 기능들을 wrapping 해놓은 녀석입니다. 적당히 low level 에서 직접 다 control 하고 싶다면, 다음 글을 참조하시면 되겠습니다. GCM 개발 시작을 위한 준비동작은 동일하며, 구현 코드부만 다르다고 보시면 되겠습니다. ( 사실 전문적으로 하려면 아래 글을 먼저 읽으셔야 합니다. )
GCM 개발 시작을 위한 준비동작
1. Google API project 생성
https://code.google.com/apis/console
2. GCM service enable.
3. Server용 API key 얻기
4. Helper library 설치.
2. GCM service enable.
3. Server용 API key 얻기
4. Helper library 설치.
클라이언트 사이드 앱 개발
1. library 연결
- ../android-sdks/extras/google/gcm-client/dist 에 있는 gcm.jar 를 project 의 /libs 폴더에 복사
- gcm.jar 파일을 build path 에 추가
2. Manifest 수정
- Android 2.2 ( API Level 8 ) 이상부터 지원되기 때문에 아래 문구 추가.
- permission 추가 ( GCM Message 를 이 앱이 받기 위해서.. )
참고로, 이 permission 은 Android 4.1 Jelly Bean ( API Level 16 ) 이상부터는 필요 없다.
- 메세지를 받기 위한 추가 permission 추가
- broadcast receiver 등록 ( GCM message 가 도착하면 이 broadcast 를 부른다. )
- IntentService 등록
이 service 는 GCM library 에 잇는 GCMBroadcastReceiver 에 의해 호출된다.
3. my_app_package.GCMIntentService class 구현하기.
4. Main Activity 구현하기.
- onCreate() 에 다음의 내용이 들어가야 한다.
2. Manifest 수정
- Android 2.2 ( API Level 8 ) 이상부터 지원되기 때문에 아래 문구 추가.
<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="xx"/>
- permission 추가 ( GCM Message 를 이 앱이 받기 위해서.. )
<permission android:name="my_app_package.permission.C2D_MESSAGE" android:protectionLevel="signature" />
<uses-permission android:name="my_app_package.permission.C2D_MESSAGE" />
- 메세지를 받기 위한 추가 permission 추가
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
- broadcast receiver 등록 ( GCM message 가 도착하면 이 broadcast 를 부른다. )
<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="my_app_package" />
</intent-filter>
</receiver>
- IntentService 등록
<service android:name=".GCMIntentService" />
3. my_app_package.GCMIntentService class 구현하기.
- onRegistered(Context context, String regId)
- onUnregistered(Context context, String regId)
- onMessage(Context context, Intent intent)
- onError(Context context, String errorId)
- onRecoverableError(Context context, String errorId)
4. Main Activity 구현하기.
- onCreate() 에 다음의 내용이 들어가야 한다.
GCMRegistrar.checkDevice(this);
GCMRegistrar.checkManifest(this);
final String regId = GCMRegistrar.getRegistrationId(this);
if (regId.equals("")) {
GCMRegistrar.register(this, SENDER_ID);
} else {
Log.v(TAG, "Already registered");
}
- checkDevice() 는 단말이 GCM 을 지원하는지를 알려준다.( 미지원시 exception )
- checkManifest() 는 manifest 에 permission 등의 설정 및 component 등록이 제대로 되어있는지를 확인한다. ( 개발시에만 필요하다. )
- SENDER_ID 는 google api project id 가 들어간다. 해당 google api project 가 보내는 message 를 수신하겠다는 의도이다.서버 사이드 앱 개발
1. gcm-server/dist/gcm-server.jar 를 project 의 libs 폴더에 복사하고, build path 에 추가
2. GCM으로부터 받은 registration ID 를 전달받는 servlet 작성. registration ID 와 device 를 link 시켜야 한다.
3. registration ID 를 unregister 할 수 있는 servlet 생성
4. server 가 메세지를 보낼 때에는 com.google.android.gcm.server.Sender class 를 통해서 한다.
Sender sender = new Sender(myApiKey);
Message message = new Message.Builder(regId).build();
Result result = sender.send(message, 5);
Result를 통해서 결과를 얻을 수 있다.
if (result.getMessageId() != null) {
String canonicalRegId = result.getCanonicalRegistrationId();
if (canonicalRegId != null) {
// same device has more than on registration ID: update database
}
} else {
String error = result.getErrorCodeName();
if (error.equals(Constants.ERROR_NOT_REGISTERED)) {
// application has been removed from device - unregister database
}
}
반응형
댓글