2014年8月22日星期五

如何分辨in-app browser







I developed an app for iOS and Android which accesses an HTML file from my webserver using the in-app browser (Webview).
I don't want that a user can access this file without using the app. Is there a possibility to detect, if the user is accessing the file with the app or directly via a browser on this smartphone / tablet / computer? I think that a solution with PHP is much better, because Javascript can be switched off. At least Google Analytics can differentiate between Safari and Safari (in-app). It should work with every version of iOS and Android.
Thanks for your help.

Solution
After many attempts I finally found a working solution for me!
iOS: You can detect the difference between Safari and the in-app browser using the user agent. Probably there's a nicer solution, but it works.
// Safari (in-app)
if ((strpos($_SERVER['HTTP_USER_AGENT'], 'Mobile/') !== false) && (strpos($_SERVER['HTTP_USER_AGENT'], 'Safari/') == false) {
    echo 'Safari (in-app)';
}
Android: The package name from the app is stored in the PHP variable $_SERVER['HTTP_X_REQUESTED_WITH'].
// Android (in-app)
if($_SERVER['HTTP_X_REQUESTED_WITH'] == "com.company.app") {
    echo 'Android (in-app)';
}

 喺iOS,chrome同opera都會有Safari寫喺user agent度

Ref: http://stackoverflow.com/questions/16383776/detect-in-app-browser-webview-with-php-javascript

沒有留言: