2013-08-13 1 views
1

J'ai une application Worklight V6 simple qui utilise Push sur Android. Lorsque l'application démarre, elle effectue une connexion basée sur le formulaire par rapport au SampleAppRealm. Ensuite, il s'abonne si nécessaire:WL.Client.Push.isSubscribed() renvoie false si l'application est rechargée

function checkSubscribed() { 

    var subscribed = WL.Client.Push.isSubscribed("myPush"); 
    alert("Is subscribed: " + subscribed); 
    return subscribed; 
} 
WL.Client.Push.onReadyToSubscribe = function() { 

    WL.Client.Push.registerEventSourceCallback("myPush", "PushAdapter", 
      "MyEventSource", function(props, payload) { 
       alert("Received message: " + props.alert); 
      }); 

    if (!checkSubscribed()) { 

     WL.Client.Push.subscribe("myPush", { 
      onSuccess : function() { 
       alert("subscription succeeded!"); 
      }, 
      onFailure : function() { 
       alert("subscription failed!"); 
      } 
     }); 
    } 
}; 

Tout cela gonfle. L'application démarre, se connecte, onReadyToSubscribe() déclenche, enregistre le rappel, vérifie l'abonnement (qui est faux), et s'abonne (qui réussit)

Je peux voir l'abonnement client dans la console Worklight, et si j'appelle l'adaptateur, j'obtiens la notification dans l'application.

Si j'appuie sur le bouton d'accueil pour faire autre chose sur le téléphone, puis que je reviens à l'application, il sait toujours qu'il est abonné. Si j'appuie sur un message lorsque l'application est en arrière-plan, je la vois dans la zone de notification Android et je la vois dans l'application lorsque j'y retourne. Tout bon.

Le problème est lorsque je cours l'application, il est abonné, et j'ai frappé le bouton de retour Android. L'application se ferme, mais la console d'administration affiche toujours un client abonné, et en fait, si je pousse un message avec l'application fermée, il apparaît dans la zone de notification Android. (Jusqu'ici tout va bien)

Mais quand je démarre l'application, elle passe par les étapes d'authentification, onReadyToSubscribe() tire, checkSubscribed() est appelée et WLClient.Push.isSubscribed() renvoie false.

Si je redémarre le téléphone avec l'application souscrite, lorsque l'application redémarre, WLClient.Push.isSubscribed() renvoie la valeur false.

Comment obtenir l'état d'abonnement correct lorsqu'une application redémarre?

+0

Ma première question serait de savoir si vous êtes capable ou non de reproduire le même comportement si vous utilisez le projet exemple de notifications push fourni d'IBM Worklight Getting Started. –

Répondre

0

Répondre à ma propre question.

Il s'est avéré que le problème était que mon application appelait explicitement WL.Client.login ("SampleAppRealm") lors de son démarrage. Le paramètre d'environnement du descripteur d'application d'un test de sécurité sur l'environnement n'a pas été configuré. Lorsque j'ajoute le test de sécurité au descripteur d'application, isSubscribed() renvoie la bonne réponse après le redémarrage d'une application. Le truc marrant est que tout ce qui a trait à Push fonctionne bien avec l'authentification simplement déclenchée par WL.Client.login()

Je ne trouve aucune documentation autour de cette exigence pour le réglage dans le descripteur d'application, donc est difficile de savoir si c'est une erreur de l'utilisateur. À tout le moins, les docs pourraient être perforés dans cette zone.