GCM
kenu@okjsp.pe.kr
허광남
agenda
• 사전 준비
• GCM 기능
• 아키텍처
• 클라이언트
• 써드파티 서버 모듈
GCM
• Google Cloud Message
• 서버가 디바이스 호출
사전 준비
• https://code.google.com/apis/console
• API 프로젝트 생성
Sender ID
• Project Number
Service ON
• Google Cloud Messaging for Android
Key for server apps
Android Library
gcm-server.jar
주요 기능
• 간단 메시지
• 서버에서 디바이스로 전송; 일방향
• 대용량 콘텐츠 필요시 서버에 다시 접속
• 순서나 트랜잭션 무보장
클라이언트
• 프로세스 살아있을 필요 없음
• 인텐트 브로드캐스트 이용해서 앱 실행
• 매니페스트에 브로드캐스트 미리 설정
요구 조건
• 안드로이드 2.2 이상 필수 조건
• 구글 플레이 스토어 앱 설치
• 구글 계정 설정
• 안드로이드 4.0.4 이상은 예외
아키텍처
• 컴포넌트(Component)
• 자격증명(Credentials)
컴포넌트
• 안드로이드 디바이스
• 써드파티 애플리케이션 서버
• GCM 서버
자격증명
• Sender ID
• App ID ; 패키지명
• 등록 ID ;
특정 디바이스에서 구동되는 특정 앱 구분
• 구글 사용자 계정; 4.0.4 미만
• Sender AuthToken;
써드파티 서버 보관,API키
Lifecycle
• 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>
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) {
등록 결과 메시지 처리
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");
}
};
수신 메시지 처리
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);
}
...
}
써드파티 서버
• 클라이언트 통신
• GCM 서버에 요청
• 클라이언트 요청 처리
• GCM 서버 실패 재요청
• API키와 클라이언트 등록 아이디 저장
diff C2DM GCM
• 메시지 크기 : 1kb → 4kb
• 서비스 신청 : Mail → 웹설정 On
• 인증 :AuthToken → API key
• 전송 횟수 제한 없어짐
• GCM요청에 JSON 추가
• 4.0.4 이상 구글 계정 없어도 가능
참고
• 안드로이드 프로그래밍의 모든 것, 김지훈 외,
2013, 에이콘, 32장 GCM 서비스

More Related Content

PPTX
서버 푸쉬 (c#)
PDF
Android Google Cloud Message 설정
PPTX
Android xml parsing
PDF
Naver속도의, 속도에 의한, 속도를 위한 몽고DB (네이버 컨텐츠검색과 몽고DB) [Naver]
PPT
구글의 분산스토리지
PDF
pg_hba.conf 이야기
PDF
닷넷프레임워크에서 Redis 사용하기
PPTX
Mongodb 관리
서버 푸쉬 (c#)
Android Google Cloud Message 설정
Android xml parsing
Naver속도의, 속도에 의한, 속도를 위한 몽고DB (네이버 컨텐츠검색과 몽고DB) [Naver]
구글의 분산스토리지
pg_hba.conf 이야기
닷넷프레임워크에서 Redis 사용하기
Mongodb 관리

What's hot (20)

PPTX
Airflow를 이용한 데이터 Workflow 관리
PPTX
HTTP 완벽 가이드 / 20장 리다이렉션과 부하균형
PPTX
실무로 배우는 시스템 성능 최적화 - 4부. 프로세스 이해하기
PPTX
.Net conf 2019 Korea_ ASP.NET Core를 통한 HealthCheck 서비스 구현
PPTX
Redis data design by usecase
PPTX
What is the meteor?
PDF
.NET에서 비동기 프로그래밍 배우기
PPTX
Mongo DB 성능최적화 전략
PDF
MongoDB 모바일 게임 개발에 사용
PDF
Custom DevOps Monitoring System in MelOn (with InfluxDB + Telegraf + Grafana)
PDF
네트워크 공격 실습 보고서
PDF
Prometheus Project Journey
PDF
FIFA 온라인 3의 MongoDB 사용기
PDF
HTTP 완벽가이드- 19장 배포시스템
PDF
C# Game Server
PPTX
Going asynchronous with netty - SOSCON 2015
PPTX
Node Js와 Redis를 사용한 구조화된 데이터
PDF
Performance test
PDF
PDF
Kcjcinema
Airflow를 이용한 데이터 Workflow 관리
HTTP 완벽 가이드 / 20장 리다이렉션과 부하균형
실무로 배우는 시스템 성능 최적화 - 4부. 프로세스 이해하기
.Net conf 2019 Korea_ ASP.NET Core를 통한 HealthCheck 서비스 구현
Redis data design by usecase
What is the meteor?
.NET에서 비동기 프로그래밍 배우기
Mongo DB 성능최적화 전략
MongoDB 모바일 게임 개발에 사용
Custom DevOps Monitoring System in MelOn (with InfluxDB + Telegraf + Grafana)
네트워크 공격 실습 보고서
Prometheus Project Journey
FIFA 온라인 3의 MongoDB 사용기
HTTP 완벽가이드- 19장 배포시스템
C# Game Server
Going asynchronous with netty - SOSCON 2015
Node Js와 Redis를 사용한 구조화된 데이터
Performance test
Kcjcinema
Ad

Viewers also liked (20)

PDF
오픈소스 개발도구 2014
PDF
Eclipse code quality
PDF
Social Dev Trend
PDF
소셜 코딩 GitHub & branch & branch strategy
PDF
Elastic stack
KEY
스마트 디바이스 최근 개발 이슈와 트렌드
PPTX
Jenkins Introduction
PDF
Fun git hub
PDF
"협동조합, 참 좋다" 독후감
PDF
Struts2 start
PDF
무료클라우드호스팅
PDF
전자정부표준프레임워크=오픈소스+Alpha
PDF
[NHN NEXT] Java 강의- Week3
PDF
Developer paradigm shift
PDF
오픈소스 개요
PDF
Mean stack Start
PDF
프로그래머
PDF
Ant, Maven and Jenkins
PDF
Social Coding GitHub 2015
PDF
Eclipse web
오픈소스 개발도구 2014
Eclipse code quality
Social Dev Trend
소셜 코딩 GitHub & branch & branch strategy
Elastic stack
스마트 디바이스 최근 개발 이슈와 트렌드
Jenkins Introduction
Fun git hub
"협동조합, 참 좋다" 독후감
Struts2 start
무료클라우드호스팅
전자정부표준프레임워크=오픈소스+Alpha
[NHN NEXT] Java 강의- Week3
Developer paradigm shift
오픈소스 개요
Mean stack Start
프로그래머
Ant, Maven and Jenkins
Social Coding GitHub 2015
Eclipse web
Ad

Similar to Gcm (20)

PDF
7가지 동시성 모델 람다아키텍처
PPTX
구글 기술을 이용한 모바일 클라우드 애플리케이션 개발
PDF
Create-React-App으로 SSR을 구현하며 배운 점 (feat. TypeScript)
PPTX
TR 069 클라이언트 검토자료 3편
PDF
CloudWatch 성능 모니터링과 신속한 대응을 위한 노하우 - 박선용 솔루션즈 아키텍트:: AWS Cloud Track 3 Gaming
PPTX
Golang Project Guide from A to Z: From Feature Development to Enterprise Appl...
PDF
AWS Greengrass, Lambda and ML Inference at the Edge site (김민성, AWS 솔루션즈 아키텍트)...
PDF
AWS 를 이용한 Serverless Infra 구축해보기 (Lambda, DynamoDB)
PPTX
Node.js and react
PPTX
Android 기초강좌 애플리캐이션 구조
PDF
1st-BE-sideproject-GDGonCampus_KyungHee_Univ.pdf
PDF
[오픈소스컨설팅]파일럿진행예제 on AWS
PPTX
Nest js 101
PDF
Bigdata with Google Cloud
PPTX
C#을 사용한 빠른 툴 개발
PPTX
Python qgis advanced
PDF
ksqlDB로 시작하는 스트림 프로세싱
PPTX
Nodejs, PhantomJS, casperJs, YSlow, expressjs
PDF
[D2 오픈세미나]5.robolectric 안드로이드 테스팅
PDF
Event source 학습 내용 공유
7가지 동시성 모델 람다아키텍처
구글 기술을 이용한 모바일 클라우드 애플리케이션 개발
Create-React-App으로 SSR을 구현하며 배운 점 (feat. TypeScript)
TR 069 클라이언트 검토자료 3편
CloudWatch 성능 모니터링과 신속한 대응을 위한 노하우 - 박선용 솔루션즈 아키텍트:: AWS Cloud Track 3 Gaming
Golang Project Guide from A to Z: From Feature Development to Enterprise Appl...
AWS Greengrass, Lambda and ML Inference at the Edge site (김민성, AWS 솔루션즈 아키텍트)...
AWS 를 이용한 Serverless Infra 구축해보기 (Lambda, DynamoDB)
Node.js and react
Android 기초강좌 애플리캐이션 구조
1st-BE-sideproject-GDGonCampus_KyungHee_Univ.pdf
[오픈소스컨설팅]파일럿진행예제 on AWS
Nest js 101
Bigdata with Google Cloud
C#을 사용한 빠른 툴 개발
Python qgis advanced
ksqlDB로 시작하는 스트림 프로세싱
Nodejs, PhantomJS, casperJs, YSlow, expressjs
[D2 오픈세미나]5.robolectric 안드로이드 테스팅
Event source 학습 내용 공유

More from Kenu, GwangNam Heo (15)

PDF
이클립스 플랫폼
PDF
About Programmer 2021
PDF
채팅 소스부터 Https 주소까지
PDF
Java in 2 hours
PDF
Dev team chronicles
PDF
개발자가 바라보는 자바의 미래 - 2018
PDF
오픈 소스 사용 매뉴얼
PDF
about Programmer 2018
PDF
Cloud developer evolution
PDF
모바일 웹앱 프로그래밍 과정
PDF
JavaScript 2014 프론트엔드 기술 리뷰
PDF
jQuery 구조와 기능
PDF
01이제는 모바일 세상이다
PDF
[JCO 13th] 클라우드 서버를 활용한 서비스 개발 실습 V1.3
PDF
소셜 네트워크 앱 개발
이클립스 플랫폼
About Programmer 2021
채팅 소스부터 Https 주소까지
Java in 2 hours
Dev team chronicles
개발자가 바라보는 자바의 미래 - 2018
오픈 소스 사용 매뉴얼
about Programmer 2018
Cloud developer evolution
모바일 웹앱 프로그래밍 과정
JavaScript 2014 프론트엔드 기술 리뷰
jQuery 구조와 기능
01이제는 모바일 세상이다
[JCO 13th] 클라우드 서버를 활용한 서비스 개발 실습 V1.3
소셜 네트워크 앱 개발

Gcm

  • 2. agenda • 사전 준비 • GCM 기능 • 아키텍처 • 클라이언트 • 써드파티 서버 모듈
  • 3. GCM • Google Cloud Message • 서버가 디바이스 호출
  • 6. Service ON • Google Cloud Messaging for Android
  • 10. 주요 기능 • 간단 메시지 • 서버에서 디바이스로 전송; 일방향 • 대용량 콘텐츠 필요시 서버에 다시 접속 • 순서나 트랜잭션 무보장
  • 11. 클라이언트 • 프로세스 살아있을 필요 없음 • 인텐트 브로드캐스트 이용해서 앱 실행 • 매니페스트에 브로드캐스트 미리 설정
  • 12. 요구 조건 • 안드로이드 2.2 이상 필수 조건 • 구글 플레이 스토어 앱 설치 • 구글 계정 설정 • 안드로이드 4.0.4 이상은 예외
  • 14. 컴포넌트 • 안드로이드 디바이스 • 써드파티 애플리케이션 서버 • GCM 서버
  • 15. 자격증명 • Sender ID • App ID ; 패키지명 • 등록 ID ; 특정 디바이스에서 구동되는 특정 앱 구분 • 구글 사용자 계정; 4.0.4 미만 • Sender AuthToken; 써드파티 서버 보관,API키
  • 16. Lifecycle • GCM 활성화 > 메시지 보내기 > 메시지 받기
  • 17. 앱 만들기 • 매니페스트 파일 수정 • 자바 코드 구현
  • 18. 매니페스트 파일 작성 <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>
  • 19. 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) {
  • 20. 등록 결과 메시지 처리 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"); } };
  • 21. 수신 메시지 처리 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); } ... }
  • 22. 써드파티 서버 • 클라이언트 통신 • GCM 서버에 요청 • 클라이언트 요청 처리 • GCM 서버 실패 재요청 • API키와 클라이언트 등록 아이디 저장
  • 23. diff C2DM GCM • 메시지 크기 : 1kb → 4kb • 서비스 신청 : Mail → 웹설정 On • 인증 :AuthToken → API key • 전송 횟수 제한 없어짐 • GCM요청에 JSON 추가 • 4.0.4 이상 구글 계정 없어도 가능
  • 24. 참고 • 안드로이드 프로그래밍의 모든 것, 김지훈 외, 2013, 에이콘, 32장 GCM 서비스