新しくダウンロードした XtifyCordovaSample 1.3.1 - 正しく構成され、gcm プッシュ メッセージを受信しますが、コルドバ (javascript) は、通知センターから起動されたときにのみメッセージを受信します。
アプリが開いている場合でも、例の「通知の受信」がプッシュ メッセージの内容で更新されることを期待します。
ヒントはありますか、これは設計によるものですか?
新しくダウンロードした XtifyCordovaSample 1.3.1 - 正しく構成され、gcm プッシュ メッセージを受信しますが、コルドバ (javascript) は、通知センターから起動されたときにのみメッセージを受信します。
アプリが開いている場合でも、例の「通知の受信」がプッシュ メッセージの内容で更新されることを期待します。
ヒントはありますか、これは設計によるものですか?
これは仕様によるものです。アプリが開いているときにのみ通知を受け取りたい場合は、アクティビティでDroidGapを拡張する次のことを行う必要があります。
package com.xtify.cordova.samples;
import android.content.Context;
import android.content.IntentFilter;
import android.os.Bundle;
import com.xtify.cordova.XtifyCordovaPlugin;
import com.xtify.sdk.api.XtifyBroadcastReceiver;
public class MainActivity extends org.apache.cordova.DroidGap {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.loadUrl("file:///android_asset/www/index.html");
}
@Override
protected void onResume() {
super.onResume();
this.registerReceiver(this.xtifyReceiver, new IntentFilter(
"com.xtify.sdk.NOTIFIER"));
}
@Override
protected void onPause() {
super.onPause();
this.unregisterReceiver(this.xtifyReceiver);
}
private XtifyBroadcastReceiver xtifyReceiver = new XtifyBroadcastReceiver() {
@Override
protected void onRegistered(Context arg0) {
// no-op
}
@Override
protected void onMessage(Context arg0, Bundle msgExtras) {
XtifyCordovaPlugin.processActivityExtras(msgExtras,
MainActivity.this);
}
@Override
protected void onC2dmError(Context arg0, String arg1) {
// no-op
}
};
}
また、com.xtify.cordova.XtifyCordovaPlugin.processActivityExtrasメソッドを次のように変更する必要があります。
public static void processActivityExtras(Bundle msgExtras, DroidGap dg) {
if (msgExtras != null && (msgExtras.getString("com.xtify.sdk.NOTIFICATION_TITLE") != null)) {
try {
JSONObject data = new JSONObject();
for (String key : msgExtras.keySet()) {
data.put(key, msgExtras.getString(key));
}
Context context = dg.getApplicationContext().getApplicationContext();
String eventCallBackName = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE).getString(KEY_CALLBACK, "");
String js = "javascript:" + eventCallBackName + "(" + data.toString() + ")";
dg.sendJavascript(js);
} catch (JSONException e) {
Log.e(TAG, "Error processing activity extras", e);
}
}
}
また、XtifyコンソールまたはPushAPIで通知アクションをNONEに設定していることを確認してください。
これは、フォアグラウンドで実行中のアプリでもプッシュ通知を受信するためのハックなコードです (ペイロード データに役立ちます..)
(xtify cordova サンプルから作業)
@Override public void onCreate の前にこれを追加します。
private static MainActivity single;
public static MainActivity get() { return single; }
public MainActivity() {
super();
single = this;
}
これにより、次を呼び出すことができます。
XtifyCordovaPlugin.processActivityExtras(msgExtras, MainActivity.get());
XtifyNotifier.java onMessage 関数で..したがって、プッシュはフォアグラウンドで受信され、cordova/javascript に渡されます..