Xtify Cordova 未在应用程序中接收 gcm 推送(仅在从推送启动时)
Posted
技术标签:
【中文标题】Xtify Cordova 未在应用程序中接收 gcm 推送(仅在从推送启动时)【英文标题】:Xtify Cordova not receiving gcm push in app (only on launch from push) 【发布时间】:2012-09-06 21:29:46 【问题描述】:新下载的 XtifyCordovaSample 1.3.1 - 正确配置并接收 gcm 推送消息,但是 cordova (javascript) 仅在从通知中心启动时接收它们。
我希望示例“收到通知”即使在应用程序打开时也会更新推送消息内容。
任何提示还是设计使然?
【问题讨论】:
【参考方案1】:这是设计使然,如果您只想在应用打开时接收通知,您需要在扩展 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。
【讨论】:
谢谢,虽然我想在后台和前台接收推送(对于有效载荷数据有用——这对我们来说是许多后备之一..)。最后我们破解了它,看看我的答案..【参考方案2】:这是用于在前台运行的应用程序中接收推送通知的 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..
【讨论】:
以上是关于Xtify Cordova 未在应用程序中接收 gcm 推送(仅在从推送启动时)的主要内容,如果未能解决你的问题,请参考以下文章
Cordova 5 未在 XCode 中处理新的 ios 应用程序目标
外部图像未在 Android 应用程序中显示 - Meteor - Cordova
jQuery Mobile 可折叠“展开”事件未在 Cordova 应用程序中触发