'gcm'에 해당되는 글 2건

  1. 2017.04.01 구글 firebase는 무엇인가? 제공하는 기능은? 1
  2. 2013.03.11 [android] GCM을 이용해서 push 구현및 browser로 동작하는 방법 5

구글 firebase는 무엇인가? 제공하는 기능은?

android 2017. 4. 1. 01:38

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

2016년에 출시된 구글의 firebase에 대해서 알아 보자. 

firebase는 앱개발을 할때 필요한 도구와 인프라를 제공하기 위해서 구글에서 만들었다. 



초창기 안드로이드앱은 서버와 연동 없어 혼자 동작하는 기능의 앱이 많았다면, 요즘에는 앱혼자 동작하기 보다는 서버에서 데이터를 받아서 연동는 기능이 거의 필수처럼 구현되고 있는 상태이다. 그래서 구글에서는 앱개발자가 앱개발에만 전념할수 있도록 앱개발 이외의 모든것을 제공하기 위해서 firebase라는 이름으로 제공하고 있다. 

그럼 firebase에서 제공하는 것들은 어떤 것이 있는지 대략적으로 알아보자. 



이미지출처 : https://firebase.google.com/




위의 그림에서 보듯이, 크게 3가지의 카테고리로 제공하고 있다. 

구글에서 firebase를 사용하면 고품질의 앱을 빠르게 개발하고, 사용자층을 확대하고, 더많은 수익을 창출할 수 있는 모바일 플랫폼으로 설명하고 있다. 

이중에서 개발에 관련된것 위주로 간략하게 살펴보자. 



* Realtime Database 

 - On-line으로 제공되는 NoSQL DB 이다. 오프라인 모드를 지원하는 특징이 있다. 

 - 앱에서 하나의 DB를 보게되므로 여러 사용자에게 동기화된 데이터를 제공 가능하다. 

 - 리얼타임 데이터베이스를 사용하면 계시판등을 쉽게 만들수 있을것 같다. 



* Authentication

 - 로그인등의 인증을 제공하는데, Firebase에서제공하는 UI인증을 사용할수도 있고, 

 - Firebase SDK를 사용해서 로직 처리만 사용할 수도 있다. 

 - googke, facebook, twitter, github 와 제휴되어서 각각의 계정으로 로그인 인증을 제공한다. 

 


* Cloud Messaging 

 - 기존의 GCM(Google Cloud Messaging)이 FCM(Firebase Cloud Messaging)으로 이름이 변경된 것이다. 

 - 기존 push와 같은 알림메시지 뿐만이 아니라 데이터 메시지가 추가되었다. 

 - 메시지 전송시에도 기기별, 그룹별, 주제별로 타게팅 해서 보낼수 있다. 



* Storage 

 - 사용자의 사진, 동영상등의 컨텐츠를 저장할 수 있는 공간을 제공한다. 

 - 구글 클라우드 스토리지(Google Cloud Storage) 이다. 



* Hosting 

 - 웹 컨텐츠 호스팅 서비스로, global CDN을 제공한다.  

 - SSL을 기본적으로 제공한다. 

 - 앱개발보다는 웹개발에 적합한 도구로 보인다. 



* Remote Config 

 - 앱 업데이트 없이 어떤 변경을 동적으로 하고 싶을때 사용한다. 

 - GTM(Google Tag Manager)와 같은 방식으로 동작한다. 

 - 예를 들면, theme="white" 로 하면 앱의 전체적인 테마가 white계열로 보이다가, theme="black"으로 설정을 변경하면 앱이 black 계열로 변경되게 하는 것이다. 



* TestLab 

 - 일종의 AB테스트를 지원하는 기능이다. 

 - 예를 들으서 새로운 기능을 출시 할때, 전체 사용자가 아니라 일부 사용자에게만 시범적으로 먼저 사용해보고 피드백등을 받을수 있게 해준다. 

 - 피드백은 스크린샷, 로그, 동영상등으로 받을수 있다. 



* Crash Reporting 

 - 앱이 실행중 crash가 발생할때 어디서 죽었는지 callstack등을 제공한다. 

 - 또한 기기특성, 성능데이터 및 사용자 상황을 같이 제공해서 문제 해결을 도와준다. 



위에서 제공하는 기능들은 앱을 개발할때 필요한데, 서버개발이 필요한 부분이라서 firebase를 이용하면 상당한 도움이 될 것 같다. 제공하는 기능들이 앱개발시 필요한 것이고, 하나하나가 모두 유익한 것들이다. 


위에서 제공하는 기능들이 서로 연동되고 통합하는 중심에는 firebase의 꽃이라고 할 수 있는 Analytics가 존재한다. 


[Analytics] 

 - 기존의 GA(Google Analytics)가 웹페이지를 위한 목적으로 개발되었다면, FA(Firebase Analytics)는 앱을 목적으로 개발된 것이다. 

 - 사용자가 App을 사용하는 방식을 파악할 수 있다. 

 - 다양한 각도에서 여러가지 보고서를 제공한다. 

 - 중요한 것은 제한이 없는 무료라는 것이다.  ( GA는 light한 사용은 무료이고, 일정이상 사용하려면 유료 )

 - firebase 에서 제공하는 다른 기능들과 통합하여 여러가지 관리를 할 수 있다. 



중요한것 한가지를 빼먹었는데, firebase에서 제공하는 기능들 중에서 모두 무료로 제공하는건 아니다. 

Database, Storage, Hosting, TestLab , GoogleCloud Platform 등은 어느정도 까지만 무료로 제공한다. 

아래에서 무료로 지원하는 범위를 정리하였다. 


 Realtime Database

 동시접속

 100명

 저장용량

 1 GB

 다운로드

 10 GB / month

 Storage 

 저장용량

 5 GB

 다운로드

 1 GB / day

 업로드 횟수

 20,000 번 / day 

 다운로드 횟수

 50,000 번 / day

 Hosting

 저장용량 

  1 GB

 전송용량 

  10 GB / month


각각 기능들을 따로 제공하는 서비스들이 있는데, 각각 다른것을 이용하는 것보다 통합된 firebase를 사용하면 어떨까? 

실제 사용에 대한 판단은 사용하는 사람이~~  ( 저는 사용해보는 것에 한표~ ) 


이상으로 간단하게 firebase는 무엇이고, 어떤 기능들을 제공하는지 알아 봤습니다. 

다음으로는 간단하게 firebase를 적용하는 방법에 대해서 알아 보겠습니다. 


2017/04/03 - [android] - 구글 firebase 프로젝트 생성및 적용하기





:

[android] GCM을 이용해서 push 구현및 browser로 동작하는 방법

android 2013. 3. 11. 19:10

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

작성일 : 2013-03-11

작성자 : hanburn

 

이 글은 아래의 page를 기초로 해서 작성 되었습니다.

http://developer.android.com/google/gcm/gcm.html

 

여기서는 간한하게 테스트를 위해서 third-party application server가 없이 진행 하도록 하겠습니다. 보통은 서버를 구성하여 push 메시지를 보내고, 전송 상태등을 조회할 수 있는 기능을 만들지만 여기는 GCM-client 위주로 기술하기 때문에 직접 web browser로 메시지를 보내도록 하겠습니다.

 

0. 용어정리  

Registration ID : 단말기를 GCM 서버에 등록하고 나서 받는 key . GCM 서버에서 단말기를 구분하는 값이다. Push 요청을 할 때 이 key를 보내서 특정 단말에만 push 가 가도록 할 수 있다.

Sender ID : 구글 API Console에서 프로젝트를 등록하고 나서 얻을수 있다. 의미상으로는 Sender ID는 메시지를 수신하는 안드로이드 앱을 구분하게 된다.  

Sender Auth Token : push 메시지 전송시(third-party 서버 또는 Browser) 메시지를 보내는 곳을 인증하기 위한 token.  아무나 GCM서버에 push를 보낼 수 없도록 하기 위한 인증장치

 

1. Enabling GCM

GCM을 사용하기 위해서는 Google API console에서 Sender ID를 발급 받아야 한다.

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

 

그림에서 주소창의 project 옆의 숫자가 project ID가 인데, GCM에서는 이 값을 Sender ID로 사용한다. 참고로 API console에서 여러 개의 Google API Project를 만들고 관리 할 수 있는데, 필자는 test_gcm 이라는 project를 만들어서 사용하였다. 복수의  project를 생성할 수 있고 project마다 ID가 독립적이 된다.

 

2. Android 클라이언트 - manifest.xml 파일

 

1. GCM은 안드로이드 2.2 이상에서 지원하므로 최소 버전을 설정해야 한다.

<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="xx"/>

2. GCM 메시지를 받기 위한 permission을 정의 한다. “my_app_package”는 자신의 package ..

<permission android:name="my_app_package.permission.C2D_MESSAGE" android:protectionLevel="signature" />
<uses-permission android:name="my_app_package.permission.C2D_MESSAGE" />

3. 추가로 필요한 permisstion 추가

<!-- GCM messages 수신하기 위해서 -->
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<!-- 인터넷 접속 -->
<uses-permission android:name="android.permission.INTERNET" />
<!-- 구글계정 접근 -->
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<!-- 메시지 수신하려면 절전모드로 가면 안됨 -->
<uses-permission android:name="android.permission.WAKE_LOCK" />

4. Broadcast Receiver 등록 ( gcm.jar 파일에 GCMBroadcastReceiver 라는클래스가 있음. )

<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>

5. Intent service 추가 ( gcm.jar 파일에 GCMIntentService 클래스 있음)

<service android:name=".GCMIntentService" />

 

4,5번에서 사용하는 클래스는 google에서 제공하는 gcm.jar 파일에 정의되어 있으므로 그냥 사용하는게 편하다. 기존 C2DM에서 GCM으로 마이그레이션하는 경우에는 그냥 Sender ID만 변경해 주면 된다.

 

 

3. Android 클라이언트 – GCM서버에 등록

단말기에서는 push를 받기 위해서 GCM서버에 단말기를 등록해야 한다. gcm.jar 파일을 이용하는 경우에는 아래처럼 간단하다.

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");
}

 

여기서 GCMRegistrar.register(this, SENDER_ID) 는 실제로는 아래와 같은 동작을 한다.

Intent registrationIntent = new Intent("com.google.android.c2dm.intent.REGISTER");
// sets the app name in the intent
registrationIntent
.putExtra("app", PendingIntent.getBroadcast(this, 0, new Intent(), 0));
registrationIntent
.putExtra("sender", senderID);
startService
(registrationIntent);

위 코드는 C2DM에서 사용하던 방법과 같다. gcm.jar GCM을 구현하는 코드가 정형화 되어 있어서 간단한 library 파일로 제공하는 것이다. 그래서 신규 개발시는 gcm.jar를 이용하면 편리하다.

 

GCM에 등록이 되면 callback으로 GCMIntentService onRegistered() 가 호출된다. 여기에 registrationId가 넘어온다.

 

GCMIntentService class에서 제공하는 다양한 callback 함수들을 아래와 같다. 이름만 보면 대충 언제 호출되는지 알 수 있다.

protected void onRegistered(Context context, String registrationId)

protected void onUnregistered(Context context, String registrationId)

protected void onMessage(Context context, Intent intent)

protected void onDeletedMessages(Context context, int total)

public void onError(Context context, String errorId)

protected boolean onRecoverableError(Context context, String errorId)

 

 

이제, 클라이언트 개발이 완료 되었으므로 실제로 test를 해서 잘 동작하는지 확인해 봐야 한다. GCM 서버는 아래의 url을 통해서 Broswer로 간단하게 테스트 할 수 있다. Browser에서 테스트할때 필요한 Authorization Key google API console에서 얻을 수 있다.

 

 

사진 보면 알겠지만, third-party Server를 사용할 경우에는 “Create new Server Key”를 눌러서 생성할수 있다. 위에서 얻은 키를 이용해서 아래처럼 호출하면 된다.

그리고 registration_ids는 앞에서 String regId = GCMRegistrar.getRegistrationId(this); 을 호출해서 얻은 값이다.

 

URL : https://android.googleapis.com/gcm/send.

Method : POST

Authorization: Key=xxxxx

Content-Type:application/json  

)

Content-Type:application/json
Authorization:key=AIzaSyB-1uEai2WiUapxCs2Q0GZYzPu7Udno5aA

{
 
"registration_ids" : ["APA91bHun4MxP5egoKMwt2KZFBaFUH-1RYqx..."],
 
"data" : {
   
...
 
},
}

 

POST로 호출해야 되므로 Chrome REST-CONSOLE 같은 것으로 전송을 테스트 해보면 된다.

 

보너스

GCM 샘플 소스 : 설치된 android SDK 경로에서 “Extras -> Google -> gcm->samples “ clientserver의 샘플 소스가 있다. Client 샘플은 registrationId를 서버로 전송하므로 해당 부분을 빼고 browser로 테스트 할 수 있도록 변경한 샘플을 첨부 하였다.

 gcm-demo-client.zip

 

 



: