2014-04-07 2 views
1

Android 환경과 함께 Worklight 기반 하이브리드 애플리케이션을 생성합니다.IBM Worklight - 기본 페이지에서 푸시 알림 처리

내 응용 프로그램에 푸시 알림이 구성되어 있습니다. 현재 들어오는 알림을 처리하고 팝업 상자에 메시지 페이로드를 표시 할 수 있습니다.

하이브리드 앱 (기본 페이지는 WL.NativePage.show으로 시작됨)의 기본 부분에서 동일한 작업을 수행하고 싶습니다.

그러나 밀어 넣기 개체에 registerEventSourceCallback 처리기를 등록하려고 할 때 몇 가지 문제가 발생합니다.

내가 뭘 잘못하고 있니?

활동 (기본 페이지) :

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     WLClient client = WLClient.createInstance(this); 
     WLPush push = client.getPush(); // throws exception here 
     push.registerEventSourceCallback("myAndroid", "PushAdapter","PushEventSource", new PushNotificationListener()); 
     ... 
    } 

예외 :

04-07 09:37:39.552: E/AndroidRuntime(6562): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.Marinet/com.Marinet.HelloNative}: java.lang.IllegalArgumentException: Receiver not registered: [email protected] 
04-07 09:37:39.552: E/AndroidRuntime(6562): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2073) 
04-07 09:37:39.552: E/AndroidRuntime(6562): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2098) 
04-07 09:37:39.552: E/AndroidRuntime(6562): at android.app.ActivityThread.access$600(ActivityThread.java:138) 
04-07 09:37:39.552: E/AndroidRuntime(6562): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1204) 
04-07 09:37:39.552: E/AndroidRuntime(6562): at android.os.Handler.dispatchMessage(Handler.java:99) 
04-07 09:37:39.552: E/AndroidRuntime(6562): at android.os.Looper.loop(Looper.java:137) 
04-07 09:37:39.552: E/AndroidRuntime(6562): at android.app.ActivityThread.main(ActivityThread.java:4905) 
04-07 09:37:39.552: E/AndroidRuntime(6562): at java.lang.reflect.Method.invokeNative(Native Method) 
04-07 09:37:39.552: E/AndroidRuntime(6562): at java.lang.reflect.Method.invoke(Method.java:511) 
04-07 09:37:39.552: E/AndroidRuntime(6562): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790) 
04-07 09:37:39.552: E/AndroidRuntime(6562): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557) 
04-07 09:37:39.552: E/AndroidRuntime(6562): at dalvik.system.NativeStart.main(Native Method) 
04-07 09:37:39.552: E/AndroidRuntime(6562): Caused by: java.lang.IllegalArgumentException: Receiver not registered: [email protected] 
04-07 09:37:39.552: E/AndroidRuntime(6562): at android.app.LoadedApk.forgetReceiverDispatcher(LoadedApk.java:654) 
04-07 09:37:39.552: E/AndroidRuntime(6562): at android.app.ContextImpl.unregisterReceiver(ContextImpl.java:1211) 
04-07 09:37:39.552: E/AndroidRuntime(6562): at android.content.ContextWrapper.unregisterReceiver(ContextWrapper.java:378) 
04-07 09:37:39.552: E/AndroidRuntime(6562): at com.google.android.gcm.GCMRegistrar.onDestroy(GCMRegistrar.java:266) 
04-07 09:37:39.552: E/AndroidRuntime(6562): at com.worklight.wlclient.api.WLPush.unregisterReceivers(WLPush.java:654) 
04-07 09:37:39.552: E/AndroidRuntime(6562): at com.worklight.wlclient.api.WLPush.<init>(WLPush.java:176) 
04-07 09:37:39.552: E/AndroidRuntime(6562): at com.worklight.wlclient.api.WLClient.getPush(WLClient.java:673) 
04-07 09:37:39.552: E/AndroidRuntime(6562): at com.Marinet.HelloNative.onCreate(HelloNative.java:53) 
04-07 09:37:39.552: E/AndroidRuntime(6562): at android.app.Activity.performCreate(Activity.java:5244) 
04-07 09:37:39.552: E/AndroidRuntime(6562): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1082) 
04-07 09:37:39.552: E/AndroidRuntime(6562): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2037) 
04-07 09:37:39.552: E/AndroidRuntime(6562): ... 11 more 

가능한 해결 방법 : -

public class GCMIntentService extends com.worklight.androidgap.push.GCMIntentService { 
    @Override 
    protected void onMessage(Context context, Intent intent) { 
     if (!MyNativePage.isForeground()) { 
      // custom native page is not in foreground, handle it using existing WL methods 
      super.onMessage(context, intent); 
     } else { 
      // custom native page is in foreground, skip existing WL method and use custom method 
      MyNativePage.setNotificationMessage(intent.getExtras().getString("payload")); 
     } 
    } 
} 

답변

0

W orklight에는 2 개의 푸시 구현이 포함되어 있습니다. 하나는 하이브리드 응용 프로그램 용이고 다른 하나는 Worklight Native API를 사용하는 네이티브 응용 프로그램 용입니다.

은 함께 작동하지 않습니다.. 즉, 하이브리드 앱에서 알림을받을 수 없다는 의미입니다. WL.NativePage.show >>을 사용하여 기본 페이지로 이동 한 다음 푸시에 Worklight Native API를 사용하여 수신 된 페이로드를 처리합니다.

하이브리드 앱에서 알림을 받고 기본 페이지를로드 할 때 페이로드를 전달합니다. 기본에 하이브리드에서

데이터 전달은 다음 교육 모듈 설명 및 시연된다

+0

는 그래서는 작업등 하이브리드 응용 프로그램은 기본에 대한 푸시 알림을 지원하지 않습니다 의미 페이지? 시나리오가 다음과 같은 경우에도 - 하이브리드 시작 >> WL.NativePage.show를 사용하여 기본 페이지로 이동 >> 알림을 받고 Worklight Native API를 사용하여 수신 된 페이로드를 처리합니다. – Sengsiong

+0

WL.NativePage에서 알림의 페이로드에 대해 작업을 수행하려는 경우 설명서에 표시된대로 데이터로 전송하십시오. –

+0

하이브리드 앱의 "WL.Client.Push.registerEventSourceCallback"처리기에 "WL.NativePage.show"를 추가하여 제안한 방법을 테스트 할 수있었습니다. 그러나 응용 프로그램이 기본 페이지에 있고 다른 알림 메시지가 들어 오면 하이브리드 알림 메시지 처리기로 처리되는 대신 알림이 알림 바에 대신 표시됩니다. – Sengsiong

관련 문제