2014년 8월 9일 토요일

안드로이드 PUSH Notification (GCM)


Skflpoor (토론 | 기여) 사용자의 2012년 9월 25일 (화) 17:31 버전
(비교← 이전 판 | 현재 판 (비교) | 다음 판 → (비교)
하루죙일 삽질했다….ㅠ.ㅠ
-우선은 Google API Console계정과 프로젝트를 생성한다.
1.https://code.google.com/apis/console/ 에 접속해서 계정을 만든다
2.Service 에서 Google Cloud Messaging for Android 를 ON
3.API access 에서 [Create New Server Key...]를 클릭해서 서버키를 만든다
4.프로젝트ID를 메모해둔다
-GCM라이브러리를 인스톨한다
sdk메니저를 킨후 extras에있는 Google Cloud Messaging for Android Library을 설치한다.
-AndroidManifest.xml 파일을 수정한다.
1.퍼밋션 추가
<permission android:name=”패키지명.permission.C2D_MESSAGE” android:protectionLevel=”signature” />
<uses-permission android:name=”패키지명.permission.C2D_MESSAGE” />
<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” />
2. 레시버 추가
<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" />
-라이브러리 설정 1.jar파일 복사
  sdk폴더에 extras/google폴더에 들어가보면 gcm/gcm-client/dist/gcm.jar 파일이 있다. 이 파일을 프로젝트 libs폴더에 복사한다
  그런다음 Build Path>Add External Achieves... 로 라이브러리추가한다
-메인 Activity수정
@Override
public void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);
 registerGcm();
}
public void registerGcm() {
 GCMRegistrar.checkDevice(this);      // 라이브러리설정이 제대로 않되면 여기서 익셉션이 발생한다
 GCMRegistrar.checkManifest(this);
 final String regId = GCMRegistrar.getRegistrationId(this);
 if (regId.equals("")) {
  GCMRegistrar.register(this, "프로젝트 아이디");
 } else {
  Log.e("reg_id", regId);
 }
}
-레시버 추가
public class GCMIntentService extends GCMBaseIntentService {
private static void generateNotification(Context context, String message) {
 int icon = R.drawable.ic_action_search;
 long when = System.currentTimeMillis();
 NotificationManager notificationManager = (NotificationManager) context
   .getSystemService(Context.NOTIFICATION_SERVICE);
 Notification notification = new Notification(icon, message, when);
 String title = context.getString(R.string.app_name);
 Intent notificationIntent = new Intent(context, MainActivity.class);
 notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
   | Intent.FLAG_ACTIVITY_SINGLE_TOP);
 PendingIntent intent = PendingIntent.getActivity(context, 0,
   notificationIntent, 0);
 notification.setLatestEventInfo(context, title, message, intent);
 notification.flags |= Notification.FLAG_AUTO_CANCEL;
 notificationManager.notify(0, notification);
}
@Override
protected void onError(Context arg0, String arg1) {
}
@Override
protected void onMessage(Context context, Intent intent) {
// 메세지를 받으면 이곳에서 처리
 String msg = intent.getStringExtra("message");
 Log.e("getmessage", "getmessage:" + msg);
 generateNotification(context, "push");
}
@Override
protected void onRegistered(Context context, String reg_id) {
 Log.e("키등록", reg_id);
}
@Override
protected void onUnregistered(Context arg0, String arg1) {
 Log.e("키제거", "---");
}
}
-실행해서ID취득하기 실행하면 아래와같은 로그가 출력된다
reg_idAPA91bG8xqTYD6MLH9AfV8OPLfIbTZH9fCk8LxEY1eV0JCwCyCRO0_rE07ecKHOhFKc3GeSvbpuF9OOpbbdXuNN5COhNOQO3WZNE9HQeDM3hsL-Bq4I2oktb5x17rNPo5SowlwIfh9k2SFLrlzjERgZ2AxzEG-nDrg
이걸로 ID취득 완료
-동작확인
아래의 페이지에서 PUSH를 보낼수 있다
구글의 API Key와 로그에서 출력된 ID 멧세지를 입력하고 send버튼을 클릭하면 OK!!!!
참고로 위 페이지의 멧세지 키는 [message]이다

댓글 없음:

댓글 쓰기