혹시 GCM 모듈 안쓰고 바로 GCM으로 받을 수 있을까요..?

안녕하세요!!

Titanium 3.3.0 사용중입니다

현재 ACS 를 이용하면 iOS, ANDROID 모두 정상 푸쉬가 옵니다.

근데… 어플 삭제여부를 판단해야하는 경우이다보니 GCM을 직접 전송하여 리턴값을 체크해야하는 경우인데요

GCM으로 device token을 이용하여 직접 호출하면 payload 가 null 이라면서 죽어버리는 현상이 발생하네요…

callback 부분은 들어오지 못하구요, cloudPush 내부에서 처리하다 죽는것같습니다…

이부분 제가 익셉션을 캐치하거나 할 수 있을까요…??

아니면 어쩔 수 없이 gcm 모듈을 붙여야하나요…

에러 내용은 아래와 같이 뜹니다.

[INFO] : APSCloudPush: receivePayload: null
[INFO] : APSCloudPush: background: true
[INFO] : APSCloudPush: queuePayload: null
[INFO] : APSCloudPush: showTrayNotification
[ERROR] : APSCloudPush: Payload is null!
[DEBUG] : AndroidRuntime: Shutting down VM
[WARN] : dalvikvm: threadid=1: thread exiting with uncaught exception (group=0x418abc08)
[ERROR] : TiApplication: (main) [54720,56074] Sending event: exception on thread: main msg:java.lang.RuntimeException: Unable to start receiver com.appcelerator.cloudpush.GCMReceiver: java.lang.NullPointerException; Titanium 3.3.0,2014/07/11 12:36,787cd39
[ERROR] : TiApplication: java.lang.RuntimeException: Unable to start receiver com.appcelerator.cloudpush.GCMReceiver: java.lang.NullPointerException
[ERROR] : TiApplication: at android.app.ActivityThread.handleReceiver(ActivityThread.java:2567)
[ERROR] : TiApplication: at android.app.ActivityThread.access$1800(ActivityThread.java:161)
[ERROR] : TiApplication: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1341)
[ERROR] : TiApplication: at android.os.Handler.dispatchMessage(Handler.java:102)
[ERROR] : TiApplication: at android.os.Looper.loop(Looper.java:157)
[ERROR] : TiApplication: at android.app.ActivityThread.main(ActivityThread.java:5356)
[ERROR] : TiApplication: at java.lang.reflect.Method.invokeNative(Native Method)
[ERROR] : TiApplication: at java.lang.reflect.Method.invoke(Method.java:515)
[ERROR] : TiApplication: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
[ERROR] : TiApplication: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
[ERROR] : TiApplication: at dalvik.system.NativeStart.main(Native Method)
[ERROR] : TiApplication: Caused by: java.lang.NullPointerException
[ERROR] : TiApplication: at org.json.JSONTokener.nextCleanInternal(JSONTokener.java:116)
[ERROR] : TiApplication: at org.json.JSONTokener.nextValue(JSONTokener.java:94)
[ERROR] : TiApplication: at org.json.JSONObject.(JSONObject.java:155)
[ERROR] : TiApplication: at org.json.JSONObject.(JSONObject.java:172)
[ERROR] : TiApplication: at com.appcelerator.cloudpush.APSCloudPush.showTrayNotification(APSCloudPush.java:334)
[ERROR] : TiApplication: at com.appcelerator.cloudpush.APSCloudPush.receivePayload(APSCloudPush.java:240)
[ERROR] : TiApplication: at com.appcelerator.cloudpush.GCMReceiver.onReceive(GCMReceiver.java:31)
[ERROR] : TiApplication: at android.app.ActivityThread.handleReceiver(ActivityThread.java:2552)
[ERROR] : TiApplication: … 10 more

payload를 보내지 않아서 그런것 같습니다. cloudpush 모듈에서는 payload가 필수적으로 보내집니다.
"payload":"{\"android\":{\"alert\":\"message form acs\"}}"
node의 gcm package를 이용하여 보낼 때 'data.payload' : '{"android":{alert":"gggg"}}' 이런 형태로 보내니 cloud.push에서 받더군요.

어쨋든 gcm으로 메시지를 보내는 것을 node, php, acs 어떤 것으로 해도 상관없습니다.
다만 말씀하신 것처럼 구글이 넘겨주는 result를 정확히 확인하고 싶다면 acs를 통해 보내면 안되겠죠.

gcm을 받고 처리하는 것은 cloudpush를 이용하거나 다른 모듈을 이용해도 상관없죠. 다만 서로 주고 받는 데이터만 잘 맞춰주면 됩니다.
gcm에서 받는 푸쉬를 디테일하게 다루고 싶다면 http://iamyellow.net/post/40100981563/gcm-appcelerator-titanium-module 이 모듈을 이용해보세요~.(근데 이 모듈 저도 최근에는 써보지 않았네요.^^)

구현에 성공하시면 방법에 대해 공유해주세요^^

1개의 좋아요

아항!! 감사합니다!! 간단하게 해결이 되었네요 ㅎㅎ;;

말씀하신대로 [data][payload] = ‘{“android”:{…}}’ 해당 방법으로 해결했습니다!!

감사합니다!! ㅇㅁㅇ//