web-dev-qa-db-fra.com

Empêcher le safari mobile iOS de devenir inactif/auto-bloquant/en veille?

Dans une application iOS, vous pouvez définir application.idleTimerDisabled = YES pour empêcher le verrouillage automatique du téléphone. 

Je dois faire cela dans un safari mobile pour un jeu comme Doodle Jump où l'utilisateur ne peut pas toucher l'écran pendant une période prolongée. Existe-t-il une méthode documentée ou un hack pour le faire?

(Mise à jour) Ils semblent le faire d’une manière ou d’une autre sur ce site http://www.uncoveryourworld.com . Visitez votre iPhone et lorsque vous arrivez aux bâtiments/scènes de rue avec de la musique en arrière-plan, laissez votre téléphone seul. Il ne va jamais dormir.

(Mise à jour 2) J'ai passé un certain temps à examiner de plus près comment ils pourraient empêcher le téléphone de s'endormir. J'ai fait un test de barebone et il semble que la façon dont ils bouclent l'audio dans la scène de rue l'empêche de dormir. Si vous souhaitez tester cela, il suffit de mettre un lecteur audio simple qui boucle sur votre page et cliquez sur Lecture:

<audio src="loop.mp3" onended="this.play();" controls="controls" autobuffer></audio>

Partout où j'ai cherché, on me dit que ce n'est pas possible, alors il est agréable de voir qu'il existe au moins un moyen de le faire, même s'il s'agit d'un petit bidouillage. Sinon, un jeu basé sur un navigateur avec un style de griffonnage-saut ne serait pas possible. Vous pouvez donc avoir une boucle dans votre jeu/application si nécessaire ou simplement jouer en boucle silencieuse.

33
forrex

NoSleep.js semble fonctionner sous iOS 11 et fonctionnerait également sous Android.


Ancienne réponse

Il s'agit d'une méthode simple utilisant uniquement le langage HTML: en boucle des vidéos en lecture automatique en ligne (cela pourrait également fonctionner dans Android Chrome 53+)

<video playsinline muted autoplay loop src="https://rawgit.com/bower-media-samples/big-buck-bunny-480p-30s/master/video.mp4" height=60></video>

Voir la même démo sur CodePen (comprend un chronomètre)

Remarques

  • Évitez de charger une grosse vidéo rien que pour ça. Peut-être faire une courte vidéo minuscule en noir seulement ou utiliser
  • Pour que cela fonctionne pleinement, les vidéos doivent toujours être dans la fenêtre ou, vous devez démarrer sa lecture via JS: video.play()
7
bfred.it

Edit: Ce travail autour ne fonctionne plus. Il n’est actuellement pas possible d’empêcher le téléphone de dormir pendant un safari.

Oui, vous pouvez empêcher le téléphone de dormir en utilisant une boucle audio. L'astuce ne commencera pas automatiquement, vous devrez la jouer quand le visiteur touchera l'écran.

<audio loop src="http://www.sousound.com/music/healing/healing_01.mp3"></audio>

Page de test : appuyez sur Lecture et l’écran reste allumé, mais certains appareils, comme un iPhone avec iOS 7, s’assombrissent.

Remarque: utilisez cette astuce avec prudence, car elle arrêtera toute musique que les visiteurs pourraient utiliser et les agacera.

6
bendyourtaxes

Non, vous ne pouvez pas faire ça, malheureusement. Le seul moyen d'y parvenir consiste à créer une application UIWebView et à y définir la variable que vous avez fournie.
https://stackoverflow.com/a/7477438/267892

1
Emil

la réponse de bfred.it fonctionne si vous remplacez le tag audio par un enter code here -tag - mais uniquement si la page est ouverte dans iOS10 + Safari ET si l'utilisateur a démarré la vidéo. Vous pouvez masquer la vidéo avec CSS.

De plus, je suppose que cette fonctionnalité sera également supprimée à un moment donné.

0
Apeli

Même si cette approche ne convient pas dans tous les cas, vous pouvez empêcher le verrouillage de votre téléphone en rechargeant la page à l'aide de Javascript.

// This will trigger a reload after 30 seconds
setTimeout(function(){
    self.location = self.location
}, 30000);

Veuillez noter que j'ai testé cela avec iOS7 beta 3

0
Besi

Vous pouvez arrêter de dormir et l'écran s'assombrit dans iOS Safari en simulant un rafraîchissement toutes les 20-30 secondes.

var stayAwake = setInterval(function () {
    location.href = location.href; //try refreshing
    window.setTimeout(window.stop, 0); //stop it soon after
}, 30000);

Veuillez utiliser ce code de manière responsable, ne l'utilisez pas "uniquement parce que". Si nécessaire, désactivez-le.

clearInterval(stayAwake); //allow device sleep again when not needed

Testé dans Safari iOS 7, 7.1.2 et 8.1, mais cela peut ne pas fonctionner dans les navigateurs UIWebView tels que Chrome pour iOS ou l'application Facebook.

Démo: http://jsbin.com/kozuzuwaya/1

0
bfred.it