【问题标题】:Xtify Cordova not receiving gcm push in app (only on launch from push)Xtify Cordova 未在应用程序中接收 gcm 推送(仅在从推送启动时)
【发布时间】:2012-09-06 21:29:46
【问题描述】:

新下载的 XtifyCordovaSample 1.3.1 - 正确配置并接收 gcm 推送消息,但是 cordova (javascript) 仅在从通知中心启动时接收它们。

我希望示例“收到通知”即使在应用程序打开时也会更新推送消息内容。

任何提示还是设计使然?

【问题讨论】:

    标签: cordova google-cloud-messaging xtify


    【解决方案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..

    【讨论】:

      猜你喜欢
      • 2017-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-11
      • 2012-10-10
      相关资源
      最近更新 更多