2016-09-21 7 views
8

एंड्रॉइड में a guide about how to implement app links. है, यदि मेरा ऐप घोषित करता है कि यह कुछ वेब लिंक को संभालता है, और मैं इस लिंक को किसी अन्य ऐप में खोलने का प्रयास करता हूं, तो सिस्टम इसे रोकता है और उपयोगकर्ता को ब्राउज़र के बजाए सीधे मेरे ऐप पर ले जाता है, इसलिए कि मैं सीधे अपने ऐप में प्रासंगिक सामग्री दिखा सकता हूं। बेहद सुविधाजनक।वाइल्डकार्ड डोमेन के साथ एंड्रॉइड ऐप लिंक कैसे कार्यान्वित करें?

  1. वाइल्डकार्ड डोमेन के साथ एप्लिकेशन लिंक को कैसे लागू करने के लिए:

    मैं गाइड में क्या याद आ रही है दो बातें है। मैं चाहता हूं कि मेरा ऐप * .example.com के लिंक को संभालने के लिए चाहे, उदाहरण के लिए subdomains के सभी लिंक (test.example.com, something.example.com आदि);

  2. केवल मेरी साइट पर विशिष्ट पथों के लिए ऐप लिंक कैसे कार्यान्वित करें। उदाहरण के लिए मैं test.example.com/something को अवरुद्ध करना चाहता हूं, लेकिन test.example.com/other नहीं। पहला व्यक्ति मेरे ऐप पर आना चाहिए, दूसरा मेरे ब्राउज़र में;

The corresponding iOS guide पता चलता है कि आईओएस इन परिदृश्यों के दोनों संभालती है (हालांकि वाइल्डकार्ड हिस्सा डॉक्स से स्पष्ट नहीं था और मैं एप्पल समर्थन है कि आप रूट डोमेन में संघ फ़ाइल की जरूरत है, नहीं एक उप डोमेन से स्पष्ट करने के लिए किया था)।

क्या एंड्रॉइड ऐप लिंक वाइल्डकार्ड डोमेन और केवल पथों का सबसेट संभाल सकता है?

+1

पिछले के लिए, [कोशिश 'एंड्रॉयड:' ' तत्व पर path'] (https://developer.android.com/guide/topics/ प्रकट/डेटा-element.html)। – CommonsWare

+0

वाइल्डकार्ड डोमेन/होस्ट्स के संबंध में, मैं यहां इरादा फ़िल्टर स्रोत में वाइल्डकार्ड होस्ट करने के लिए कुछ संदर्भ देख रहा हूं - https://android.googlesource.com/platform/frameworks/base/+/master/core/java/android/content/ IntentFilter.java। यह निष्कर्ष निकालने से पहले कि यह नहीं किया जा सकता है, शायद कोई उस पर नज़र डालें और देखें कि यह इस प्रश्न के संदर्भ में प्रासंगिक है या नहीं। – Jaanus

+0

यदि आप 'mwild' का उल्लेख कर रहे हैं और 'अथॉरिटी एंटर्री' पर, तो 'मिलान()' कार्यान्वयन सही नहीं लगता है। लेकिन, इसके अलावा, ''/'IntentFilter' में वाइल्डकार्ड कार्यक्षमता काम करना आवश्यक है लेकिन पर्याप्त नहीं है। यह संभव है कि फ़िल्टर वाइल्डकार्ड का समर्थन करते हैं, लेकिन ऐप लिंक नहीं करते हैं। – CommonsWare

उत्तर

9
  1. कोडिंग दुर्भाग्य से ऐसा लगता है कि एंड्रॉयड वाइल्डकार्ड डोमेन को संभाल नहीं सकते हैं।

आप डेटा टैग (https://developer.android.com/guide/topics/manifest/data-element.html) के लिए API मार्गदर्शिका को देखें, तो आप देख सकते हैं कि वे उल्लेख है कि वाइल्डकार्ड pathPattern और MIMETYPE के लिए उपलब्ध है, लेकिन मेजबान के लिए नहीं।

बात यह है कि, के रूप में विषय (https://stackoverflow.com/a/34068591/4160079) पर एक अन्य पोस्ट,

डोमेन समय स्थापित पर जाँच कर रहे हैं में CommonsWare से समझाया है, और वहाँ शिपिंग के अलावा नए डोमेन जोड़ने के लिए कोई साधन है एक नए मैनिफेस्ट के साथ ऐप का एक नया संस्करण।

तो आपको उपलब्ध सभी सबडोमेन मैन्युअल रूप से सूचीबद्ध करना होगा, और जब भी कोई नया सबडोमेन लॉन्च किया जाए तो ऐप को अपडेट करना होगा।

यहाँ आप अधिक उप डोमेन कैसे घोषित है:

<activity android:name="MainActivity"> 
    <intent-filter> 
     <action android:name="android.intent.action.VIEW" /> 
     <category android:name="android.intent.category.DEFAULT" /> 
     <category android:name="android.intent.category.BROWSABLE" /> 
     <data android:scheme="http" /> 
     <data android:host="subdomain1.example.com" /> 
     <data android:host="subdomain2.example.com" /> 
     <data android:host="subdomain3.example.com" /> 
    </intent-filter> 
</activity> 
  1. हाँ, आप रास्तों

का केवल एक उपसमूह संभाल कर सकते हैं यह वही विचार है , बस पथ विशेषता का उपयोग करके इच्छित पथों को सूचीबद्ध करें (फिर, डेटा उपरोक्त टैग API मार्गदर्शिका देखें)।

यदि आप क्वेरी स्ट्रिंग्स या पथ पैराम्स का उपयोग करते हैं, तो पथप्रिक्स का उपयोग करना पसंद करते हैं।

यदि आवश्यक हो, तो आप पथपटर चुनकर, यहां वाइल्डकार्ड का उपयोग कर सकते हैं।

एक यूआरआई का पथ हिस्सा जो/से शुरू होना चाहिए। पथ विशेषता एक पूर्ण पथ निर्दिष्ट करती है जो एक उद्देश्य वस्तु में पूर्ण पथ के साथ मेल खाती है। पथफ्रिक्स विशेषता एक आंशिक पथ निर्दिष्ट करती है जो इरादे ऑब्जेक्ट में पथ के प्रारंभिक भाग के विरुद्ध मेल खाती है। पथपटल विशेषता एक पूर्ण पथ निर्दिष्ट करती है जो इरादे ऑब्जेक्ट में पूर्ण पथ के साथ मेल खाती है, लेकिन इसमें निम्नलिखित वाइल्डकार्ड हो सकते हैं: एक तारांकन ('') तुरंत पिछले वर्ण की कई घटनाओं के 0 के अनुक्रम से मेल खाता है। एक अवधि के बाद एक अवधि ("") कई वर्णों के 0 के अनुक्रम से मेल खाती है।

यहाँ कुछ उदाहरण है:

<activity android:name="MainActivity"> 
    <intent-filter> 
     <action android:name="android.intent.action.VIEW" /> 
     <category android:name="android.intent.category.DEFAULT" /> 
     <category android:name="android.intent.category.BROWSABLE" /> 
     <data android:scheme="http" /> 
     <data android:host="subdomain1.example.com" /> 
     <data android:host="subdomain2.example.com" /> 
     <data android:host="subdomain3.example.com" /> 
     <data android:path="/path1" /> <!-- matches /path1 only --> 
     <data android:pathPrefix="/path2" /> <!-- matches /path2, /path2/something or also /path2?key=value etc... --> 
     <data android:pathPattern="/wild.*" /> <!-- matches /wild, /wild3, /wilderness etc... --> 
    </intent-filter> 
</activity> 
+0

वाइल्डकार्ड डोमेन के बारे में प्रश्न पर मेरी टिप्पणी देखें। ऐसा लगता है कि इरादा फ़िल्टर स्रोत में कुछ वाइल्डकार्ड से संबंधित कोड है। क्या यह प्रासंगिक है? – Jaanus

+1

आपके द्वारा उल्लिखित यह वाइल्डकार्ड से संबंधित कोड कस्टम योजनाओं के लिए काम करता है। ऐप लिंक के मामले में, हालांकि, प्रति-डोमेन सत्यापन स्थापना के ठीक बाद किया जाता है। – APE

3

एंड्रॉइड वाइल्डकार्ड डोमेन को इस तरह के रूप में (आज के रूप में उनके दस्तावेज के अनुसार) संभाल नहीं सकता है, लेकिन, यह /पथ के समावेशन और बहिष्करण पर आपकी क्वेरी का उत्तर देगा।

यूआरएल जैसे के लिए डिप लिंक को लागू करने के

http://example.com/gizmos?1234,  
http://example.com/gizmos/1234, 
http://example.com/gizmos/toys/1234, 
etc. 

आपका एक्सएमएल की तरह इस-

<activity android:name="com.example.android.GizmosActivity" android:label="@string/title_gizmos" > 

    <intent-filter android:label="@string/filter_title_viewgizmos"> 
     <action android:name="android.intent.action.VIEW" /> 
     <category android:name="android.intent.category.DEFAULT" /> 
     <category android:name="android.intent.category.BROWSABLE" /> <!-- Accepts URIs that begin with "example://gizmos” --> 

     <data android:scheme="example" android:host="gizmos" /> 
    </intent-filter> 
    <intent-filter android:label="@string/filter_title_viewgizmos"> 
     <action android:name="android.intent.action.VIEW" /> 
     <category android:name="android.intent.category.DEFAULT" /> 
     <category android:name="android.intent.category.BROWSABLE" /> 
     <!-- Accepts URIs that begin with "http://example.com/gizmos” --> 
     <data android:scheme="http" android:host="example.com" android:pathPrefix="/gizmos" /> 
    </intent-filter> 
</activity> 

अब विचार कर रहा है कि आप इस लक्ष्य को हासिल करने में सक्षम थे कुछ दिखना चाहिए, यहाँ कैसे आप पहुंच प्रतिबंधित है आपके ऐप सामग्री के कुछ हिस्सों में-

<?xml version="1.0" encoding="utf-8"?> 
<search-engine xmlns:android="http://schemas.android.com/apk/res/android"> 
    <noindex uri="http://example.com/gizmos/hidden_uri"/> 
    <noindex uriPrefix="http://example.com/gizmos/hidden_prefix"/> 
    <noindex uri="gizmos://hidden_path"/> 
    <noindex uriPrefix="gizmos://hidden_prefix"/> 
</search-engine> 

और द मैनिफेस्ट भाग-

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.android.Gizmos"> 
    <application> 
     <activity android:name="com.example.android.GizmosActivity" android:label="@string/title_gizmos" > 
      <intent-filter android:label="@string/filter_title_viewgizmos"> 
      <action android:name="android.intent.action.VIEW"/> ... 
     </activity> 
      <meta-data android:name="search-engine" android:resource="@xml/noindex"/> 
    </application> 
    <uses-permission android:name="android.permission.INTERNET"/> 
</manifest> 

अधिक जानकारी और इस उदाहरण के विवरण के लिए, यदि आप पर-

Android Deep Linking

एक बार देख ले सकते हैं आशा है कि यह मदद करता है, मुबारक

+0

पर मेजबान विशेषता के लिए वाइल्डकार्ड का समर्थन कर रहा है, मुझे यहां वाइल्डकार्ड डोमेन के बारे में कुछ भी दिखाई नहीं दे रहा है । – Jaanus

+0

एंड्रॉइड वाइल्डकार्ड डोमेन को इस तरह से संभाल नहीं सकता है, लेकिन, यह आपके शामिल करने और कुछ */पथ * के बहिष्कार के लिए था। – bozzmob

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