旧的推送通知未出现在 android 设备上

Posted

技术标签:

【中文标题】旧的推送通知未出现在 android 设备上【英文标题】:old push notifications not appearing on android device 【发布时间】:2013-10-05 02:31:44 【问题描述】:

我正在尝试使用 phonegap 插件和 GCM(Google Cloud Messaging)服务为我的 android 应用程序集成推送通知。我基本上已经按照本教程在客户端 http://devgirl.org/2013/07/17/tutorial-implement-push-notifications-in-your-phonegap-application/ 的所有步骤通过 phonegap 插件注册设备。

    我已经通过 git phonegap 本地插件添加了 phonegap 插件,如上述教程的“第 1 部分:配置您的应用程序以使用 PushPlugin”。

    在 index.js 文件中,我添加了上述教程“第 2 部分:向 Google Cloud Messaging 服务注册应用程序”中提到的以下方法。

     successHandler: function(result) 
          alert('Callback Success! Result = '+result)
     ,
     errorHandler:function(error) 
          alert(error);
     ,
     onNotificationGCM: function(e) 
          switch( e.event )
          
             case 'registered':
                if ( e.regid.length > 0 )
                
                    console.log("Regid " + e.regid);
                    alert('registration id = '+e.regid);
                
                break;
    
             case 'message':
                // this is the actual push notification. its format depends on the data model from the push server
                alert('message = '+e.message+' msgcnt = '+e.msgcnt);
             break;
    
             case 'error':
                alert('GCM error = '+e.msg);
                break;
    
             default:
               alert('An unknown GCM event has occurred');
               break;
         
    
    

为了从应用服务器发送通知,我使用 HTTP POST 到 https://android.googleapis.com/gcm/send,请求正文为 json 格式。


    “registration_ids” : ["APA....."],
    “data” : 
           “title” : “My Title”,
           “message” : “My Msg”,
           “msgcnt” : “1"
    

我可以在我的设备上正确接收通知。我不确定我在代码中遗漏了什么,但我遇到了这些问题。

    在我设备的通知区域中,当多条消息相继发送时,我只能看到最后一条消息。看起来最后一条消息覆盖了旧消息。我希望所有警报在发送时一个接一个地列在设备上。

    当设备被锁定时,通知不会出现在屏幕顶部。

如何解决这些问题?我是移动开发的新手,非常感谢您的帮助。提前致谢!

【问题讨论】:

请将您的代码粘贴到您生成通知的位置 Mittal,我基本上是按照上面教程的第 1 部分和第 2 部分通过 GCM 服务注册设备,并使用纯 HTTP Post 将消息发送到设备。我在这个逻辑中错过了什么吗?提前致谢! 【参考方案1】:

新通知覆盖旧通知可能是因为您在 notify 方法中使用了相同的 id。使用唯一 ID,您将收到多个通知。

关于第二个问题,read this。

【讨论】:

感谢您的回复。关于第一个答案,我在任何地方都没有任何通知方法。这是一个简单的 HTTP 帖子,将消息发送给用户。我需要有任何特殊的 java 包装器吗?你能给我提供更多信息吗?同样对于第二个答案,我在客户端或服务器端都没有涉及此流程的任何 Java 代码。我是否需要任何特殊的包装来解决这些问题?你能再澄清一下吗?非常感谢! 感谢您的帮助,伊兰。在我修改了 notify 方法中的 id 之后,这才起作用。 你是怎么做到的@user2848482?我也在使用 HTTP。【参考方案2】:

用于在设备锁定时获取通知。

公共抽象类 WakeLocker 私有静态 PowerManager.WakeLock wakeLock;

    public static void acquire(Context context) 
        if (wakeLock != null)
            wakeLock.release();

        PowerManager pm = (PowerManager) context
                .getSystemService(Context.POWER_SERVICE);
        wakeLock = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK
                | PowerManager.ACQUIRE_CAUSES_WAKEUP
                | PowerManager.ON_AFTER_RELEASE, "WakeLock");
        wakeLock.acquire();
    

    public static void release() 
        if (wakeLock != null)
            wakeLock.release();
        wakeLock = null;
    

还将以下权限添加到您的清单中。

 <!-- Keeps the processor from sleeping when a message is received. -->
    <uses-permission android:name="android.permission.WAKE_LOCK" /> 

【讨论】:

感谢您的回复。关于第二个答案,我目前在客户端或服务器端都没有涉及此流程的任何 Java 代码。我是否需要任何特殊的包装来解决这些问题?你能再澄清一下吗?非常感谢! 亲爱的,我所做的将 phonegap 与 android 集成以进行推送通知是我用 java 编码并将其用作我 index.html 中的插件 感谢您的回复。米塔尔,我能在互联网上看到任何例子吗?非常感谢!

以上是关于旧的推送通知未出现在 android 设备上的主要内容,如果未能解决你的问题,请参考以下文章

Worklight 6.2:成功发送标签推送通知,但在 android 设备上未收到

某些 android 设备未收到 GCM 推送通知

在android中未收到推送通知

推送通知未在 Android 上显示

推送示例android gcm,已注册设备但未收到推送通知

Android 推送通知未收到