2014-01-07 242 views
3

我開發了一個使用推送插件的phonegap應用程序。我創建了一個示例服務器,並且推送消息未顯示在通知欄中,但消息正在進入應用程序。請幫助推送通知未顯示

我的代碼是

VAR pushNotification;

 function onDeviceReady() { 
      $("#app-status-ul").append('<li>deviceready event received</li>'); 

      document.addEventListener("backbutton", function(e) 
      { 
       $("#app-status-ul").append('<li>backbutton event received</li>'); 

       if($("#home").length > 0) 
       { 
        // call this to get a new token each time. don't call it to reuse existing token. 
        //pushNotification.unregister(successHandler, errorHandler); 
        e.preventDefault(); 
        navigator.app.exitApp(); 
       } 
       else 
       { 
        navigator.app.backHistory(); 
       } 
      }, false); 

      try 
      { 
       pushNotification = window.plugins.pushNotification; 
       if (device.platform == 'android' || device.platform == 'Android') { 
        $("#app-status-ul").append('<li>registering android</li>'); 
        pushNotification.register(successHandler, errorHandler, {"senderID":"599322667326","ecb":"onNotificationGCM"});  // required! 
       } else { 
        $("#app-status-ul").append('<li>registering iOS</li>'); 
        pushNotification.register(tokenHandler, errorHandler, {"badge":"true","sound":"true","alert":"true","ecb":"onNotificationAPN"}); // required! 
       } 
      } 
      catch(err) 
      { 
       txt="There was an error on this page.\n\n"; 
       txt+="Error description: " + err.message + "\n\n"; 
       alert(txt); 
      } 
     } 

     // handle APNS notifications for iOS 
     function onNotificationAPN(e) { 
      if (e.alert) { 
       $("#app-status-ul").append('<li>push-notification: ' + e.alert + '</li>'); 
       navigator.notification.alert(e.alert); 
      } 

      if (e.sound) { 
       var snd = new Media(e.sound); 
       snd.play(); 
      } 

      if (e.badge) { 
       pushNotification.setApplicationIconBadgeNumber(successHandler, e.badge); 
      } 
     } 

     // handle GCM notifications for Android 
     function onNotificationGCM(e) { 
      $("#app-status-ul").append('<li>EVENT -> RECEIVED:' + e.event + '</li>'); 

      switch(e.event) 
      { 
       case 'registered': 
       if (e.regid.length > 0) 
       { 
        $("#app-status-ul").append('<li>REGISTERED -> REGID:' + e.regid + "</li>"); 
        // Your GCM push server needs to know the regID before it can push to this device 
        // here is where you might want to send it the regID for later use. 
        console.log("regID = " + e.regid); 
       } 
       break; 

       case 'message': 
        // if this flag is set, this notification happened while we were in the foreground. 
        // you might want to play a sound to get the user's attention, throw up a dialog, etc. 
        if (e.foreground) 
        { 
         $("#app-status-ul").append('<li>--INLINE NOTIFICATION--' + '</li>'); 

         // if the notification contains a soundname, play it. 
         var my_media = new Media("/android_asset/www/"+e.soundname); 
         my_media.play(); 
        } 
        else 
        { // otherwise we were launched because the user touched a notification in the notification tray. 
         if (e.coldstart) 
          $("#app-status-ul").append('<li>--COLDSTART NOTIFICATION--' + '</li>'); 
         else 
         $("#app-status-ul").append('<li>--BACKGROUND NOTIFICATION--' + '</li>'); 
        } 

        $("#app-status-ul").append('<li>MESSAGE -> MSG: ' + e.payload.message + '</li>'); 
        $("#app-status-ul").append('<li>MESSAGE -> MSGCNT: ' + e.payload.msgcnt + '</li>'); 
       break; 

       case 'error': 
        $("#app-status-ul").append('<li>ERROR -> MSG:' + e.msg + '</li>'); 
       break; 

       default: 
        $("#app-status-ul").append('<li>EVENT -> Unknown, an event was received and we do not know what it is</li>'); 
       break; 
      } 
     } 

     function tokenHandler (result) { 
      $("#app-status-ul").append('<li>token: '+ result +'</li>'); 
      // Your iOS push server needs to know the token before it can push to this device 
      // here is where you might want to send it the token for later use. 
     } 

     function successHandler (result) { 
      $("#app-status-ul").append('<li>success:'+ result +'</li>'); 
     } 

     function errorHandler (error) { 
      $("#app-status-ul").append('<li>error:'+ error +'</li>'); 
     } 

     document.addEventListener('deviceready', onDeviceReady, true); 

    </script> 
+0

檢查圖標是否丟失。因爲沒有圖標通知不能顯示。圖標爲您的應用程序 –

回答

1

在GCMIntentService.java的onMessage()函數中添加幾行代碼:

String message = extras.getString("message"); 
String title = extras.getString("title"); 
Notification notif = new Notification(android.R.drawable.btn_star_big_on, message, System.currentTimeMillis()); 
notif.flags = Notification.FLAG_AUTO_CANCEL; 
notif.defaults |= Notification.DEFAULT_SOUND; 
notif.defaults |= Notification.DEFAULT_VIBRATE; 

Intent notificationIntent = new Intent(context, TestSampleApp.class); 
notificationIntent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); 
PendingIntent contentIntent = PendingIntent.getActivity(context, 0, notificationIntent, 0); 

notif.setLatestEventInfo(context, title, message, contentIntent); 
String ns = Context.NOTIFICATION_SERVICE; 
NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(ns); 
mNotificationManager.notify(1, notif) 

和進口這些軟件包

import android.app.Notification; 
import android.app.NotificationManager; 
import android.app.PendingIntent; 
+0

謝謝,它的工作 – varghesekutty

+0

這仍然是必要的嗎? iOS需要什麼? –

+0

@DavidNathan我想我發佈了舊版本的答案。您可以檢查更新後的來源。 –