2011-02-10 10 views
13

मैं एक लिंक बनाने की कोशिश कर रहा हूं जिसे ईमेल के माध्यम से भेजा जा सकता है, जो मेरे ऐप के साथ एंड्रॉइड डिवाइस पर खोले जाने पर मेरे ऐप में स्वचालित पेज स्वचालित रूप से खुल जाएगा।एंड्रॉइड गहरी एक ऐप में लिंकिंग

मुझे यह आंशिक रूप से कुछ अलग तरीकों से काम कर रहा है लेकिन मुझे कुछ समस्याएं मिली हैं जो मुझे आश्चर्यचकित कर रही हैं कि किसी के पास समाधान है या नहीं।

प्रयास 1: कस्टम योजना का उपयोग करना: myapp: // someItem। यह काम करता है लेकिन कुछ ईमेल एप्लिकेशन इसे एक लिंक के रूप में नहीं मानते हैं क्योंकि यह http नहीं है। क्या वैध लिंक के रूप में इसका इलाज करने के लिए अनुप्रयोगों को मजबूर करने का कोई तरीका है? उदाहरण के लिए जीमेल।

प्रयास 2: होस्ट के साथ एक http लिंक का उपयोग करना: http://com.myapp/someItem। यह भी काम करता है लेकिन मेरा ऐप सभी http लिंक को संभालने के लिए पंजीकृत होता है जो आदर्श नहीं है।

प्रयास 3: होस्ट और पोर्ट के साथ एक http लिंक का उपयोग करना: http://com.myapp:2345/someItem। यह मेरा वर्तमान समाधान है कि केवल एक ही दोष है कि जब लिंक खोला जाता है तो यह अभी भी ब्राउज़र में लिंक खोलने का विकल्प देता है। क्या ब्राउजर को मेरे लिंक खोलने का प्रयास करने का कोई तरीका है?

क्या किसी के पास लिंक बनाने का कोई तरीका है जिसे सभी एप्लिकेशन द्वारा लिंक के रूप में माना जाएगा और उन्हें खोलते समय ब्राउज़र द्वारा अनदेखा किया जाएगा?

+0

क्या आप मुझे कुछ संसाधनों जो मुझे करने में मदद करता को इंगित कर सकते हैं - "कैसे ऐप सामग्री के लिए गहरे लिंक सक्षम करने के लिए" - डीप लिंक सामग्री उपयोगकर्ताओं को सीधे रखना चाहिए, किसी भी संकेत, मध्यवर्ती पृष्ठों, या लॉगिन के बिना । – user2056563

उत्तर

4

इस तकनीक को वास्तव में मैं क्या बता सकता से Android पर काम किया जा रहा है:

http://mobile.dzone.com/news/custom-url-schemes-phonegap

मैं इसे करने की कोशिश नहीं की है एक असली उत्पादन ऐप में अभी तक, इसलिए आपका माइलेज भिन्न हो सकता है। मैंने जो किया है वह छिपी आईफ्रेम बनाने और कस्टम यूआरएल योजना में स्थान सेट करने का प्रयास करने की तकनीक का उपयोग करता है, और दस्तावेज़ को दस्तावेज़ के लिए ऑनलोड से कॉल करता है। क्या मैं अब तक (मैं केवल यह 2.2 और 2.3 उपकरणों पर बाहर परीक्षण किया है) देखा है कि मेरे पास एक एप्लिकेशन इंस्टॉल है जो कि अनुप्रयोग का शुभारंभ करेंगे कस्टम स्कीन का प्रबंधन, और यदि नहीं पृष्ठ प्रदर्शित करेगा है।

दोनों मामलों को कवर करने के लिए अपेक्षाकृत साफ एकल यूआरएल, और यूआरएल के ट्विटर शेयरों जैसी चीजों को बर्बाद नहीं करता है। वास्तविक उत्पादन संस्करण केवल छिपी आईफ्रेम जांच कर सकता है यदि अनुरोध किसी ऐसे प्लेटफ़ॉर्म की तरह दिख रहा है जो असंगत डेस्कटॉप व्यवहार के जोखिम को कम करने के लिए एप्लिकेशन का समर्थन कर सकता है।

+1

मुझे यह 9 0% काम मिल गया है। केवल मुझे पसंद नहीं है कि यह ब्राउज़र में एक पेज छोड़ देता है। मैं इसे सफलता पर 1 पेज वापस जाना चाहता हूं और एक डाउनलोड लिंक प्रदर्शित करने में विफलता पर रहना चाहता हूं। क्या आपको यह जांचने का कोई तरीका मिला है कि रीडायरेक्ट काम करता है या नहीं? – skorulis

+1

क्षमा करें, लेकिन मैंने इसके साथ इतिहास और सामान के लिए अनुकूलित करने के लिए पर्याप्त मूर्खतापूर्ण नहीं किया है, बस मूल बातें का परीक्षण किया है। आम तौर पर ब्राउज़र में एक पृष्ठ छोड़ने के साथ समस्या का ख्याल रखने के इरादे से आप इतिहास इतिहास ध्वज के साथ लॉन्च कर सकते हैं। लेकिन क्योंकि "कुछ और" इसे शुरू कर रहा है, मुझे यकीन नहीं है कि आप एक फिक्स खोजने के बारे में कैसे जाएंगे। सौभाग्य! मूल बातें मुबारक हो कम से कम काम कर रहे हैं। – mikerowehl

0

यदि आप कुछ सर्वर-साइड का उपयोग कर सकते हैं, तो हो सकता है कि आपके पास नियमित पृष्ठ हो जो ब्राउज़र से कस्टम-स्कीम लिंक पर जा सके? यह संभवतः यह बताने में सक्षम होने का अतिरिक्त लाभ है कि एप्लिकेशन इंस्टॉल नहीं है और स्थापना को संकेत देने के लिए।

यह ब्राउज़र में खोलने वाले लिंक की समस्या को ठीक नहीं करता है, हालांकि। एकमात्र सच्चा समाधान जिसके बारे में मैं सोच सकता हूं वह एक लिंक-हैंडलर है जो उचित आवेदन पर कूदता है। तो फिर इस मुद्दे को उपयोगकर्ता पसंदीदा ब्राउज़र बदलने की अनुमति देता होगा ...

+0

यदि एप्लिकेशन इंस्टॉल किया गया था तो मैं ब्राउज़र से कैसे जांच करूं? – skorulis

+0

ओह, मैंने इसके बारे में नहीं सोचा था। मुझे नहीं पता कि ऐसा करने का कोई आसान तरीका है या नहीं। कम से कम, एक क्लिक-थ्रू पेज संभव होगा। ; संपादित करें: हो सकता है कि आप एप्लिकेशन पर एक HTTP सर्वर सेवा चला सकें, फिर एप्लिकेशन की उपस्थिति का पता लगाने के लिए इसका उपयोग करें? इस बारे में मैं इस समय के साथ आ सकता हूं। –

4

अपने प्रश्नों के उत्तर देने के लिए, नीचे मैनिफेस्ट में एक नमूना इरादा फ़िल्टर है।

<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:host="www.example.com" 
     android:pathPrefix="/home" 
     android:scheme="https"/> 
</intent-filter> 

तो बुनियादी तौर पर, जब कुछ एक किसी भी http://www.example.com/home के साथ शुरू लिंक पर क्लिक करता, वह/वह ब्राउज़र क्षुधा के साथ अपने ऐप्लिकेशन से खोलने के लिए विकल्प दिया जाएगा। आपको गतिविधि में इरादे को संभालना है

यह भी योजना कुछ भी हो सकती है, लेकिन Google द्वारा http योजना की अनुशंसा की जाती है, ताकि आपका ऐप और ब्राउज़र ऐप डीप्लिंक किए गए यूआरएल पर क्लिक सुन सके।

नोट: यदि आप ऐप लिंक करना चाहते हैं, तो अपने वेब पृष्ठों में एंड्रॉइड-ऐप: // yourpackage name/http/www.example.com/home/... जोड़ने के लिए मत भूलना।

1
1:-set Custom URL schemes like http://example.com. 
    For example, the URL http://example.com/?id=95 , 
    will open up the relevant FAQ and the URL 
    http://example.com/?sectionid=8 
    (where sectionid is the publish id of any Section), 
    will open up relevant section. 
2:- <activity android:name="com.example.shilpi.deeplinkingsample.DeepLinkActivity"> 
      <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" android:host="example.com"/> 
      </intent-filter> 
     </activity> 
3:-   @Override 
      protected void onResume() { 
       super.onResume(); 

       Intent in = getIntent(); 
       Uri data = in.getData(); 
       System.out.println("deeplinkingcallback :- "+data); 
      } 
+2

हालांकि यह उत्तर तकनीकी रूप से सही हो सकता है, यह बताकर कि यह क्या करता है, यह आपके उत्तर को पैडिंग के लायक होगा। इससे ओपी और भविष्य के दोनों आगंतुकों की मदद मिलेगी। जैसा कि यह खड़ा है, यह सिर्फ एक कोड डंप है। – Bugs

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