gcm

24
GCM [email protected] 허광남

Upload: kenu-heo

Post on 16-May-2015

970 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Gcm

[email protected]

허광남

Page 2: Gcm

agenda

• 사전 준비

• GCM 기능

• 아키텍처• 클라이언트• 써드파티 서버 모듈

Page 3: Gcm

GCM

• Google Cloud Message

• 서버가 디바이스 호출

Page 4: Gcm

사전 준비

• https://code.google.com/apis/console

• API 프로젝트 생성

Page 5: Gcm

Sender ID

• Project Number

Page 6: Gcm

Service ON

• Google Cloud Messaging for Android

Page 7: Gcm

Key for server apps

Page 8: Gcm

Android Library

Page 9: Gcm

gcm-server.jar

Page 10: Gcm

주요 기능

• 간단 메시지

• 서버에서 디바이스로 전송; 일방향

• 대용량 콘텐츠 필요시 서버에 다시 접속

• 순서나 트랜잭션 무보장

Page 11: Gcm

클라이언트

• 프로세스 살아있을 필요 없음

• 인텐트 브로드캐스트 이용해서 앱 실행

• 매니페스트에 브로드캐스트 미리 설정

Page 12: Gcm

요구 조건

• 안드로이드 2.2 이상 필수 조건

• 구글 플레이 스토어 앱 설치

• 구글 계정 설정

• 안드로이드 4.0.4 이상은 예외

Page 13: Gcm

아키텍처

• 컴포넌트(Component)

• 자격증명(Credentials)

Page 14: Gcm

컴포넌트

• 안드로이드 디바이스

• 써드파티 애플리케이션 서버

• GCM 서버

Page 15: Gcm

자격증명• Sender ID

• App ID ; 패키지명

• 등록 ID ; 특정 디바이스에서 구동되는 특정 앱 구분

• 구글 사용자 계정; 4.0.4 미만

• Sender AuthToken; 써드파티 서버 보관, API키

Page 16: Gcm

Lifecycle

• GCM 활성화 > 메시지 보내기 > 메시지 받기

Page 17: Gcm

앱 만들기

• 매니페스트 파일 수정

• 자바 코드 구현

Page 18: Gcm

매니페스트 파일 작성<manifest ...>

<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="16"/> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.GET_ACCOUNTS" /> <uses-permission android:name="android.permission.WAKE_LOCK" />

<permission android:name="com.google.android.gcm.demo.app.permission.C2D_MESSAGE" android:protectionLevel="signature" /> <uses-permission android:name="com.google.android.gcm.demo.app.permission.C2D_MESSAGE"/> <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />

<application ...> <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.google.android.gcm.demo.app" /> </intent-filter> </receiver> <service android:name=".GCMIntentService" /> </application></manifest>

Page 19: Gcm

GCM 등록 static boolean register(final Context context, final String regId) { String serverUrl = SERVER_URL + "/register"; Map<String, String> params = new HashMap<String, String>(); params.put("regId", regId); long backoff = BACKOFF_MILLI_SECONDS + random.nextInt(1000); for (int i = 1; i <= MAX_ATTEMPTS; i++) { Log.d(TAG, "Attempt #" + i + " to register"); try { displayMessage(context, context.getString( R.string.server_registering, i, MAX_ATTEMPTS)); post(serverUrl, params); GCMRegistrar.setRegisteredOnServer(context, true); String message = context.getString(R.string.server_registered); CommonUtilities.displayMessage(context, message); return true; } catch (IOException e) {

Page 20: Gcm

등록 결과 메시지 처리

private final BroadcastReceiver mHandleMessageReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { String newMessage = intent.getExtras().getString(EXTRA_MESSAGE); mDisplay.append(newMessage + "\n"); }};

Page 21: Gcm

수신 메시지 처리

public class GCMIntentService extends GCMBaseIntentService { @Override protected void onMessage(Context context, Intent intent) { String message = getString(R.string.gcm_message); displayMessage(context, message); // notifies user generateNotification(context, message); }...}

Page 22: Gcm

써드파티 서버

• 클라이언트 통신

• GCM 서버에 요청

• 클라이언트 요청 처리

• GCM 서버 실패 재요청

• API키와 클라이언트 등록 아이디 저장

Page 23: Gcm

diff C2DM GCM

• 메시지 크기 : 1kb → 4kb

• 서비스 신청 : Mail → 웹설정 On

• 인증 : AuthToken → API key

• 전송 횟수 제한 없어짐

• GCM요청에 JSON 추가

• 4.0.4 이상 구글 계정 없어도 가능

Page 24: Gcm

참고

• 안드로이드 프로그래밍의 모든 것, 김지훈 외, 2013, 에이콘, 32장 GCM 서비스