【问题标题】:GCM Phonegap, how to send a message to the handset's core notificationsGCM Phonegap,如何向手机的核心通知发送消息
【发布时间】:2019-08-05 00:02:05
【问题描述】:

我已成功设置代码以在 Android 应用上通过 phonegap 运行 GCM。我设法保护了手机注册 ID,并能够在 PHP 脚本中使用此 ID 向应用发送消息。

我唯一的问题是在应用程序打开时消息显示为 javascript 警报,我希望在应用程序运行或未运行时将消息发送到手机的核心通知(类似于什么是应用程序)。

有谁知道 Phonegap 的 GCM 插件是否能够做到这一点?

【问题讨论】:

  • 这个问题你做对了吗?
  • 你能给我指出一个我可以学习这样做的地方吗?我需要在我的 Phonegap Android 应用中实现推送通知

标签: cordova google-cloud-messaging


【解决方案1】:

Mark Nutter 有一个 Android C2DM Phonegap 插件的分支,已转换为使用 GCM。

https://github.com/marknutter/GCM-Cordova

查看 GCM-Cordova/src/com/cordova/gcm/GCMIntentService.java 中的 onMessage 方法,它是 StatusBarNotifications 的好地方。

再看看 onReceive 方法 GCM-Cordova/src/com/google/android/gcm/GCMBroadcastReceiver.java,是Toast弹窗的好地方。

【讨论】:

【解决方案2】:

Mark 的插件效果很好,但在应用程序未运行时我无法让它工作。这是一个已知的错误。

请记住该插件不做系统通知。它只是将数据推送到您的手机……这太棒了,因为它可以让您对这些数据做任何您想做的事情,并且可以用来推送带有一些本机代码的系统通知。

我也有一个大问题,但是当应用程序离线时让它工作。 :(

【讨论】:

  • 有没有可以离线工作的android phonegap 的解决方案。
  • GCM 插件离线工作。它的限制是只是推送通知而不是系统通知。我通过注释掉通过phonegap发送通知的javascript解决了这个问题,而是将数据发送到我自己创建的自定义接收器,它创建了一个系统通知。不幸的是,我要说的是它需要一些本机代码才能工作。
【解决方案3】:

我使用了不同的插件来获取状态栏通知,在以下位置找到它:

https://github.com/phonegap/phonegap-plugins/tree/master/Android/StatusBarNotification

然后在设备上的gcm java脚本的onreceive函数中添加这行代码即可:

window.plugins.statusBarNotification.notify("Put your title here", "Put your message here");

工作得很好,唯一的问题是如何唤醒设备...我会尽快找到答案。

我找到了唤醒设备的方法,抱歉我忘了早点回复:

诀窍是在 JAVA 代码中的 GCM Service 的接收器模块中创建一个挂起的意图,然后该挂起的意图被应用程序的主要活动接收,活动和活动被加载到 ram 中。然后 GCM 服务等待五秒钟,以便主要活动完成加载......然后接收通知并将其发送给科尔多瓦......对我有用,但您可能还想在您提出之前检查活动是否已经在运行待处理的意图。

下面添加GCM服务的代码

//Intent notifyIntent = new Intent("com.cordova2.gcm.MainActivity");

Context context2 = getApplicationContext();

  PendingIntent pendingIntent;
  Intent notifyIntent = new Intent();
  notifyIntent.setClass(context2, com.cordova2.gcm.MainActivity.class);
  pendingIntent =  PendingIntent.getActivity(context2, 0, notifyIntent, 0);
  try {
    pendingIntent.send();
} catch (CanceledException e1) {
    // TODO Auto-generated catch block
    e1.printStackTrace();
}



long endTime = System.currentTimeMillis() + 5*1000;
while (System.currentTimeMillis() < endTime) {
    synchronized (this) {
        try {
            wait(endTime - System.currentTimeMillis());
        } catch (Exception e) {
        }
    }
}

【讨论】:

    【解决方案4】:

    这篇文章让这一切成为现实......

    http://www.adobe.com/devnet/phonegap/articles/android-push-notifications-with-phonegap.html

    在标题为“状态栏通知”的步骤中,我选择使用 java 本机代码而不是 javascript 插件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多