2013-03-07 2 views
1

J'ai écrit un système de messagerie simple, qui permet d'envoyer de brefs messages depuis l'interface Web vers des périphériques, sous forme de notification push.Apple push notifications - accusé de réception

Sur android, tout s'est bien passé, une fois que l'appareil reçoit une notification, il renvoie le reçu de confirmation de livraison au serveur, puis lit l'accusé de réception. Évidemment, la confirmation de livraison arrive souvent lorsque l'application est en cours d'exécution ou que le téléphone est en veille.

J'ai écrit une application similaire pour iOS. Comment étais-je étonné de cette application: didReceiveRemoteNotification n'est pas appelé quand l'application n'est pas active!

Est-il vraiment impossible de suivre la livraison des messages sans intervention de l'utilisateur lorsque l'application n'est pas active? D'autres ont suggéré de conserver le journal des messages sur le serveur et de les envoyer lorsque l'application s'ouvre, mais cela nécessite toujours une interaction de l'utilisateur.

Existe-t-il un moyen de contourner la restriction Apple sur les services d'arrière-plan? Puis-je faire en sorte que mon application utilise le service de son ou de localisation pour permettre une simple demande POST en arrière-plan?

Répondre

0

http://cydia.saurik.com/package/backgrounder

Vérifiez que dehors, pour ième source, cliquez sur la page développeurs.

Si ce n'est pas la manière des pommes, il n'y a aucun moyen.

C'est là que le jailbreaking entre en jeu. Vous devrez peut-être rendre votre appli jailbreak compatible et profiter de beaucoup plus de puissance.

Je dirais que pour ce que vous cherchez, faites une nouvelle version de Backgrounder qui fonctionne comme vous en avez besoin.

+0

Maintenant, c'est génial, mais je ne peux pas convaincre tous les utilisateurs de JB là dispositifs ... – selytch

+0

Il ya des dizaines de millions d'utilisateurs de jailbreak, dont des millions seront heureux de payer pour votre application. J'ai moi-même dépensé beaucoup de dollars sur des réglages pour mon téléphone qui font tellement mieux que Apple le fera jamais. Ne vous découragez pas en entrant dans une communauté différente, il est très puissant de lancer des applications de jailbreak et la sensibilisation est loin! – NicholasLAranda

2

La mauvaise utilisation des services d'arrière-plan est un bon moyen de faire rejeter votre application. Apple est assez strict sur ce qu'une application peut faire en arrière-plan.

En tant qu'utilisateur, si je découvrais qu'une application que j'avais installée faisait des requêtes Web en arrière-plan sans raison valable, elle serait rapidement effacée! Les notifications push sont un message unidirectionnel - il n'y a aucune garantie qu'une notification ait été envoyée, même si elle n'a pas été lue. Je vous suggère de lire sur le APNS here.

+0

J'ai lu la documentation. Mais tout le but du programme est de confirmer la livraison - en particulier lorsque vous travaillez en arrière-plan. C'est pourquoi un utilisateur le téléchargerait en premier lieu. – selytch

0

Lorsque l'application n'est pas dans l'application État actif: la méthode didReceiveRemoteNotification ne sera pas appelée.

Si vous souhaitez suivre les informations de notification lorsque l'application n'est pas active, suivez la procédure ci-dessous.

didFinishLaunchingWithOptions d'application: méthode est appelée à chaque fois que nous ouvrons l'application

de cette méthode, nous obtenons l'objet NSDictionary appelé launchOptions. De ce launchOptions dictionnaire nous obtenons les données de notification sous forme de dictionnaire pour la UIApplicationLaunchOptionsRemoteNotificationKey clé

trouver le code ci-dessous:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{ 
NSDictionary *remoteNotify = [launchOptions objectForKey: UIApplicationLaunchOptionsRemoteNotificationKey]; 
//Accept push notification when app is not open 
if (remoteNotify)   // it is only true when you get the notification{ 
    // use the remoteNotify dictionary for notification data}} 
3

Dans iOS 7, vous pouvez utiliser les notifications push avec fetch fond, ce qui est Notification à distance avec le jeu de drapeaux disponible. Exemple de charge utile: {aps: {content-available: 1}}. Dans ce cas, iOS va réveiller votre application (il y a quelques limitations voir: Will iOS launch my app into the background if it was force-quit by the user?). Une fois votre application réveillée, vous avez 30 secondes pour envoyer à votre serveur la confirmation de réception de notification push. Vous devrez également activer la fonction « chercher arrière-plan » dans les modes d'arrière-plan cible et mettre à jour la AppDelegate d'inclure cette méthode:

- (void)application: (UIApplication *)application didReceiveRemoteNotification: 
    (NSDictionary *)userInfo fetchCompletionHandler: 
    (void (^)(UIBackgroundFetchResult))completionHandler 

Donc, cela nécessite un peu de travail de votre côté.

J'espère que cela aide.

Questions connexes