notizie - iPhone WebApps, c'è un modo per rilevare come è stato caricato? Schermata principale vs Safari?




widget notizie iphone (6)

Ho un'app Web per iPhone e sono interessato a rilevare se l'app è stata caricata da:

  1. iPhone Safari
  2. iPhone ha installato l'app Web (tramite l'aggiunta alla schermata iniziale) che carica senza le barre di safari.

Qualche idea?


Come farlo con PHP e filtrare i falsi positivi

Penso che la risposta di @strat sia nella giusta direzione, se vuoi usare PHP. Tranne che non funzionerà se non viene impostata la meta adatta per le app mobili. Altrimenti l'iPhone posizionerà in casa un segnalibro che apre un safari mobile. Inoltre, ha restituito i falsi positivi, ad esempio quando si accede alla pagina da qualsiasi altro browser su iPhone, come il browser di Facebook.

Fortunatamente, la stringa di user-agent standalone ha una particolarità: contiene solo 3 barre. Ho provato vari altri browser e ne hanno tutti più di 3. È hacker, ma possiamo usarlo a nostro vantaggio. Inoltre, è interessante notare che una webview standard in un'app avrà 2 barre.

Quindi questo è l'esempio di lavoro minimo:

<?php
// We need to add the mobile web app capable meta. Status bar is set to black to avoid our text go under the status bar.
?>

<html>
<head>
  <meta name="apple-mobile-web-app-capable" content="yes">
  <meta name="apple-mobile-web-app-status-bar-style" content="black">
</head>
<body>


<?php

$ua = strtolower($_SERVER['HTTP_USER_AGENT']);

if ( strpos($ua,"iphone") || strpos($ua,"ipad") ) {
   if ( strpos($ua,"safari") ) {
      echo('Running in safari on iPhone/iPad');
   } else if ( substr_count($ua, '/') === 3 ) {
      echo('Running as stand alone WebApp on iPhone/iPad');
   } else if ( substr_count($ua, '/') === 2 ) {
      echo('Running in a WebView on a iPhone/iPad app');
   } else {
      echo('Running in another browser on iPhone/iPad');
   }
} else {
   echo('Running on device other than iPhone/iPad.');
}

?>

</body>
</html>


Controlla le intestazioni HTTP quando accedi al sito da iPhone Safari e WebApp per vedere se sono differenti.

Non so se lo sono, ma se lo sono, sono sicuro che sarai in grado di implementarlo da qualche parte nel tuo sito web.

http://php.net/manual/en/function.headers-list.php


Non sono sicuro di quanto questo comportamento possa andare lontano, ma iOS presenterà diverse stringhe UserAgent al server che possono essere utilizzate per rilevare se la pagina viene richiesta da una webapp o un browser safari.

Browser Safari

Mozilla / 5.0 (iPhone, CPU, iPhone OS 8_1_1 come Mac OS X) AppleWebKit / 600.1.4 (KHTML, come Gecko) Versione / 8.0 Mobile / 12B436 Safari / 600.1.4

Pulsante Home Screen / Web App

Mozilla / 5.0 (iPhone, CPU, iPhone OS 8_1_1 come Mac OS X) AppleWebKit / 600.1.4 (KHTML, come Gecko) Mobile / 12B436

Si noti che non include "Safari" in UserAgent. Ho confermato che questo comportamento risale almeno a iOS 7, ma immagino ancora di più.

Quindi puoi verificare la presenza di iPhone o iPad nella stringa UserAgent e la mancanza di Safari per rilevare che è stato aperto dalla schermata Home.


Può essere semplificato in var webApp = window.navigator.standalone || false; var webApp = window.navigator.standalone || false;

Può essere nuovamente semplificato in var webApp = window.navigator.standalone;


Questo è quello che uso, funziona alla grande:

if (window.navigator.userAgent.indexOf('iPhone') != -1) {
    if (window.navigator.standalone == true) {
        alert("Yes iPhone! Yes Full Screen!");
    } else {
        alert("Not Full Screen!");
    };} else {
        alert("Not iPhone!");
        document.location.href = 'please-open-from-an-iphone.html';
};




iphone-standalone-web-app