2013-05-05 2 views
14

के साथ इन-ऐप ब्राउज़र (वेबव्यू) का पता लगाएं मैंने आईओएस और एंड्रॉइड के लिए एक ऐप विकसित किया है जो इन-ऐप ब्राउज़र (वेबव्यू) का उपयोग करके मेरे वेबसर्वर से एक HTML फ़ाइल एक्सेस करता है।PHP/जावास्क्रिप्ट

मैं नहीं चाहता कि कोई उपयोगकर्ता ऐप का उपयोग किए बिना इस फ़ाइल तक पहुंच सके। क्या पता लगाने की कोई संभावना है, यदि उपयोगकर्ता ऐप के साथ फ़ाइल को सीधे एक्सेस कर रहा है या सीधे इस स्मार्टफोन/टैबलेट/कंप्यूटर पर ब्राउज़र के माध्यम से है? मुझे लगता है कि PHP के साथ एक समाधान बहुत बेहतर है, क्योंकि जावास्क्रिप्ट को बंद किया जा सकता है। कम से कम Google Analytics सफारी और सफारी (इन-ऐप) के बीच अंतर कर सकता है। यह आईओएस और एंड्रॉइड के हर संस्करण के साथ काम करना चाहिए।

आपकी मदद के लिए धन्यवाद।


समाधान

कई प्रयासों के बाद मैं अंत में मेरे लिए एक काम कर समाधान मिल गया!

आईओएस: आप उपयोगकर्ता एजेंट का उपयोग करके सफारी और इन-ऐप ब्राउज़र के बीच अंतर का पता लगा सकते हैं। शायद एक अच्छा समाधान है, लेकिन यह काम करता है।

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

एंड्रॉयड: app से पैकेज का नाम पीएचपी चर $_SERVER['HTTP_X_REQUESTED_WITH'] में संग्रहित है।

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

जैसे ही टिम वैन एल्स्लू पहले से ही नोट किया गया है कि HTTP शीर्षलेखों को फिक्र किया जा सकता है और यह बिल्कुल सुरक्षित नहीं है।

+0

यदि अन्य ब्राउज़र से पृष्ठ खोला गया है तो आईओएस समाधान विफल हो जाएगा। कुछ परीक्षण के बाद, मैंने इसे थोड़ा परिष्कृत किया। यहां देखें: http: // stackoverflow।कॉम/प्रश्न/2738766/आईफोन-वेबएप-एक-रास्ता-से-पता-कैसे-यह-लोड-लोड-होम-स्क्रीन-बनाम-सफार/20757993 # 20757993 –

उत्तर

5

मुझे एंड्रॉइड के बारे में निश्चित नहीं है, लेकिन जब आप आईओएस एसडीके के UIWebView का उपयोग कर रहे हैं, तो यह उपयोगकर्ता एजेंट (YourApp/1.0) के हिस्से के रूप में आपके ऐप का नाम और संस्करण भेजता है।

फिर आप अगर अपनी ऐप्लिकेशन के अंतर्गत वेबव्यू किया जा रहा है या नहीं की जाँच करने के पीएचपी का उपयोग कर सकते हैं:

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

मैं एंड्रॉयड कुछ इसी तरह के रूप में अच्छी तरह से करता है लगता है।

+1

कृपया ध्यान दें कि यह स्पष्ट रूप से फ़ेक किया जा सकता है एक डेस्कटॉप ब्राउज़र द्वारा भी ("नकली" HTTP शीर्षलेख स्थापित करके), इसलिए आपको सुरक्षा परिप्रेक्ष्य से इस पर भरोसा नहीं करना चाहिए। – elslooo

+2

आपकी त्वरित सहायता के लिए धन्यवाद। दुर्भाग्यवश उपयोगकर्ता एजेंट में ऐप का नाम शामिल नहीं है। कम से कम मेरे प्रयासों में नहीं। – ohh2ahh

+0

क्या आप 'UIWebView' का उपयोग कर रहे हैं? यह कुछ ऐसा होना चाहिए: '/1.0 सीएफनेटवर्क/45 9 डार्विन/10.2.0'। यदि यह नहीं है (जो मुझे संदेह है), तो आप हमेशा http://stackoverflow.com/questions/478387/change-user-agent-in-uiwebview-iphone-sdk या http: // stackoverflow जैसे कुछ करने का प्रयास कर सकते हैं। com/प्रश्न/8487581/UIWebView-iOS5 बदलते-उपयोगकर्ता-एजेंट। – elslooo

1

समाधान कोड:

$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; 
0

Android WebView के लिए, डेवलपर क्रोम से लिंक का उल्लेख - https://developer.chrome.com/multidevice/user-agent#webview_user_agent

वहां पहले से ही कर रहे हैं की तरह "मोबाइल", "WV" उपयोगकर्ता एजेंट स्ट्रिंग में उपलब्ध संकेत।

यदि उपयोगकर्ता एक Android WebView है पता लगाने के लिए

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

या

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

की तरह कुछ का उपयोग कर सकते हैं।

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^