2013-02-13 38 views
10

मैंने मूल रूप से this question से पूछा, इंस्टॉल पर मेरे ऐप में बाज़ार लिंक के माध्यम से पैरामीटर पास करने के बारे में।com.android.vending.INSTALL_REFERRER काम नहीं कर रहा है

com.android.vending.INSTALL_REFERRER की क्रिया के साथ BroadcastListener बनाने के लिए हर कोई कह रहा है। ऐसा लगता है कि इस पर सभी दस्तावेज यह दर्शाते हैं कि यह Google Analytics की क्षमता है (दस्तावेज़ीकरण v1 में है, लेकिन मैं इस बिंदु पर केवल v2 एसडीके डाउनलोड कर सकता हूं ... इसलिए मैं इसका उपयोग कर रहा हूं)। मैं इन लिंक को डेटा पास करने के लिए नहीं मिल सकता। मेरे पास मेरा पूर्ण अभिव्यक्ति और मेरा प्रसारण श्रोता है। मैंने Google Analytics को केवल एक आवश्यकता के मामले में शामिल किया है।

यह बिल्कुल भी काम नहीं करता। मेरा प्रसारण श्रोता कभी नहीं बुलाया जाता है, लॉग में कुछ भी मुद्रित नहीं होता है। मदद!

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
     package="com.robotsidekick.webbrowser" 
     android:versionCode="4" 
     android:versionName="4.0"> 

<uses-sdk android:minSdkVersion="17"/> 

<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 

<application 
    android:label="@string/app_name" 
    android:icon="@drawable/ic_launcher"> 

    <activity 
     android:name="WebBrowser" 
     android:label="@string/app_name"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN"/> 
      <category android:name="android.intent.category.LAUNCHER"/> 
     </intent-filter> 
    </activity> 

    <receiver 
     android:exported="true" 
     android:name="com.robotsidekick.webbrowser.InstallReceiver"> 
     <intent-filter> 
      <action android:name="com.android.vending.INSTALL_REFERRER" /> 
     </intent-filter> 
    </receiver> 

</application> 

</manifest> 

प्रसारण श्रोता

public class InstallReceiver extends BroadcastReceiver 
{ 
    private static final String TAG = "InstallReceiver"; 

    public void onReceive(Context context, Intent intent) 
    { 
     Log.e(TAG, "Context: " + context); 
     Bundle extras = intent.getExtras(); 
     if (extras != null) 
     { 
      Log.e(TAG, "Extras:"); 
      for (String keys : extras.keySet()) 
      { 
       Log.e(TAG, keys + " -> " + extras.get(keys)); 
      } 
     } 
     else 
     { 
      Log.e(TAG, "Extras are null"); 
     } 
    } 
} 
+2

किसी भी मुद्दे के साथ आने वाले किसी के लिए मेरे पास _a_ समाधान है, भले ही कोई अच्छा न हो, अगर आप पहले से ही Google Analytics का उपयोग नहीं कर रहे हैं। मैंने 'com.google.analytics.tracking.android.AnalyticsReceiver' को विस्तारित करने के लिए 'InstallReceiver' को बदल दिया और सबकुछ जादुई रूप से काम किया। मैं ईमानदारी से इसे समझा नहीं सकता। – xbakesx

+0

मुझे एनालिटिक्स जार (बीटा 5) के हिस्से के रूप में com.google.analytics.tracking.android.AnalyticsReceiver भी नहीं दिखाई देता है। आप कौन सा संस्करण उपयोग कर रहे हैं? – sghael

+0

मुझे पूरा यकीन नहीं है कि मैं किस संस्करण का उपयोग कर रहा हूं क्योंकि एक सच्चे पेशेवर की तरह मैंने अपने सभी दस्तावेज फेंक दिए ... निश्चित रूप से यह बीटा v3 था। – xbakesx

उत्तर

4

तो xbakesx कहना है कि यह करता है, तो उसकी रिसीवर com.google.analytics.tracking.android.AnalyticsReceiver फैली काम करने के लिए लगता है।

मुझे लगता है कि कुंजी यह है कि इरादे के लिए अनुमति है ... AnalyticsReceiver और इसलिए कोई अन्य वर्ग जो इसे विस्तारित नहीं कर रहा है, वह इरादा उठा सकता है। यदि आप उनके परीक्षण प्रसारण https://developers.google.com/analytics/solutions/testing-play-campaigns पर देखते हैं तो यह उस वर्ग के लिए विशिष्ट दिखाई देता है।

यदि आप उस परीक्षण प्रसारण को बदलते हैं ताकि आपकी कक्षा com.google.analytics.tracking.android.AnalyticsReceiver को बदल दे ताकि आप इसे प्राप्त कर सकें। सबसे बड़ी समस्या यह है कि वे बीटा 4 या 5 में इस वर्ग को लॉक कर चुके थे। अगर किसी के पास बीटा 3 का लिंक है तो हम इसका परीक्षण कर सकते हैं, या यदि एक्सबेकैक्स नए जारों के साथ खेलने के साथ पुष्टि कर सकता है जो रॉक होगा!

अद्यतन:

BAM! तो अनुमतियाँ कोई मुद्दा नहीं हैं। मैंने एक टेस्ट प्रोजेक्ट बनाया और रेफरर लिंक का परीक्षण करने के लिए PlayStores अल्फा परीक्षण का उपयोग किया, जिसे आप यहां बना सकते हैं: https://developers.google.com/analytics/devguides/collection/android/v2/campaigns

अच्छी बात यह है कि आपको किसी भी GA जार की आवश्यकता नहीं है! यहां मेरी टेस्ट प्रोजेक्ट चेकआउट करें: https://github.com/twotoasters/AnalyticsTest/ यह प्रोजेक्ट आपको यह भी दिखाता है कि आपको आवश्यक सारी जानकारी प्राप्त करने के लिए लिंक को कैसे पार्स करना है।

+0

यह निश्चित रूप से स्पष्ट है कि बीटा 3 के बाद, आप 'AnalyticsReceiver' का विस्तार नहीं कर सकते हैं। मैं परीक्षण प्रसारण बदल सकता हूं, लेकिन मुझे पूरा यकीन नहीं है कि आप प्रसारण को कैसे बदल सकते हैं, सिस्टम इसे प्राप्त करने के लिए लक्ष्य पैकेज/वर्ग निर्दिष्ट नहीं करता है। तो बीटा 3 का उपयोग करने से पहले और कभी अपग्रेड नहीं कर रहा है, मुझे यकीन नहीं है कि यह जिस तरीके से हम चाहते हैं उसे काम करने के लिए कैसे प्राप्त करें। – xbakesx

+0

अद्यतन उत्तर। यह देखने के लिए बस यह देखने के लिए मेरा उदाहरण प्रोजेक्ट चेकआउट करें। https://github.com/twotoasters/AnalyticsTest/ – MinceMan

+2

नमस्ते, नकली एडीबी प्रसारण का उपयोग करते समय, मैंने रेफरर रिसीवर बनाने के लिए आपके भंडार का पालन किया। लेकिन अल्फा में ऐप जारी करने पर मुझे कोई प्रसारण नहीं मिल रहा है। क्या यह अल्फा रिलीज में काम नहीं करता है ?? https://productforums.google.com/d/msg/analytics/FV2mOfywmlU/5z26mbQXyuwJ – mango

4

कई विफल प्रयासों के बाद मैं अंततः लॉगकैट में पास किए गए रेफ़रल पैरामीटर देख सकता हूं।

रास्ते के साथ, मुझे कुछ चीजें पता चला, मुझे यकीन नहीं है कि मैं इसे अनुष्ठान या गलत कर रहा हूं, लेकिन कुछ कारणों से, ये काम करते थे। अगर कोई अभी भी अटक गया है, तो वे मेरी शिक्षाओं से कुछ पॉइंटर्स प्राप्त कर सकते हैं।

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

public class CustomBR extends BroadcastReceiver { 

    private static final String D_TAG = "BR"; 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     Log.d(D_TAG, "CustomReceiver onReceive (context, intent)"); 
     try { 

      String referrer = intent.getStringExtra("referrer"); 
      // pass the referrer string to another singleton class to post it to server 
      HandleServerComm.getInstance().postData(referrer); 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

} 

बी आप

 
    <receiver android:exported="true" android:name="com.example.myapp.CustomBR" android:enabled="true"> 
     <intent-filter> 
      <action android:name="com.android.vending.INSTALL_REFERRER" /> 
     </intent-filter> 
    </receiver> 

बनाया है सी सुनिश्चित करें कि आप सही ढंग से स्थापित एडीबी है स्थानीय पर्यावरण पर इस परीक्षण करने के लिए बनाने के कस्टम रिसीवर को प्रतिबिंबित करने के AndroidManifest.xml फ़ाइल अद्यतन करें। आपको रिमोट डीबगिंग सक्षम के साथ यूएसबी के माध्यम से कनेक्ट होने के लिए एक डिवाइस की भी आवश्यकता होगी।

डी। डिवाइस पर install_referrer को दूरस्थ रूप से प्रसारित करने और इसे पैरामीटर पास करने के लिए adb shell कमांड चलाएं।

आदेश

adb shell am broadcast -a com.android.vending.INSTALL_REFERRER -n com.example.myapp/.CustomBR --es "token" "sample_token" --es "source" "banner" 

ध्यान दें कि इस आदेश के महत्वपूर्ण हिस्से com.example.myapp/.CustomBR और --es "token" "sample_token" जहां --es अतिरिक्त पैरामीटर इरादे के साथ भेजा जा रहा है है। --es के बाद पहला उद्धरण क्वेरीस्ट्रिंग/पैरामीटर नाम है और दूसरा उद्धरण मान है। इसी तरह, यदि आपको एक से अधिक मान जोड़ना है, तो ऊपर दिए गए उदाहरण में दिखाए गए अनुसार इसे दोहराएं।

ई। आखिर में सबसे महत्वपूर्ण हिस्सा जिसने मुझे हर समय निराश रखा - ऐप डिवाइस पर ही इंस्टॉल किया गया। आपका ऐप डिवाइस पर स्थापित होना चाहिए लेकिन बिल्कुल नहीं चलना चाहिए। ऐसा करने के लिए, आपको ऐप को "फोर्स बंद करना होगा" और फिर install_referrer को आग लगाने के लिए adb shell कमांड को आग लगाना होगा। उस समय, आपको आवश्यक डेटा के साथ लॉगकट लाइट अप देखना चाहिए।

एफ। आप Google play store ऐप पर अपडेट को अनइंस्टॉल करना भी चाहते हैं और इसे फ़ैक्टरी सेटिंग में पुनर्स्थापित करना चाहते हैं। कई बार (पुष्टि नहीं की गई) Google play का संस्करण यह निर्धारित करता है कि ऐप में install_referrer के माध्यम से कौन सा डेटा पास किया जा रहा है या यदि संदर्भकर्ता को बिल्कुल भी कहा जाता है।

उम्मीद है कि यह किसी की मदद करेगा।

+0

ऐसा लगता है कि आपका adb shell कमांड स्ट्रिंग एक्स्ट्रा "टोकन" और "स्रोत" पास कर रहा है, लेकिन आपका रिसीवर अतिरिक्त "रेफरर" ढूंढ रहा है। क्या कुछ अस्वस्थ है? –

2

एक ऐप फ़िल्टर के साथ अपने ऐप के AndroidManifest.xml में BroadcastReceiver को पंजीकृत करना ऐप इंस्टॉल करने के लिए सही समाधान है, चाहे Google Analytics का उपयोग कर रहा हो या नहीं। अपने रिसीवर और निम्न सेवा के लिए भी नाम = "com.google.android.gms.analytics.CampaignTrackingReceiver":

<receiver 
    android:exported="true" 
    android:name="com.yourcompany.package.receivers.InstallReceiver"> 
    <intent-filter> 
     <action android:name="com.android.vending.INSTALL_REFERRER" /> 
    </intent-filter> 
</receiver> 

आप पहले से ही गूगल एनालिटिक्स उपयोग कर रहे हैं तो आप बस एंड्रॉयड निर्दिष्ट करें। दोनों को Google Play services client library में शामिल किया गया है इसलिए लिखने के लिए कोई जावा कोड नहीं है। यदि आपके पास पहले से नहीं है, तो आपको अपने ऐप के लिए Google Analytics के लिए initial setup instructions पर भी जाना होगा।

<service android:name="com.google.android.gms.analytics.CampaignTrackingService" /> 

आप Google Analytics का उपयोग नहीं कर रहे हैं तो आप अपने खुद के अपने जावा कोड BroadcastReceiver में परिभाषित करने के लिए की आवश्यकता होगी। onReceive लागू करते समय आप प्राप्त इरादे पर अतिरिक्त निरीक्षण का निरीक्षण करना चाहेंगे।

Google Play (स्टोर) द्वारा प्राप्त यूआरएल में रेफरर पैरामीटर रेफ़रल के लिए एंड्रॉइड ऐप के माध्यम से पारित एकमात्र पैरामीटर है, इसलिए इसमें कुछ पैरामीटर एन्कोड करना बहुत आम है। Google Analytics के लिए जिसका अर्थ है उद्योग मानक utm_ * पैरामीटर, लेकिन आप दूसरों का उपयोग कर सकते हैं। यहां परीक्षण एडीबी कमांड है जो मैं आमतौर पर पूर्ण प्रवाह को स्थापित करने और परीक्षण करने के लिए Google Play खोलने के लिए उपयोग करता हूं।

adb shell "am start -a android.intent.action.VIEW -d \"https://play.google.com/store/apps/details?id=com.somecompany.package&referrer=utm_source%253Dtest_campaign_source%2526utm_medium%253Dtest_campaign_medium%2526utm_term%253Dtest_campaign_term%2526utm_content%253Dtest_campaign_content%2526utm_campaign%253Dtest_campaign_name\"" 

परीक्षण नोट्स:

  • जब इस प्रवाह यह है कि उपरोक्त आदेश एक निर्गम जहां आशय अभी भी संलग्न पूर्ण संदर्भ देने वाली जानकारी के साथ अपने कंसोल के लिए लॉग इन किया गया था में हुई जांच करने के लिए बहुत महत्वपूर्ण है परीक्षण। बचने के लिए यह बहुत आसान है और चुपचाप रेफरर को छोड़ दें।
  • याद रखें कि एपीके को Google Play (स्टोर) द्वारा उस डिवाइस पर इंस्टॉल किया जाना चाहिए जिस पर आप परीक्षण कर रहे हैं (आप साइड-लोड नहीं कर सकते)। इसलिए, आपको इसका परीक्षण करने के लिए आमतौर पर Google Play में अपने अल्फा वितरण चैनल का उपयोग करने की आवश्यकता होती है।
  • यह ध्यान रखना महत्वपूर्ण है कि यदि डिवाइस है> = Honeycomb MR1 INSTALL_REFERRER इरादा तब ऐप स्थापित होने के बाद ऐप लॉन्च होने के बाद प्रसारण किया जाता है।
  • आपको रेफरर प्रवाह का परीक्षण करने के लिए हर बार अपने ऐप को पुनर्स्थापित करने की आवश्यकता होगी।
  • एंड्रॉइड Google Play ऐप से ऐप इंस्टॉल होने पर रेफ़रल ट्रैक किए जाते हैं, लेकिन स्टोर का वेब संस्करण नहीं।

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

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