it-swarm.com.de

In-App-Browser (WebView) mit erkennen PHP / Javascript

Ich habe eine App für iOS und Android entwickelt, die über den In-App-Browser (Webview) von meinem Webserver auf eine HTML-Datei zugreift.

Ich möchte nicht, dass ein Benutzer ohne die App auf diese Datei zugreifen kann. Gibt es eine Möglichkeit zu erkennen, ob der Benutzer mit der App oder direkt über einen Browser auf diesem Smartphone/Tablet/Computer auf die Datei zugreift? Ich denke, dass eine Lösung mit PHP viel besser ist, weil Javascript abgeschaltet werden kann. Zumindest kann Google Analytics zwischen Safari und Safari (In-App) unterscheiden. Es sollte mit jeder Version von iOS und Android funktionieren.

Danke für Ihre Hilfe.


Lösung

Nach vielen Versuchen habe ich endlich eine funktionierende Lösung für mich gefunden!

iOS: Sie können den Unterschied zwischen Safari und dem In-App-Browser mithilfe des Benutzeragenten erkennen. Wahrscheinlich gibt es eine schönere Lösung, aber es funktioniert.

// Safari (in-app)
if ((strpos($_SERVER['HTTP_USER_AGENT'], 'Mobile/') !== false) && (strpos($_SERVER['HTTP_USER_AGENT'], 'Safari/') == false) {
    echo 'Safari (in-app)';
}

Android: Der Paketname aus der App wird in der Variablen PHP $_SERVER['HTTP_X_REQUESTED_WITH'] gespeichert.

// Android (in-app)
if($_SERVER['HTTP_X_REQUESTED_WITH'] == "com.company.app") {
    echo 'Android (in-app)';
}

Wie Tim van Elsloo bereits bemerkt hat, können HTTP-Header gefälscht werden, was nicht absolut sicher ist.

15
ohh2ahh

Ich bin nicht sicher über Android, aber wenn Sie die UIWebView des iOS SDK verwenden, werden Name und Version Ihrer App als Teil des Benutzeragenten (YourApp/1.0) gesendet.

Sie können dann mit PHP überprüfen, ob Ihre In-App-Webansicht verwendet wird oder nicht:

if (strpos($_SERVER['HTTP_USER_AGENT'], 'YourApp/') !== false)

Ich denke, Android macht auch etwas Ähnliches.

5
elslooo

Lösungscode:

$isWebView = false;
if((strpos($_SERVER['HTTP_USER_AGENT'], 'Mobile/') !== false) && (strpos($_SERVER['HTTP_USER_AGENT'], 'Safari/') == false)) :
    $isWebView = true;
elseif(isset($_SERVER['HTTP_X_REQUESTED_WITH'])) :
    $isWebView = true;
endif;

if(!$isWebView) : 
    // Android or iOS Webview
else :
    // Normal Browser
endif;
4
Alex Baur

Für Android WebView siehe den Link von Developer Chrome - https://developer.chrome.com/multidevice/user-agent#webview_user_agent

In der Benutzeragentenzeichenfolge sind bereits Hinweise wie "Mobile", "wv" verfügbar.

Sie können so etwas verwenden

if (strpos($_SERVER['HTTP_USER_AGENT'], 'Mobile') !== false)

oder 

if (strpos($_SERVER['HTTP_USER_AGENT'], 'wv') !== false)

um festzustellen, ob der Benutzer eine Android-WebView ist.

0
Mallikarjun M