首页 文章

Xtify Cordova没有在应用程序中接收gcm推送(仅在推送时启动)

提问于
浏览
0

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

我希望即使应用程序处于打开状态,也会使用推送消息内容更新示例“通知已接收” .

任何提示还是这个设计?

2 回答

  • 0

    这是设计使然,如果您只想在应用程序打开时接收通知,则需要在扩展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

    这是在前台运行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 ..

相关问题