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);
}
}
[TIP] 현재 어떤 패키지가 최상위 화면에 실행중인지 알아내기 (0) | 2013.04.30 |
---|---|
배경화면설정과 이미지 필터 적용 (0) | 2012.10.24 |
GCM-1 : 서비스 신청하기 (0) | 2012.10.17 |
[TIP]브라우저에서 URL 클릭시 앱 실행 (0) | 2012.06.12 |
[TIP]애니메이션 구현 (0) | 2011.10.04 |