App "Alarmy" est capable de lire la chanson iTunes de l'état de fond … Comment?

J'ai versé sur toute la documentation concernant les états d'arrièreplan et les permissions pour jouer de l'audio dans iOS et je ne peux pas comprendre comment une application particulière est capable de se réveiller à un moment spécifique et de jouer des sons non groupés. J'étudie le problème parce que je voudrais append cette fonctionnalité (comme beaucoup d'autres que j'ai vu) à une application que je construis.

L'application en question est "Alarmy" – anciennement "Dormez si vous le pouvez." C'est un réveil. Contrairement à la plupart des autres réveils de l'App Store, il est capable de lire une chanson iTunes comme un son d'alarme sans être au premier plan. Il peut ignorer le commutateur de sonnerie / silence, augmenter le volume au maximum et lire une chanson présélectionnée à partir d'une bibliothèque iTunes locale lorsqu'elle semble (ou devrait être) dans un état d'arrière-plan.

Je ne connais aucun moyen d'étudier ce que fait Alarmy en attendant l'heure de l'alarme, mais je peux voir que les services de localization sont activés, que datatables cellulaires sont activées et que l'actualisation de l'arrière-plan est activée. Cependant, même avec tous ces éléments désactivés dans les parameters, l'alarme fonctionne toujours et joue une chanson iTunes! Je dois aussi supposer qu'Alarmy ne joue pas le silence avant l'heure de l'alarme car elle n'aurait pas traversé le process de soumission d'Apple (ou aurait-elle pu passer à côté, et le terrain de jeu est maintenant totalement inégal).

Il a une fonctionnalité qui semble un peu hors de propos – l'application affiche des informations météorologiques. Ce n'est pas nécessairement du flou complet – je peux voir une certaine valeur dans cela pour une application d'alarme – mais est-il possible qu'ils interrogent une API météo à des intervalles assez courts pour garder l'application éveillée en arrière-plan jusqu'au moment de l'alarme ? Si c'est le cas, à quoi cela ressemblerait-il? De plus, les API météo sont libres d'utiliser jusqu'à un certain nombre de requêtes, mais elles ont beaucoup de téléchargements et je suppose beaucoup de requêtes. Pour une application payante à prix fixe sans IAP, cela ne semble pas être un excellent model d'affaires.

Donc, pour conclure, à mon humble avis, cette fonctionnalité ne peut provenir d'aucune autorisation audio en arrière-plan puisque l'application ne joue pas activement en arrière-plan (sauf si elle est silencieuse et qu'elle a simplement passé le process de soumission); cela peut provenir de l'actualisation continue de l'application en arrière-plan pour les services de localization / météo (puis d'un simple count à rebours jusqu'à l'heure de triggersment de l'alarme) mais la fonction fonctionne toujours lorsque les services d'actualisation et de localization sont désactivés. Se pourrait-il que les permissions sont là, donc même si l'application n'est pas autorisée à accéder aux informations de localization, l'iOS lui permet toujours d'être actif en arrière-plan?

Une dernière pensée: y a-t-il une technique de poussée silencieuse par laquelle ils peuvent pousser une notification à l'application au moment de l'événement et vérifier pour voir s'il est time que la tonalité d'alarme joue? Tourné dans le noir là-bas …

Tout aperçu de la question aiderait une tonne! Je tire mes cheveux! Je peux éditer ce post et append plus d'informations – c.-à-d. Quelles ressources j'ai déjà regardées – si vous aimez, mais je suis assez certain que j'ai regardé toutes les ressources possibles là-bas. Encore une fois, merci infiniment pour toute aide.

    Ils utilisent le mode d'arrière-plan audio, il est répertorié dans leur info.plist. Ils utilisent le file "NoSound.mp3" dans leur bundle pour jouer au silence, en arrière-plan. Ils ont aussi un mode "Sleep music" pour les faire passer par l'AppStore.

    Pour d'autres façons que vous pouvez utiliser, consultez cet article .

    if ([[MPMusicPlayerController iPodMusicPlayer] playbackState] == MPMusicPlaybackStatePlaying) { NSLog(@"yes itune Player Sound is on"); } else { NSLog(@"NO itune Player Sound is not on"); }