新下载的XtifyCordovaSample 1.3.1 - 正确配置并接收gcm推送消息,但是cordova(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控制台或Push API中将通知操作设置为 NONE .
这是在前台运行app中接收推送通知的hackish代码(对有效负载数据有用..)
(使用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 ..
2 回答
这是设计使然,如果您只想在应用程序打开时接收通知,则需要在扩展DroidGap的活动中进行以下操作:
此外,您还需要将com.xtify.cordova.XtifyCordovaPlugin.processActivityExtras方法修改为以下内容:
另外,请确保在Xtify控制台或Push API中将通知操作设置为 NONE .
这是在前台运行app中接收推送通知的hackish代码(对有效负载数据有用..)
(使用xtify cordova样本工作)
在@Override public void onCreate之前添加:
这使我们能够致电:
XtifyCordovaPlugin.processActivityExtras(msgExtras,MainActivity.get());
在XtifyNotifier.java onMessage函数..因此推送在前台接收并传递给cordova / javascript ..