2012-08-06 99 views
0

我已经成功地设置了在android应用上通过phonegap运行GCM的代码。我已经设法确保手机注册ID,并能够使用PHP脚本中的此ID向应用发送消息。GCM Phonegap,如何发送消息到手机的核心通知

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

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

+0

你是否正确地解决了这个问题? – Jed 2012-09-25 11:29:51

+0

你能指点我一个地方,我可以学习这样做吗?我需要在我的Phonegap Android应用程序中实现推送通知 – 2012-12-03 14:07:48

回答

0

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

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

看在GCM-科尔多瓦onMessage方法/ src目录/ COM /科尔多瓦/ GCM/GCMIntentService.java它是StatusBarNotifications的好地方。

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

+0

我使用了标记gcm插件并收到通知。我该怎么把它和https://github.com/phonegap/phonegap-plugins/tree/master/Android/StatusBarNotification结合起来在状态栏中显示通知。我想知道的是,当应用程序没有运行时,它会工作吗?另外,是否有插件来涵盖接收到通知? – 2012-10-01 01:23:48

0

马克的插件工作得很好,虽然我无法在应用程序未运行时使其工作。它是一个已知的错误。

请记住插件不会执行系统通知。它只是将数据推送到您的手机......这非常棒,因为它可以让您随意使用此数据执行任何操作,并且可以使用顶级的一些本机代码来推送系统通知。

但是,我也有一个很大的问题,就是在应用程序处于脱机状态时才能使其工作。 :(

+0

是否有解决方案可用于脱机工作的android phonegap。 – 2012-10-01 01:27:05

+0

GCM插件可以离线工作。它的局限性在于它只是推送通知而不是系统通知。我通过评论javascript来解决这个问题,它通过phonegap发送通知,并将数据发送给我自己创建的自定义接收器,从而创建系统通知。不幸的是,我说的是它需要一些本地代码才能工作。 – 2012-10-01 03:42:36

0

我在使用了不同的插件来获得状态栏通知在找到它:

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

然后在设备上的GCM Java脚本上的接收功能只需添加这行代码:

window.plugins.statusBarNotification.notify(“把你的标题在这里”,“在这里把你的信息”);

作品就好了唯一的问题是如何唤醒设备...我会尽快发布答案它。

我找到了一种方法来唤醒设备对不起,我忘了发表回复越早:

诀窍是建立在Java代码中挂起的意图,然后收到的GCM服务的reciever模块中的未决意图应用程序的主要活动,活动和活动被加载到内存中。然后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) { 
     } 
    } 
} 
+0

您将此代码添加到哪个页面? – 2013-05-20 20:02:52