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 推送(仅在从推送启动时)的主要内容,如果未能解决你的问题,请参考以下文章

JQuery 未在 Cordova 中执行

Cordova 5 未在 XCode 中处理新的 ios 应用程序目标

外部图像未在 Android 应用程序中显示 - Meteor - Cordova

jQuery Mobile 可折叠“展开”事件未在 Cordova 应用程序中触发

mailto:链接未在 Cordova 应用程序中打开 Android 上的邮件应用程序

地图未在 Cordova Android 中显示