일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 메이플
- 괌
- 에어팟충전기
- 방토 농사
- 방울토마토 유기농
- 2in1무선충전기
- 방울토마토 씨부터 키우기
- Ender 3 V3 KE
- 쿠폰나눔
- 안드로이드
- 메이플스토리
- 집에서 방울토마토 키우기
- Android
- 집 방울토마토
- 다이소 방울토마토
- 보일러절약
- 어플만들기
- 핫엔드
- 다크나이트
- 스투키
- 다이소 방울토마토키트
- 맥세이프충전기
- 신혼여행
- 괌맛집
- 안방농사
- 겨울나기
- 방울토마토키우기
- 괌 신혼여행
- 메이플스토리M
- 휴대용무선충전기
- Today
- Total
괴도군의 블로그
[Android] GCM HTTP 테스트하기 / 구현하기 (2016 최신) 본문
서버없이 테스트겸..
간단하게 정리해봅니다.
GCM에 등록하는 소스는 다음과 같구요.. (앱 켜자마자 등록하게 되어있습니다.)
1. 앱설정
제일먼저.. 구글플레이 서비스 라이브러리를 추가하겠습니다.
1 2 3 4 5 6 7 | dependencies { ... compile 'com.google.android.gms:play-services-identity:8.3.0' compile 'com.google.android.gms:play-services-plus:8.3.0' compile 'com.google.android.gms:play-services-gcm:8.3.0' ... } | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | public class MainActivity extends Activity { static final String TAG = "MainActivity"; String rid; String senderId = "191143026205"; // 프로젝트 넘버입니다. 아래 설정부분 따라가보시면 얻는곳이 있습니다. @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // unregist(); regist(); } private void regist() { new AsyncTask<Void, Void, String>() { @Override protected String doInBackground(Void... params) { String msg = ""; Log.d(TAG, msg); try { InstanceID instanceID = InstanceID.getInstance(getApplicationContext()); rid = instanceID.getToken(senderId, GoogleCloudMessaging.INSTANCE_ID_SCOPE, null); //instanceID.deleteToken(rid,GoogleCloudMessaging.INSTANCE_ID_SCOPE); msg = "Device registered, registration ID= " + rid; //발급받은 토큰을 server로 저장하는 함수 (미구현) //RegistToServer(); //발급 받은 토큰을 Sharedpreference로 저장 (미구현) //storeRegistrationId(context, regId); Log.d(TAG, msg); } catch (IOException ex) { msg = "Error :" + ex.getMessage(); } return msg; } }.execute(null, null, null); } private void unregist() { new AsyncTask<Void, Void, String>() { @Override protected String doInBackground(Void... params) { String msg = ""; Log.d(TAG, msg); try { InstanceID instanceID = InstanceID.getInstance(getApplicationContext()); instanceID.deleteInstanceID(); msg = "Device unRegistered"; //server에 토큰 삭제 요청 (미구현) //unRegistToServer(); //Sharedpreference로 저장된 토큰 제거 (미구현) //deleteRegistrationId(context, regId); Log.d(TAG, msg); } catch (IOException ex) { msg = "Error :" + ex.getMessage(); } return msg; } }.execute(null, null, null); } } | cs |
그리고 푸시를 받는부분..
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | public class MyGcmListenerService extends GcmListenerService { static final String TAG = "MyGcmListenerService"; @Override public void onMessageReceived(String from, Bundle data) { String title = data.getString("Hello"); // String text = data.getString("text"); Log.d(TAG, "From: " + from); Log.d(TAG, "data: " + data); Log.d(TAG, "Title: " + title); // Log.d(TAG, "Text: " + text); //from is sender id //data is datas } } | cs |
1 2 3 4 5 6 7 | public class MyInstanceIDListenerService extends InstanceIDListenerService { @Override public void onTokenRefresh() { //send new registration token to app server } } | cs |
AndroidManifest.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.t5online.test"> <permission android:name="my_app_package.permission.C2D_MESSAGE" android:protectionLevel="signature" /> <uses-permission android:name="my_app_package.permission.C2D_MESSAGE" /> <!-- 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" /> <application android:name=".MainApplication" android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity" android:label="@string/app_name" android:windowSoftInputMode="stateHidden|adjustResize"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <!-- 꼭 등록해놔야하는 GcmReceiver --> <receiver android:name="com.google.android.gms.gcm.GcmReceiver" android:exported="true" android:permission="com.google.android.c2dm.permission.SEND" > <intent-filter> <action android:name="com.google.android.c2dm.intent.RECEIVE" /> <category android:name="com.example.gcm" /> </intent-filter> </receiver> <service android:name=".gcm.MyGcmListenerService" android:exported="false" > <intent-filter> <action android:name="com.google.android.c2dm.intent.RECEIVE" /> </intent-filter> </service> <service android:name=".gcm.MyInstanceIDListenerService" android:exported="false"> <intent-filter> <action android:name="com.google.android.gms.iid.InstanceID"/> </intent-filter> </service> </application> </manifest> | cs |
여기까지가 앱입니다..
3. GCM API 신청방법
GCM 사용을 위해 프로젝트 등록과.. api 신청을 해야합니다. 아래 주소로 접속.
https://console.developers.google.com
또는... 간단한 방법이 있네요
https://developers.google.com/cloud-messaging/android/client 여기서 순서대로 진행하시면 됩니다..
sender id와 api key를 쉽게줍니다. json파일은 보관용..
1. 프로젝트 생성버튼클릭
2. 이름 정하고 만들기
3. 여기가 중요합니다.. 프로젝트 번호를 따로 저장해둡니다. (위에서 설정해야하는 sender id 입니다.)
4. api신청하러 갑니다.
5. Cloud Messageing for Android 클릭
6. api사용설정 클릭
7. 사용자 인증정보로 이동
8. api호출 위치를 웹서버로 합니다. (보통의 서버로 호출하는경우도 같습니다. )
9. api키도 적어둡니다. 호출시에 필요합니다.
4. 테스트
구글 크롬을 설치하시고.. 주소창에 chrome://apps/ 를 치거나.. 북마크바의 앱을 들어가시면
( https://chrome.google.com/webstore/category/apps?utm_source=chrome-ntp-icon )
웹스토어가 있습니다 클릭하시면 위 url로 이동하게 되는데
검색창에 rest라고 적고 검색하면 여러 rest 클라이언트가 나오는데 저는 advanced REST client를 사용합니다.
아참.. 먼저 앱설정을 다 마치셨다면 sender id(프로젝트 넘버)를 적어주시고 앱을 실행시켜주세요.
위와같이 로그들이 나오게 될텐데..
W/InstanceID: token: fufTl3YKUZE:APA91bGrwf0mFqa0thYbg8CK94S2y6rR2-R7Si98ZUIjc180N0acKurPPsG0u_F4bjWrBg9FGdVT2PvH23r2i_HvmtE6PtYoDKNxpvanVfTNu0A9xvKy8eWo1zSBYtk367ideD9pdZoS
D/MainActivity: Device registered, registration ID= fufTl3YKUZE:APA91bGrwf0mFqa0thYbg8CK94S2y6rR2-R7Si98ZUIjc180N0acKurPPsG0u_F4bjWrBg9FGdVT2PvH23r2i_HvmtE6PtYoDKNxpvanVfTNu0A9xvKy8eWo1zSBYtk367ideD9pdZoS
단말을 GCM에 등록하게되면 토큰을 줍니다. 위와같이 내부에서도 한번찍어주고있고 제가 올린소스에서도 한번 찍고주고있습니다.
자신의 앱에서 나온 토큰값을 복사해주시고.. 아래에 테스트호출에 사용하시면됩니다.
먼저.. 처음이신분은 무슨화면인가 싶으실텐데 아까 설치하신 advanced REST Client 입니다.
화면과 같이 똑같이 입력해주세요
https://android.googleapis.com/gcm/send
Content-Type: application/json
Authorization:key=
1 2 3 4 5 6 7 8 | { "registration_ids" : [""], "data": { "Hello" : "World" } } | cs |
API신청할때 키값이 생성되었죠? 그걸 key=다음에 공백없이 써주시고
아래의 payload창에 나와있는 Token적는곳에 로그로 나온 토큰값을 붙여넣어주시면됩니다. 그리고 샌드를 누르면..
이와같이 테스트가 가능합니다.. 단말에서 직접 푸시를 로그로 확인하실수 있습니다.
카톡처럼 알림구현은 직접 Notification를 구현하셔야합니다.
참고: http://berabue.blogspot.kr/2015/03/android-notification.html
푸시 호출하는 내용의 옵션들을 알고싶으시다면..
https://developers.google.com/cloud-messaging/http-server-ref
https://developers.google.com/cloud-messaging/http
http://eun-sung-hun.blogspot.kr/2015/01/gcm-server.html
http://www.icelancer.com/2015/02/google-cloud-messaging-gcm-3.html
http://blog.saltfactory.net/android/implement-push-service-via-gcm.html
'#프로그래밍 > Android' 카테고리의 다른 글
[android]네이버 퀵메뉴만들기(바탕화면 플로팅버튼) (1) | 2016.04.07 |
---|---|
[Android] 핸드폰에 저장된 wifi 비밀번호 알아내기(루팅x) (6) | 2016.03.14 |
[android] 리스트뷰 갱신하는 방법 (0) | 2016.01.29 |
[Android] startActivity로 불린 앱의 호출순서 (0) | 2016.01.21 |
Android Studio Log 출력방법(태그를 빼먹지말자!) (0) | 2015.12.30 |