Parse.com Android Native Push 모듈

제가 fork해서 사용하고 있는 Parse.com의 Push를 수신하기 위한 Natvie Module에 몇가지 업데이틀 해봤습니다.

timanrebel님이 만들고 업데이트가 거의 없다가 이형님도 최근에 업데이트를 하셔서… 저도 기능 좀 추가해서 pull request 해놓은 상태입니다.

  1. 우선 최근 업데이트로 안드로이드 M/6.0+에서도 Push가 정상적으로 수신됩니다.

  2. 제가 추가한 부분은 안드로이드 notification 센터에 내 앱으로 와서 쌓여있는 push를 날려주는 간단한 메쏘드와,

  3. iOS에서 백그라운드 리프레쉬를 구동시키기 위해 push에 아래와 같이 content-available를 넣어서 날려주는 것과 동일하게 Android에서도 content-available이 포함되어 있으면 notification을 생성하지 않고, 앱에 이벤트만 넘겨주고 끝나는 기능입니다.
    그래서 iOS와 동일하게 silent push를 이용해서 백그라운드 리프레쉬를 시작하게 하실 수 있습니다.

    {“alert”:"",“content-available”:1}

뭔가 좀더 추가하고 싶은것들이 많은데 일단은 여기까지 했어요.

https://github.com/gimdongwoo/Parse/tree/master/android/dist
모듈은 zip 형태로 올려놓았으니 받아서 쓰실 수 있어요.

2개의 좋아요

추가하신 기능들이 알짜배기네요. :+1:

이 모듈 써보려고 합니다. 혹시 그 이후에 다른 변경사항이나 고려사항이 있다면 알려주시면 감사하겠습니다.^^ (로그를 보니 동우님이 #3 컨트리뷰터군요. :+1:t3:)

1개의 좋아요

가장 마지막 버전이 merge되어 있고 이후 변경한게 아직 없습니다.
https://github.com/timanrebel/Parse/pull/47

주의사항은 ti.facebook과 같이 쓰실때는 bolt때문에 jar파일을 정리해주셔야 합니다…

현재 ti.facebook은 안쓰고 있고.
Parse의 Installation까지 정상 등록되었는데 android push가 안되네요.

Installation에 deviceToken까지 정상적으로 되었는데 비슷한 경험 있으면 알려주세요.^^
Past Pushes의 목록에 보면 Pushes Sent Count가 iOS만 포함하고 있어요.

Parse구동 코드및 tiapp.xml에 AppId 및 API Key를 모두 잘 지정한것 같은데…

그리고 이제는 Parse_ClientKey를 tiapp.xml에 안넣어도 되는거 맞죠?

tiapp.xml에 gcm senderid가 필요합니다. 출근중라 출근후에 컴퓨터로 확인하고 다시 답 드릴게요.

1개의 좋아요

api 키 재발급에서부터 이것 저것 해봐도 다 안되네요. @DongWoo_Gim 감사합니다.

도큐먼트에 gcm관련을 안적었네요. 원래 내용은 parse android sdk docs에 있습니다.

tiapp.xml에 이 부분이 필요해요.

<android xmlns:android="http://schemas.android.com/apk/res/android">
    <manifest ...>
      ...
      <application ...>
        ...
        <meta-data android:name="com.parse.push.gcm_sender_id" android:value="id:*******************"/>
      </application>
      ...
    </manifest>
  </android>

네 맞아요 그것 때문이였네요.
parse.com 쓸때는 parse.com의 sender id를 sdk에서 잡아줬나보군요. ㅎㅎㅎㅎ
parser-server 초반 삽질을 저도 하고 있군요.ㅋㅋ

감사해요 :grinning:

덕분에 readme 수정해서 PR날렸어요~

새 토픽을 하려다가 모듈쪽 문의라서 답글로 문의드립니다 !

일단 두개의 앱에서 해당 모듈을 사용하고 있고, 하나의 서버키로 서버에서 푸쉬를 전송하도록 되어있습니다.
문제는 둘중 하나의 앱에서 종료 후 재실행 시, 아래와 같은 로그를 출력하고 푸쉬에 대한 이벤트처리를 하지 못 합니다. 다른 하나의 앱은 잘 작동합니다.

[DEBUG] onPushReceive: App is not alive; ‘notificationreceive’ won’t be triggered
[DEBUG] onPushOpen: App was killed; resume the app without triggering ‘notificationopen’

모듈 원 소스를 조금 들여다봤는데, 모듈 인스턴스가 Destroy 되었을때 나오는 로그로 나옵니다.
BroadCastReceiver 로 구현되어있어서, 앱을 종료해도 백그라운드에서 리시버는 살아서 받고 있을텐데… 왜 Destroy 되었다고 하는지 모르겠습니다 ㅠ 프로세스 킬을 한 것도 아니고… 하드웨어 백키를 이용한 종료입니다.

하나의 서버키 때문일까요 ? 아니면 앱의 구조적 문제일까요…?
혹시 추측되는 부분이 있으시면 조언 부탁 드립니다.

우선은 백키를 이용해서 Main Activity가 종료될 때 exitOnClose가 빠져있는것 같습니다.

이 Parse 모듈에서는 onAppCreate를 통해서 모듈을 초기화 하고, onStart를 통해서 상태가 STATE_RUNNING으로 변경됩니다.

Titanium에서 Module의 lifecycle을 문서에서 보면요. Activity Lifecycle Events에 대한 노트가 있습니다.
http://docs.appcelerator.com/platform/latest/#!/guide/Android_Module_Architecture
그러니까 Main Activity가 종료될 때 module의 lifecycle event도 정상적으로 동작할 수 있게 해주어야 합니다.

말이 길었는데요…(그래도 appcelerator의 document는 정말 좋습니다.)
main이 되는 윈도우의 tss에 exitOnClose: true로 지정 해주면 됩니다 : )

1개의 좋아요