Come sviluppare un’app di sveglie per iOS

Come sviluppare un’app di sveglie per iOS

Creare un’app di sveglie per iOS: il metodo suggerito da Metide

Se vuoi creare un’app di sveglie per dispositivi iOS, simile alle sveglie dell’app “Orologio” di Apple, incontrerai diversi problemi durante lo sviluppo, soprattutto per:

  • ignorare la modalità Non Disturbare e la modalità Sonno;
  • ignorare l’interruttore suoneria/silenzioso;
  • ignorare i limiti di tempo di suoneria delle notifiche;
  • mostrare delle schermate personalizzate per fermare o ritardare la sveglia.

Queste limitazioni sono superate dall’app Orologio grazie a delle API private, non accessibili al di fuori degli sviluppatori Apple.

Ma esistono altri modi per aggirare questi ostacoli, te ne presentiamo uno che sfrutta le notifiche push, locali e remote.

Utilizzo delle notifiche locali

Una soluzione per creare quest’app è utilizzare le notifiche locali. Queste notifiche sono semplici da implementare, tuttavia presentano numerose limitazioni:

  • i suoni non possono durare più di 30 secondi e non possono essere ripetuti automaticamente;
  • i suoni devono trovarsi nel bundle dell’app (cioè all’interno dell’app nel momento in cui la scarichiamo dall’App Store, perché non è possibile scaricarli in seguito o usare brani dalla libreria musicale dell’utente);
  • le notifiche non possono ignorare l’eventuale blocco suoneria attivo o la modalità Non Disturbare;
  • non è possibile controllare il volume della notifica;
  • è richiesta l’autorizzazione, da parte dell’utente, a ricevere le notifiche.

Un’altra limitazione delle notifiche locali è che quando sono ricevute, non permettono all’app di eseguire codice in background (secondo le policy di Apple). In particolare, quelle relative al blocco suoneria o alla modalità Non Disturbare attiva, sfruttando alcuni framework. Cosa possibile con le notifiche remote in un caso, vediamo come.

Utilizzo delle notifiche remote

L’unico momento in cui le notifiche remote permettono all’app di eseguire del codice in background è quando vengono ricevute. In questo caso puoi implementare la sveglia sfruttando questa attivazione in background.

Quando viene ricevuta la notifica remota, se questa ha il flag interno “content-available” impostato a 1, l’app viene attivata in background tramite la chiamata al metodo “application:didReceiveRemoteNotification:fetchCompletionHandler:”. Puoi sfruttare le classi AVAudioSession e AVAudioPlayer del framework AVFoundation per riprodurre il suono della sveglia. Questo ti permette di usare una traccia audio non necessariamente presente nel bundle dell’app, per esempio una scaricata dal web o acquistata tramite in-app purchase. Infine, per regolare il volume della notifica, puoi sfruttare la classe MPVolumeView del framework MediaPlayer.

Ovviamente anche la strada delle notifiche remote non è senza ostacoli:

  • l’utente deve comunque autorizzare l’app a inviare le notifiche;
  • è necessario avere un server e/o un servizio di notifiche push attivo;
  • è necessario che il dispositivo sia connesso ad internet;
  • Apple non garantisce che le notifiche vengano ricevute;
  • se l’utente chiude forzatamente l’app, quando viene ricevuta la notifica il metodo application:didReceiveRemoteNotification:fetchCompletionHandler: non viene chiamato (e quindi non può essere eseguito il codice che riproduce il suono della sveglia).

Un altro problema è che, in ogni caso, devono essere sfruttati dei workaround, ed è possibile che in fase di revisione dell’app per la pubblicazione sull’App Store i recensori possano bocciarla. È abbastanza chiaro che Apple vuole che venga usata la sua app Orologio per le sveglie.

Un’alternativa più semplice

Un’altra strada per sviluppare un app di sveglie è… creare una sveglia da comodino! Sull’App Store è possibile trovare diverse app che permettono di avere lo schermo sempre attivo con un watchface, un quadrante che mostra l’ora. In questo modo puoi gestire le sveglie in maniera semplice ed affidabile, senza dover ricorrere a notifiche e workaround. Ovviamente resta il dubbio se lasciare lo schermo attivo tutta la notte (anche se a bassa luminosità) ne riduca la vita, ma questo spetta all’utente deciderlo.

Se vuoi leggere di più a riguardo e approfondire con del codice esempio ti consigliamo di leggere questo articolo: http://andrewmarinov.com/building-an-alarm-app-on-ios/

Leave a Comment