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"));
}
}
}
는 그래서는 작업등 하이브리드 응용 프로그램은 기본에 대한 푸시 알림을 지원하지 않습니다 의미 페이지? 시나리오가 다음과 같은 경우에도 - 하이브리드 시작 >> WL.NativePage.show를 사용하여 기본 페이지로 이동 >> 알림을 받고 Worklight Native API를 사용하여 수신 된 페이로드를 처리합니다. – Sengsiong
WL.NativePage에서 알림의 페이로드에 대해 작업을 수행하려는 경우 설명서에 표시된대로 데이터로 전송하십시오. –
하이브리드 앱의 "WL.Client.Push.registerEventSourceCallback"처리기에 "WL.NativePage.show"를 추가하여 제안한 방법을 테스트 할 수있었습니다. 그러나 응용 프로그램이 기본 페이지에 있고 다른 알림 메시지가 들어 오면 하이브리드 알림 메시지 처리기로 처리되는 대신 알림이 알림 바에 대신 표시됩니다. – Sengsiong