Android Studio 에서 push GCM 구현


1. 프로젝트를 생성.

.


2. build.gradle 에서 gcm 라이브러리를 import 합니다.


dependencies 안에 값을 넣습니다.


 compile 'com.google.android.gms:play-services:8.1.0'





3. class 파일을 생성하여줍니다.


 총 3개의 파일이 필요합니다.


화면구성과 값 등록시 필요한 MainActivity 와,


push가 왔을때 전달할 GcmBroadcastReceiver 클래스


push 받은이후 동작을 구성할 GcmIntentService 클래스가 필요합니다.




MainActivity


mainActivity에서는 푸시를 등록하는 역활을 해줍니다.




SENDER_ID 값에다가 등록한이후 클라이언트 ID값을 넣어주시면 됩니다.


그리고 등록한 이후에 쿠키값을 서버에 전달하여 주면 됩니다.


regId = gcm.register(SENDER_ID); 


 서버에서는 서버키 값과 regId 두가지 값으로 push를 하게 되기때문에,


regId값을 서버에 넣는 코드를 추가하시면 됩니다.



GcmBroadcastReceiver


GcmBroadcastReceiver는 단순이 값을 받아서 서비스쪽에 전달하는 역활을 하게됩니다.




GcmIntentService


GcmIntentService는 push가 왔을때에 행동을 취하게 됩니다.


현재 클래스는 단순히 값이 왔을때 Log.i를 찍는 행동을 하게 됩니다.





2. manifest 에서 권한을 추가합니다.






manifest 에서 리시버와 서비스를 추가합니다.




AndroidManifest.xml



이후 서버쪽에 서버 키값과 regId 값을 전달해주시면,


서버쪽에서 push를 하게되면 디바이스쪽으로 전달됩니다.



 기다리고 기다려도 오지 않아 PIN 번호 발급이 잘못됬나?


 한글로 주소를 입력해서 안오는건가?


 우편부아저씨가 아무도 없다고 그냥가셨나?


 별에 별생각을 다했었는데, 드디어 왔네요.


 저는 오는데 20일 정도 걸린것같습니다.




 이제야 겨우 지급 받을수있겠네요~~


 휴우

 
org.springframework.web.client.RestClientException: Could not extract response: no suitable HttpMessageConverter found for response type [tc.wo.mbseo.exchangediary.https.datas.TestData] and content type [text/html]
 
 몇일 동안 고생했던 오류 ㅠ
 
@Rest(rootUrl = "주소",converters = {GsonHttpMessageConverter.class} )
public interface HttpTest {
...
...
...
}
 
androidannotations 에서 rest templete 을 사용하는데 계속 이 오류 뜨는 경우.
 
서버에서 가져오는 값이 text/html 으로 오고 있기때문에 
 
GsonHttpMessageConverter 으로 변환할수 없기때문에 발생하는 오류입니다.
 
 
 
1. 텍스트에 대한 대응 추가.
 
 
이럴때에는 "converters =" 에서 
 
StringHttpMessageConverter.class 를 추가하여 텍스트에 대한 대응을 추가하면
 
리턴받는 값이 text 값으로 정상적으로 들어오게 됩니다.
 
@Rest(rootUrl = "주소",converters = {GsonHttpMessageConverter.class, StringHttpMessageConverter.class} )
public interface HttpTest {
...
...
...
}
 
 
2. server 에서 수정 하는 방법
 
 사실상 서버쪽에서 발생된 오류가 볼수있으며, json 포멧으로 넘기고 타입은 text/html 을 넘기기 때문에
 
발생된 것이므로 서버쪽에서 header 에서 추가해주면 됩니다.
 
header('Content-Type: application/json')

3. android 쪽에서 수정하는 방법

 

 RestTemplate getRestTemplate();

 

 void setRestTemplate(RestTemplate restTemplate);

 

를 추가하여 template에 접근할수있도록 변경한이후,

 

        GsonHttpMessageConverter converter = new GsonHttpMessageConverter();

        final List<MediaType> supportedMediaTypes = new LinkedList<MediaType>(converter.getSupportedMediaTypes());
        final MediaType mediaType = new MediaType( MediaType.TEXT_HTML.getType() );
        supportedMediaTypes.add(mediaType);

        converter.setSupportedMediaTypes(supportedMediaTypes);
        httpTest.getRestTemplate().getMessageConverters().add(converter);
 
GsonHttpMessageConverter 에서 파싱할수있는 타입을 추가해주시면 됩니다.

 



 http://devbible.tistory.com/160


style.xml 에 구현.

    <style name="DialogTheme" parent="android:Theme.Dialog">

   <item name="android:windowIsTranslucent">true</item>

   <item name="android:windowBackground">@android:color/transparent</item>

   <item name="android:windowContentOverlay">@null</item>

   <item name="android:windowNoTitle">true</item>

   <item name="android:windowIsFloating">true</item>

</style>






   <EditText 

       android:layout_width="match_parent"

       android:layout_height="match_parent"

       android:focusableInTouchMode="false"/>



 안드로이드 GCM PUSH 인증 받기 v.2015.06.16


 예전 방법밖에 없어 2015.06.16 에 현재 최신버전으로 다시 올립니다.



 1. 프로젝트 생성.

 

https://console.developers.google.com

경로로 이동하여 프로젝트를 생성합니다.





프로젝트 아이디를 입력하여 생성합니다.





프로젝트를 클릭하여 push 프로젝트로 이동합니다.




 API 로 이동합니다.







 Cloud Message for Android 로 이동







 API 사용 설정을 클릭하여 사용을 설정합니다.







사용이 완료되면 사용자 인증 정보로 이동합니다.




새키 만들기를 클릭하여 팝업띄운후 서버키를 선택합니다.



ip 주소는 선택사항이므로, 넣지 않아도 되기때문에 바로 만들기를 클릭하여 API 키를 생성합니다.





 여기까지가 서버에서 사용할수 있는 서버용 키를 생성하는 방법입니다.



 서버쪽에서 push 보낼때 아래와 같이 보내면 됩니다.


  $headers = array(

  'Authorization: key=' . 'AIzaSyBhhj2UKVHNqoN8PbkPWHBFVv************',

  'Content-Type: application/json'

 );




 이후 클라이언트쪽 key를 가져오기 위해서는 구글 서버스 쪽으로 이동합니다.


 https://developers.google.com/mobile/add





Pick a Platform 을 선택합니다.



  



플랫폼을 선택한 이후,





프로젝트를 선택합니다.






패키지를 입력해 줍니다.




이후  Choose and configure services 를 클릭하여 페이지를 이동한후,


 Cloud Messaging을 활성화합니다.






 CONTINUE TO

 Generate configuration files 를 클릭하여 이동하면,





 클라이언트에서 사용할수 있는 Sender Id를 가져올수 있습니다.


 클라이언트에서는 아래와 같이 사용 하시면 됩니다.


 regid = gcm.register("85770593****");





 안드로이드 푸시 (android push) MismatchSenderId  오류


 

 안드로이드의 푸시를 하다보면 많은 오류를 발생하는데,


 안드로이드 푸시 (android push) Unauthorized Error 401 오류


 오류를 겨우겨우 해결했더니 다음으로 나오는게, MismatchSenderId 오류...


 이 오류는 클라이언트에서 등록된 senderId가 일치 하지 않는다는 것입니다.


 그래서 결국엔 sender Id 받고 다시 하니 되네요,


 원 한번에 되는게 없네..ㅠ 


 

안드로이드 GCM PUSH 인증 받기 v.2015.06.16

 



 안드로이드 푸시 (android push) Unauthorized  Error 401 오류


 오류는 구글에 등록된 key 가 일치되지 않을경우 발생됩니다.


 체크해야 할부분은 구글에서 발급받은 key가 정상적으로 입력되었는지 체크하시고,


 구글에서 발급받은직후 바로 테스트하면 바로 업데이트가 되지 않아 발생되는 경우도 생깁니다.


 이럴땐 10~20분정도 기다리고 다시 테스트 하시면 정상적으로 됩니다.


 만약 그래서 똑같은 오류가 발생된다면 공개 api 액세스 key 를 삭제후에 키를 새로 발급받고


 10~20분 기다리고 테스트하시면 됩니다.



+ Recent posts