0

Ich versuche, Push-Benachrichtigungen auf iOS zu behandeln.Titanium: Überprüfen Sie iOS-Benachrichtigungen beim Öffnen der App, ohne auf die Benachrichtigung zu klicken

Meine einfache Code sieht etwas wie folgt aus:

var Cloud = require("ti.cloud"); 
var deviceToken = null; 

var deviceToken = Ti.App.Properties.getString('deviceToken'); 

Ti.App.iOS.registerUserNotificationSettings({ 
    types: [ 
     Ti.App.iOS.USER_NOTIFICATION_TYPE_ALERT, 
     Ti.App.iOS.USER_NOTIFICATION_TYPE_SOUND, 
     Ti.App.iOS.USER_NOTIFICATION_TYPE_BADGE 
    ] 
}); 

Ti.App.iOS.addEventListener('usernotificationsettings', function registerForPush() { 
    Ti.App.iOS.removeEventListener('usernotificationsettings', registerForPush); 

    Ti.Network.registerForPushNotifications({ 
     success: function(e) { 
      if (e.deviceToken !== Ti.App.Properties.getString('deviceToken', null)) { 
       deviceToken = e.deviceToken; 
       Ti.App.Properties.setString('deviceToken', deviceToken) 
       subscribeToChannel(); 
      } else { 
       Ti.API.info('Already registered for push notifications!'); 
      } 
     }, 
     error: function(e) { 
      Ti.API.error('Failed to register for push notifications: ' + e.error); 
     }, 
     callback: receivePush 
    }); 

}); 

function subscribeToChannel() { 
    Cloud.PushNotifications.subscribeToken({ 
     device_token: deviceToken, 
     channel: 'general', 
     type: Ti.Platform.name == 'android' ? 'android' : 'ios' 
    }, function (e) { 
      alert(e.success === true ? 'Subscribed' : 'Error!'); 
    }); 
} 

// When receieve interactive remote notification 
Ti.App.iOS.addEventListener('remotenotificationaction', function(e) { 
    alert('remotenotificationaction: ' + JSON.stringify(e)); 
}); 

// When receieve interactive notification in the background 
Ti.App.iOS.addEventListener('localnotificationaction', function(e) { 
    alert('localnotificationaction'); 
}); 

// When receieve interactive notification in the foreground 
Ti.App.iOS.addEventListener('notification', function(e) { 
    alert('notification'); 
}); 

function receivePush(e) { 
    alert('receivePush'); 
} 

Zum größten Teil in Ordnung alles funktioniert. Folgendes passiert, wenn ich eine Remote-Push-Benachrichtigung sende:

  • Wenn sich die App im Hintergrund befindet, wird eine Benachrichtigung angezeigt. Nach dem Klicken auf die Benachrichtigung, bekomme ich die "receivePush" Nachricht, wie erwartet
  • Wenn die App im Vordergrund ist, wird eine Benachrichtigung nicht angezeigt, aber ich bekomme immer noch die "receivePush" Nachricht, wie erwartet.
  • Wenn ich jedoch eine Benachrichtigung erhalte, während sich die App im Hintergrund befindet, und dann direkt auf die App klicke (d. H. Nicht auf die Benachrichtigung klicke), wird keines der oben genannten Ereignisse ausgelöst!
  • Wie kann ich sicherstellen, dass ein Ereignis für den letzten Fall ausgelöst wird.

    Antwort

    1

    Ich glaube nicht, dass dies möglich ist, da Ihre Callback-Funktion mit einem Benachrichtigungsverhalten, nicht App-Start zugeordnet ist. Dies ist kein Titanium-Problem, sondern ein Workflow-Missverständnis, wenn Sie wissen, was ich meine. Ich denke für Sie ist es am besten, immer etwas zu überprüfen, wenn die App startet, nicht im Zusammenhang mit Benachrichtigungen.

    +0

    Ich denke, ich verstehe, was Sie meinen, aber es muss zumindest einen Rückruf geben, wenn ich nur eine Benachrichtigung erhält, wenn die App im Hintergrund läuft und die Benachrichtigung noch nicht angeklickt wurde. –

    Verwandte Themen