상세 컨텐츠

본문 제목

GCM-2 : 클라이언트 적용

프로그램개발/안드로이드

by fsteam 2012. 10. 17. 18:14

본문

1. 라이브러리 복사

android-sdks\extras\google\gcm\gcm-client\dist\gcm.jar 파일을 libs 디렉토리에 복사


2. 퍼미션 적용

<!-- ##################### GCM 이용을 위한 퍼미션 설정 시작 #################### -->

<!-- for GCM messages. -->

<permission android:name="패키지명.permission.C2D_MESSAGE" android:protectionLevel="signature" />

<uses-permission android:name="패키지명.permission.C2D_MESSAGE" /> 

<!-- App receives GCM messages. -->

<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />

<!-- GCM connects to Google Services. -->

<uses-permission android:name="android.permission.INTERNET" />

<!-- GCM requires a Google account. -->

<uses-permission android:name="android.permission.GET_ACCOUNTS" />

<!-- Keeps the processor from sleeping when a message is received. -->

<uses-permission android:name="android.permission.WAKE_LOCK" />    

<!-- ##################### GCM 이용을 위한 퍼미션 설정 끝 #################### -->


3. 리시버, 서비스 등록

<application>

....

        <!-- ##################### GCM 이용을 위한 리시버, 서비스 등록 시작 #################### -->

<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="패키지명" />

 </intent-filter>

</receiver>

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

<!-- ##################### GCM 이용을 위한 리시버, 서비스 등록 끝 #################### -->

....

</application>


4. GCMIntentService.java 생성

package 패키지명;


import android.app.Activity;

import android.app.Notification;

import android.app.NotificationManager;

import android.app.PendingIntent;

import android.content.Context;

import android.content.Intent;

import android.util.Log;

import android.widget.Toast;


import com.google.android.gcm.GCMBaseIntentService;


public class GCMIntentService extends GCMBaseIntentService {

private static final String TAG = "GCMIntentService";

private static final String SENDER_ID = "123456789"; // 프로젝트ID (URL의 project:xx)

public GCMIntentService() {

super(SENDER_ID);

}


@Override

protected void onMessage(Context context, Intent intent) {

if (intent.getAction().equals("com.google.android.c2dm.intent.RECEIVE")) {

// 메시지 받을것인지 확인 !!

//CalendarPreference mPref = new CalendarPreference(getApplicationContext());

//if(mPref.GetEnableNoti()) {

showMessage(context, intent);

//}

}

}


@Override

protected void onError(Context context, String msg) {

// TODO Auto-generated method stub

Log.w(TAG, "onError!! " + msg);

}


@Override

protected void onRegistered(Context context, String regID) {

// TODO Auto-generated method stub

if(!regID.equals("") || regID != null){

Log.w(TAG, "onRegistered!! 서버에 보내야 함 !!!!! " + regID);

}

}


@Override

protected void onUnregistered(Context context, String regID) {

// TODO Auto-generated method stub

Log.w(TAG, "onUnregistered!! " + regID);

}

public void showToast(){

Toast.makeText(this, "RegID 등록 완료", Toast.LENGTH_LONG).show();

}

private void showMessage(Context context, Intent intent){

String title = intent.getStringExtra("title"); // 알림 제목

String msg = intent.getStringExtra("msg"); // 알림 내용

String ticker = intent.getStringExtra("ticker"); // 상태줄에 보일 내용

// Toast.makeText(context, msg, Toast.LENGTH_SHORT).show();

NotificationManager notificationManager = (NotificationManager)context.getSystemService(Activity.NOTIFICATION_SERVICE);

        PendingIntent pendingIntent = PendingIntent.getActivity(context, 0,

                new Intent(context, MainActivity.class).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)

                .putExtra("link", link),

                PendingIntent.FLAG_UPDATE_CURRENT);

Notification notification = new Notification(R.drawable.ic_launcher, ticker, System.currentTimeMillis());

        // 이용자가 통지를 확인한 후에는 통지를 표시하지 않도록 설정

      notification.flags |= Notification.FLAG_AUTO_CANCEL;

        notification.defaults = Notification.DEFAULT_SOUND|Notification.DEFAULT_VIBRATE;

notification.setLatestEventInfo(context, title, msg, pendingIntent);

notificationManager.notify(0, notification);

}


}


5. 프로그램 구동시 GCM 등록시키기 추가
Activity의 onCreate에 추가함.
        // 최초 GCM 등록확인 !!
        //GCM 등록여부
        GCMRegistrar.checkDevice(this);
        GCMRegistrar.checkManifest(this);
      final String regId = GCMRegistrar.getRegistrationId(this);
      //등록된 ID가 없으면 ID값을 얻어옵니다
      if (regId.equals("") || regId == null) {
      GCMRegistrar.register(this, SENDER_ID);
      }else{
      Log.i(TAG, "Already Registered : " + regId);
      }


관련글 더보기