7

애플리케이션이 PhoneGap에 있습니다. 푸시 알림 기능을 사용 중입니다. https://github.com/marknutter/GCM-CordovaGCM Cordova 푸시 알림이 앱이 실행되지 않을 때 작동하지 않습니다.

나는 전체 기능을 구현했으며 어제까지 제대로 작동했습니다. 앱을 마지막 날 확인했을 때 앱이 실행되고 있지 않을 때 푸시 알림이 작동하지 않습니다. 모든 알림이 내 기기에서 수신 중이며 메시지를 클릭하면 앱이 열립니다.

그러나 컨트롤은 메시지 알림이 처리되는 자바 스크립트 부분에서 수신되지 않습니다. 파일 GCMIntentService.java에서

번호 : 메시지가 수신 될 때

JSONObject json; 
json = new JSONObject().put("event", "message"); 

json.put("message", extras.getString("message")); 
json.put("link", extras.getString("link")); 

Log.v(ME + ":onMessage ", json.toString()); 

GCMPlugin.sendJavascript(json); 
// Send the MESSAGE to the Javascript application 

이 코드는 작동합니다. 그러나 그 당시에는 앱이 실행되고 있지 않습니다.

알림 메시지를 클릭하면 응용 프로그램이 정상적으로 열리고 메시지 이벤트는 등록되지 않습니다. 푸시 알림을 처리하기 위해 JavaScript에서 컨트롤을 얻지 못합니다.

https://github.com/marknutter/GCM-Cordova/blob/master/assets/www/CORDOVA_GCM_script.js

: CORDOVA_GCM_script.js에 대한

코드에서 사용할 수있는 응용 프로그램이 실행되는 경우는 잘 작동합니다.

는 편집 : 통지는 가끔 실행됩니다. 자바 스크립트가 임의로 메시지 이벤트를 받고 있습니다.

는 편집 2 :

확실히 문제를 알고있다.

자바 파일에서 푸시 알림 메시지를 클릭하여 앱을 열면 자바 스크립트 코드가 실행됩니다. 그러나 WebView는로드되지 않으므로 스크립트 (이벤트 트리거)를 실행할 수 없습니다. 이것이 조건인가, 플러그인을 사용하는 모든 사용자는 동일한 경험을 할 것입니다. 거기에 대한 해결 방법이나 수정 프로그램이 있습니까?

뭐가 잘못 되었나요?

+0

푸시 알림 지점은 앱이 실행되고 있지 않을 때 백그라운드에서 실행된다는 것입니다. 따라서 귀하의 애플 리케이션이 실행되지 않는 경우이 WebView되고, 난 JVM이 WebView를 실행하지 않기 때문에 그것이 네이티브 측면에서 아무것도받을 것이라고 생각하지 않는 이유는 당신의 JS 부분은 ' 앱이 실행되고 있지 않을 때 실행됩니다. 푸시 알림을받을 때 공유 환경 설정 또는 알림 데이터를 저장하는 것이 좋습니다. 앱이 출시 될 때마다 조사하여 반응 할 수 있는지 확인하십시오. – praneetloke

+0

이것은 일반적인 구현이며 나에게 혼란 스럽지만 다른 사람이보고 한 문제는 찾지 못했습니다. – IvenMS

답변

3

나는 간단한 해결책을 찾았습니다. 웹보기가로드되면 GCMIntentService에서, 직전 자바 스크립트 수표를 보내

이 나를 위해 작동
while (GCMPlugin.gwebView == null || GCMPlugin.gwebView.webView == null || !GCMPlugin.gwebView.webView.isEnabled()) { 
    // Wait until webView is enabled 
} 
GCMPlugin.sendJavascript(json); 

이 ... 어쩌면 무한 루프를 방지하기 위해도 시간 제한을 추가하는 것이의 choise이다 (이 shouldn 일이 아니지만 ...)

Davide

3

IvenMS - 나도 같은 문제가있어서 유일한 사람은 아닙니다. praneetloke를 올바르게 이해하면 Push Notifications가 현재 실행되고 있지 않은 PhoneGap 앱에서 작동하지 않습니다.

+0

앱을 실행하지 않는 것 같이 좋은 것은 없습니다. 앱은 항상 백그라운드에서 실행되거나 인스턴스가 실행됩니다. 메시지가 서버에서 푸시되면 응용 프로그램은 JavaCode에서 제어 및 등록 메시지를 가져옵니다. 자바 코드 로깅을 볼 수 있습니다. 코드는 또한 자바 스크립트를 호출하려고 시도합니다. 이때 웹보기가로드되지 않습니다. 알림 메시지를 클릭하면 앱이로드되고 웹보기도 표시됩니다. 그러나 그 시점에 알림 이벤트 (알림 수신시 JavaCode가 시작 함)는 호출되지 않습니다. – IvenMS

4

응용 프로그램이 실행 중이 아닌 경우 GCM-Cordova 플러그인을 사용하면 알림을 올바르게 처리하지 못합니다. 플러그인이 자바 스크립트를 시작할 때 WebView가로드되지 않았기 때문입니다.

솔루션 :

  • 통지가 도착했을 때 일시적으로 메시지 데이터를 저장하는 플러그인 코드를 수정.
  • 이로드 된 데이터를 읽고 데이터를 지우는 방법으로 다른 플러그인을 만들었습니다.
  • deviceready에서 내 맞춤 플러그인 메소드를 호출하고 데이터가 있는지 확인하십시오.
  • 로컬에 저장된 데이터를 지우고 메서드를 호출하여 알림 메시지를 표시합니다.

마지막으로 두 개의 플러그인 (GCM-Cordova 및 사용자 정의 플러그인)을 사용하여이 문제를 해결할 수 있습니다.

+2

메시지에서 보내는 데이터를 사용하여 전화에서 알람을 설정하고 사용자가 앱을 다시 방문하지 않을 수 있기 때문에 문제가 해결되지 않습니다. – BallisticPugh

+0

맞춤 플러그인을 만드는 경우 알림 도착 시간 (또는 사용자가 알림을 클릭 할 때)에 실행됩니다. 사용자 정의 플러그인 코드 내에서 알람 코드를 설정할 수 있습니다. 코드를 공유하고 싶지만 IT 회사에서 근무하며 코드가 엄격하게 보호됩니다. – IvenMS

+0

불행히도 나는 자바 스크립트 콜백 함수 안에 앉아있는 많은 코드를 가지고 있으며, 모든 것을 재 작성하는 실질적인 작업이 될 것이며 시간이 없다. 내 솔루션은 푸시 메시지가 수신 될 때 앱이 실행되고 있지 않으면 앱을 실행 한 다음 푸시 메시지를로드하고 푸시를 처리하는 데 5 초 정도 기다려야합니다. 작동하지만 분명히 사용자가 앱을 실행하지 않으면 앱이 실행되고 있다는 사실에 너무 감동하지 않을 것입니다. – BallisticPugh

관련 문제