2011-02-25 10 views
11

मेरे पास ऐसी स्थिति है जहां मैं किसी मोबाइल वेब साइट से देशी एंड्रॉइड ऐप में कुछ डेटा पास करना चाहता हूं। एक जटिलता यह है कि, सामान्य स्थिति में, मोबाइल वेब साइट लोड होने पर मूल एंड्रॉइड ऐप इंस्टॉल नहीं किया जा सकता है।क्या एंड्रॉइड ब्राउज़र से एक ऐप में संदेश भेजने का कोई तरीका है?

यहाँ एक उदाहरण है:

मैं exampleapp का एक उपयोगकर्ता हूँ और मैं आप के साथ exampleapp से डेटा, जो exampleapp स्थापित नहीं किया गया है की एक विशेष टुकड़ा साझा करना चाहते हैं।

मैं आपको एक मोबाइल वेब पेज के लिंक के साथ एक ईमेल भेजता हूं जो जानता है कि जब आप लिंक खोलते हैं तो आप किस डेटा को देखना चाहते हैं। लेकिन, चूंकि डेटा केवल मूल ऐप में उपलब्ध है, मोबाइल वेब नहीं, आपको एक ऐसे पृष्ठ पर ले जाया जाता है जो आपको एंड्रॉइड मार्केट पर जाने और exampleApp इंस्टॉल करने के लिए कहता है।

आप exampleApp इंस्टॉल करते हैं, और आदर्श रूप में, आपको सीधे आपके द्वारा साझा किए गए डेटा के टुकड़े पर ले जाया जाएगा।

मोबाइल वेब पेज देखने और exampleApp की स्थापना के बीच डिस्कनेक्ट में बड़ी समस्या है।

मैं एक जोड़े को समाधान के बारे में सोचा है, लेकिन न तो सफल रहे हैं (जो कहा, मैं सिर्फ उन्हें गलत तरीके से लागू करने जा सकता है):

  1. कि डेटा शामिल हैं हमारे डोमेन पर एक कुकी सेट जब मोबाइल वेब पेज लोड हो गया है। फिर, जब exampleApp खोला जाता है, तो उसी डोमेन पर किसी पृष्ठ का अनुरोध करने के लिए वेब व्यू प्रारंभ करें और कुकी के मान की जांच करें। उदाहरण ऐप में डेटा का कौन सा टुकड़ा दिखाना है यह निर्धारित करने के लिए इसका उपयोग करें।
  2. डेटा के टुकड़े के संदर्भ को संग्रहीत करने के लिए जावास्क्रिप्ट स्थानीय स्टोरेज का उपयोग करें और उस डोमेन पर एक पृष्ठ प्राप्त करने के लिए वेबव्यू का उपयोग करें और exampleApp के भीतर से स्थानीय स्टोरेज की सामग्री का अनुरोध करें।

इन दोनों परिस्थितियों में ऐसा लगता है कि वेबव्यू और ब्राउज़र एक-दूसरे से सैंडबॉक्स हैं, इसलिए आप दोनों के बीच कुकीज़/स्थानीय स्टोरेज पर नहीं जा सकते हैं।

क्या "क्रंब्रिल छोड़ने" का कोई अन्य तरीका है या एक संदेश सेट किया गया है जिसे बाद में इंस्टॉल किया गया ऐप ब्राउज़र से एक्सेस कर सकता है?

संपादित करें: कुछ प्रतिक्रियाओं को देखते हुए, मुझे यह उल्लेख करना चाहिए कि मैं केवल लिंक पर एक बार क्लिक करना चाहता हूं, एक बार क्लिक नहीं करना है, ऐप इंस्टॉल करना है, फिर ऐप को सही जगह पर खोलने के लिए फिर से क्लिक करें।

+0

मुझे लगता है कि अपने ब्राउज़र से संदेश प्राप्त क्षुधा का डर होगा। ऐसा लगता है कि मैंने खरीदा "शांत खेल" का भुगतान मार्केटिंग फर्मों द्वारा खेती के आंकड़ों के लिए किया जाएगा। मुझे यकीन है कि आप ऐसा नहीं कर सकते! – corsiKa

उत्तर

0

एक जीईटी पैरामीटर का उपयोग करें: http://exampleapps.com?token=mK7Fyt5 यूट्यूब ऐप के तरीके के बारे में सोचें। आपको एक वीडियो के लिंक पर भेजा गया है। यदि आपके पास YouTube ऐप नहीं है, तो आप मोबाइल साइट देखते हैं (जो आपके मामले में एक इंस्टॉल लिंक हो सकता है)। यदि आप करते हैं, तो आपसे पूछा जाता है कि मूल ऐप के साथ यूट्यूब लिंक खोलना है, और मूल ऐप को यूआरएल पास किया गया है, जिससे इसे बुलाया गया था, जिससे वीडियो दिखाने के लिए पैरामीटर को पार्स कर सकते हैं।

निम्नलिखित लक्ष्य फ़िल्टर का उपयोग करें:

<intent-filter> 
    <data android:scheme="http" android:host="exampleapps.com"/> 
    <action android:name="android.intent.action.VIEW" /> 
</intent-filter> 
+0

क्षमा करें, मुझे लगता है कि मेरा प्रश्न और स्पष्ट होना चाहिए था। विचार यह है कि लोगों को ऐप इंस्टॉल करने के लिए प्राप्त करें क्योंकि वे सामग्री को देख सकते हैं। तो यह है: मोबाइल वेब पेज => स्टोर डेटा => उपयोगकर्ता ऐप इंस्टॉल करता है => उपयोगकर्ता ऐप खोलता है => ऐप डेटा पुनर्प्राप्त करता है => ऐप सीधे पुनर्प्राप्त सामग्री पर खुलता है – iseff

+1

आह यह थोड़ा स्पष्ट है। मुझे नहीं लगता कि यह संभव है, और वैसे भी यह व्यवहार की उम्मीद नहीं है, उपयोगकर्ताओं को ऐप इंस्टॉल करने के बाद भेजे गए लिंक पर वापस जाने के विचार के साथ ठीक रहेगा। – fredley

4

वहाँ किसी अन्य तरीके से "एक crumbtrail छोड़" या किसी एप्लिकेशन बाद में स्थापित ब्राउज़र से उपयोग कर सकते हैं कि एक संदेश सेट करने के लिए है?

मुझे लगता है कि एक सरल समाधान है, बारकोड स्कैनर द्वारा नियोजित एक पर एक भिन्नता है।

चरण # 1: एक अच्छा रीस्टफुल यूआरएल बनाएं जिसमें आपकी इच्छित जानकारी हो। रीस्टफुल से मेरा मतलब है ?, #, उस बकवास में से कोई भी नहीं। यदि यह एक अलग डोमेन नाम पर है, तो यह एक आसान स्विम होगा, लेकिन यह आपके मौजूदा डोमेन पर कुछ हो सकता है। इस उत्तर के प्रयोजनों के लिए, मुझे लगता है कि यह यूआरएल http://android.exampleapp.com/our/custom/data/goes/in/here/somewhere जैसा दिखता है।

चरण # 2: चरण # 1 (http://android.exampleapp.com में कुछ भी) के पैटर्न के बाद बनाए गए सभी यूआरएल के लिए, आपके वेब सर्वर को एक पृष्ठ प्रस्तुत करना चाहिए "अरे! आपके पास exampleApp इंस्टॉल नहीं है! अगर आप इस लिंक पर क्लिक करें, यह आपको एंड्रॉइड मार्केट पर ले जाएगा, जहां आप exampleApp इंस्टॉल कर सकते हैं! फिर, इस पेज पर लाए गए लिंक पर क्लिक करने का प्रयास करें, और यह exampleApp शुरू करेगा और आपको ... ummm ... सभी यह अच्छा डेटा "।

चरण # 3: exampleapp में एक गतिविधि VIEW कार्रवाई के साथ एक <intent-filter> है, BROWSEABLE श्रेणी, और एक <data> तत्व आपके योजना और डोमेन की पहचान करने को लागू करें (और, यदि आवश्यक हो तो, आधार पथ, अगर है कि हो जाएगा इन सभी लिंक के लिए वही)।

उपयोगकर्ता क्या देखता है, अगर उनके पास exampleApp इंस्टॉल नहीं है और लिंक पर क्लिक करें, तो चरण # 2 से आपका वेब पेज है, जिससे वे exampleApp इंस्टॉल कर सकते हैं।

उपयोगकर्ता क्या देखता है, अगर उनके पास exampleApp इंस्टॉल है और लिंक पर क्लिक करें, तो आपकी गतिविधि है, जो getIntent().getData() के माध्यम से यूआरएल को पकड़ सकती है और कुछ उपयोगी कर सकती है।


अद्यतन

एक टिप्पणी में, आप ने लिखा है:

मोबाइल वेब पृष्ठ => दुकान डेटा => उपयोगकर्ता इंस्टॉल एप्लिकेशन => उपयोगकर्ता खोलता एप्लिकेशन => ऐप डेटा पुनर्प्राप्त करता है => ऐप सीधे पुनर्प्राप्त सामग्री पर खुलता है

आईएमएचओ, आप इस बारे में बहुत सारी धारणाएं करते हैं कि उपयोगकर्ता क्या करने जा रहा है। बोल्ड में रखे तीरों के बीच में देरी, दिन या देरी हो सकती है।

यदि आप इसे स्वयं वितरित करने जा रहे हैं (उदाहरण के लिए, अपने वेब सर्वर से बाहर), तो आपके पास हमेशा इसके अंदर के डेटा के साथ एक कस्टम एपीके "जलाने" का विकल्प होता है, लेकिन फिर आपको प्रबंधन से निपटना होगा खुद को अद्यतन करता है।

या, यदि आप खाता-आधारित सिस्टम के साथ जा रहे हैं, तो उन्हें एंड्रॉइड मार्केट में भेजने से पहले अपनी साइट पर खाता बनाएं। उस खाते के अंतर्गत डेटा स्टोर करें, और जब वे ऐप से उस खाते से वापस कनेक्ट हों, तो आप ऐप के साथ डेटा से मेल खा सकते हैं।

+0

यह भी ऐसा करने के लिए उपयोगकर्ता द्वारा दो क्लिकों पर आधारित है। मैं इसे प्राप्त यूआरएल पर एक क्लिक पर इसे कम करने की उम्मीद कर रहा हूं। फिर हम उन्हें आसानी से इंस्टॉल प्रक्रिया के माध्यम से स्थानांतरित कर सकते हैं और वे तुरंत डेटा देख सकते हैं। उस पर विचार? – iseff

+0

@iseff: "यह भी, उपयोगकर्ता द्वारा किए जाने वाले दो क्लिकों पर आधारित है।" - यह दो क्लिक से अधिक तरीके से होगा, इससे कोई फर्क नहीं पड़ता कि आप इसे कैसे पूरा करते हैं। क्या आपने कभी एंड्रॉइड पर ऐप इंस्टॉल किया है? बाजार में 2-3 ऐप होंगे, साथ ही ऐप लॉन्च करने के लिए अधिसूचना का उपयोग करके, बाजार से पहले या ऐप के अंदर क्लिक के बावजूद। बीटीडब्ल्यू, मैंने अपने जवाब में कुछ और नोट्स जोड़े। – CommonsWare

+0

बेशक यह पूरी तरह से दो से अधिक क्लिक होंगे; मेरा मतलब है * मूल * लिंक पर दो क्लिक (एक बार क्लिक करें, "डाउनलोड ऐप" पृष्ठ पर भेजा गया, ऐप इंस्टॉल करें, ऐप पर भेजा गया, फिर से क्लिक करें)।मैं एक निर्बाध प्रवाह की तलाश में हूं। हमने निश्चित रूप से पंजीकरण प्रक्रिया के बारे में सोचा है, लेकिन फिर, कम घर्षण बेहतर है। तीर के बीच देरी के "दिन/घंटे/महीने" के संदर्भ में, हम कम से कम कर सकते हैं कि बाजार से लिंक डेटा स्टोर करके, और फिर, ज्यादातर मामलों में, यह बहुत तेज़ होगा। स्पष्ट रूप से इस मुद्दे को हल करने के कई तरीके हैं, लेकिन मैं कम से कम घर्षण की तलाश में हूं। – iseff

10

समाधान वास्तव में काफी सरल है, मैं थोड़ा आश्चर्यचकित हूं कि कोई भी एक वर्ष से अधिक समय तक इसके साथ आने में सक्षम नहीं रहा है। तो यहां यह है:

मूलभूत जानकारी जानकारी संग्रहीत करने के लिए कुकीज़ का उपयोग करना है।डेटा प्रवाह निम्नानुसार है:

खुला वेब पेज -> कुकी सेट करें -> बाजार पर रीडायरेक्ट करें -> ऐप इंस्टॉल करें -> वेब पेज के साथ लॉन्च ब्राउज़र -> कुकी पढ़ें -> कुकी डेटा के साथ कस्टम इरादा शुरू करें -> कैप्चर इरादा और कुकी डेटा

उपयोगकर्ता वेबपृष्ठ पर जाता है (उदाहरण के लिए एक क्यूआर टैग स्कैन करके)। वेबपृष्ठ का यूआरएल उस डेटा का संदर्भ रखता है जिसे आप पास करना चाहते हैं, या डेटा को स्वयं ही रखना है। वेबसाइट डेटा को कुकी के रूप में सेट करती है और एंड्रॉइड मार्केट (http://market.android.com/details?id=com.yourapp) पर रीडायरेक्ट करती है। जैसे ही आपका ऐप लॉन्च होता है, आप एक ब्राउज़र खोलते हैं और उसी वेबपृष्ठ को फिर से लोड करते हैं। हालांकि, यह पता लगाता है कि कुकी पहले से सेट है और एक कस्टम यूआरएल योजना पर रीडायरेक्ट की गई है जैसे उदाहरण: //example.com/installed? Id = डेटा, बाजार की बजाय। एक इरादा फ़िल्टर का उपयोग करके, आप अपनी गतिविधि लॉन्च करते हैं और जानकारी को मंशा से निकालते हैं।

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    Intent intent = getIntent(); 
    if(intent == null || intent.getData() == null || !"example".equals(intent.getData().getScheme())) { 
     String url = "http://example.com/yourApp/index.php"; 
     Intent i = new Intent(Intent.ACTION_VIEW); 
     i.setData(Uri.parse(url)); 
     startActivity(i); 
     finish(); 
     return; 
    }else { 
     Uri uri = intent.getData(); 
     if("example".equals(uri.getScheme())) { 
      id = uri.getQueryParameter("id"); 
     } 
    } 
    ... initialise your activity ... 
} 

एक सरल PHP फ़ाइल (वेबसाइट) आसान प्रदर्शन के लिए:

<?php 
$value = "123"; 
if(!isset($_COOKIE["TestCookie"])) { 
    setcookie("TestCookie", $value, time()+3600); /* expire in 1 hour */ 
    header("Location: http://market.android.com/details?id=com.yourapp"); 
    exit; 
}else { 
    header("Location: example://example.com/installed?id=".$_COOKIE["TestCookie"]); 
    exit; 
} 
?> 

और लक्ष्य फ़िल्टर:

<!-- Handle URLs like loyalty://example.com/merchant/123 --> 
<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="example" android:host="example.com" /> 
</intent-filter> 

BTW

यहाँ प्रासंगिक अभ्यास कोड है , मैंने इस मुद्दे के बारे में blog का निर्णय लिया है।

+0

क्या आपने इसके साथ परीक्षण पास किया है? मूल प्रश्न में, आइसफ ने अपनी कुकीज़ को काम नहीं कर रहे हैं (सैंडबॉक्स किए गए वातावरण), इसलिए मुझे आश्चर्य है कि क्या आप ऐप में ब्राउज़र से कुकी 'टेस्टकुकी' तक पहुंचने में सक्षम थे। धन्यवाद – DougA

+1

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

+1

यह बढ़िया है! आप "स्टॉक ब्राउज़र" का उल्लेख करते हैं लेकिन फ़ायरफ़ॉक्स या स्काईफायर जैसे गैर-स्टॉक ब्राउज़र के बारे में क्या? मुझे उम्मीद है कि यह सभी ब्राउज़रों में काम करता है, सिर्फ डिफ़ॉल्ट नहीं। (यदि आप एक प्रिय हो सकते हैं और उनको भी परीक्षण कर सकते हैं ... इससे मुझे यकीन है कि कई लोगों की मदद होगी!) – DougA

0

देखें:
http://market.android.com/details?id=your.package.name&referrer=your_wanted_parameter

कोई उपयोगकर्ता इस लिंक पर क्लिक करके आवेदन अपने प्रसारण रिसीवर एक प्रसारण com.android.vending प्राप्त होगा स्थापित करता है के बाद: https://stackoverflow.com/a/7577379/710284

आप की तरह एक INSTALL_REFERRER लिंक का उपयोग कर सकते हैं। "Your_wanted_parameter" मान के साथ INSTALL_REFERRER।

और जानकारी:
http://code.google.com/mobile/analytics/docs/android/#android-market-tracking
Get referrer after installing app from Android Market
Get Android Google Analytics referrer tag

+0

रेफरर अविश्वसनीय लगता है और कुछ उपकरणों पर काम नहीं करता है। "Google Play के लिए रेफरर टेस्ट" और "रेफरर टेस्ट इंस्टॉल करें" जैसे मार्केट ऐप्स मेरे गैलेक्सी एस III पर रेफरर नहीं दिखाते हैं। –

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

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