17

मैं अमेज़ॅन ऐप स्टोर के साथ-साथ Google Play पर अपने ऐप को प्रकाशित करने की योजना बना रहा हूं, और मेरे ऐप में कुछ चीजें हैं जिन्हें ऐप्पल ऐप स्टोर से ऐप इंस्टॉल किया गया था या नहीं, इस पर निर्भर करता है कि थोड़ा अलग व्यवहार करना होगा। अगर मैं PackageManager.getInstallerPackageName(String packageName) विधि सही तरीके से समझ गया, तो यह मुझे उस एप्लिकेशन का नाम बताता है जिसने मेरा ऐप इंस्टॉल किया था। सही? यदि हां, तो क्या किसी को पता है कि इस विधि द्वारा लौटाया गया मूल्य क्या होगा यदि मेरा ऐप अमेज़ॅन ऐप स्टोर से इंस्टॉल किया गया था? यदि नहीं, तो क्या किसी को यह पता लगाने के लिए उपयोग किया जा सकता है कि मेरा ऐप अमेज़ॅन ऐप स्टोर से इंस्टॉल किया गया था या नहीं?क्या पैकेजमैंजर.getInstallerPackageName() मुझे बता सकता है कि मेरा ऐप अमेज़ॅन ऐप स्टोर से स्थापित किया गया था?

नोट: मैं जो PackageManager.getInstallerPackageName(String packageName) के उपयोग की ओर इशारा करते आवेदन है कि मेरे ऐप स्थापित के नाम का निर्धारण उत्तर दिया गया है स्टैक ओवरफ़्लो पर अन्य प्रश्न के बारे में पता कर रहा हूँ। हालांकि, खोज स्टैक ओवरफ़्लो और कहीं और, मैं करने में सक्षम नहीं किया गया है का निर्धारण क्या मूल्य PackageManager.getInstallerPackageName(String packageName) द्वारा दिया मामले एप्लिकेशन अमेज़न app की दुकान से स्थापित किया गया था में होगा।

+0

यह है 'uk.amazon.mShop.android', जो' गूगल पर Android' के लिए अमेज़न मोबाइल का पैकेज नाम है खेलते हैं? ... –

+2

एंड्रॉयड ग्राहक के लिए अमेज़न एपस्टोर नहीं पर है गूगल प्ले। आप इसे अमेज़ॅन से डाउनलोड करते हैं। बस अपने डिवाइस पर क्लाइंट ऐप डाउनलोड करें, अपने ऐपस्टोर से कुछ अन्य ऐप डाउनलोड करें, फिर यह देखने के लिए 'getInstallerPackageName()' का उपयोग करें। मेरा अनुमान है कि यह किसी भी अन्य माध्यम से स्थापित कोई भी ऐप होगा। – CommonsWare

उत्तर

8

PackageManager.getInstallerPackageName(myPackageName), जहां myPackageName पैकेज के नाम (ऐप्लिकेशन है, आप संस्थापक निर्धारित करने के लिए इच्छा की) है कॉलिंग निम्न मान देता है:

  • null अगर एप्लिकेशन अमेज़न app से स्थापित किया गया था स्टोर
  • null यदि ऐप इंस्टॉल किया गया था तो सीधे किसी भी ऐप स्टोर के बाहर स्थापित किया गया था।
  • com.android.vending यदि ऐप Google Play से इंस्टॉल किया गया था।

(सूचक के लिए धन्यवाद @CommonsWare।)

+0

आदिल, क्या आपने कभी Google Play के साथ नवीनतम एंड्रॉइड डिवाइस पर परीक्षण किया है? जहां तक ​​मुझे पता है, स्टोर ऐप का नाम "com.android.vending" के बजाय "com.google.play" में बदल दिया गया है। कौन सा वापस किया जाएगा? वर्तमान में, मैंने "एंड्रॉइड मार्केट" से अपडेट किए गए "Google Play" ऐप के साथ एक वास्तविक डिवाइस पर परीक्षण किया। यह "com.android.vending" के रूप में दिखाता है। मुझे यकीन नहीं है कि नवीनतम "Google Play" ऐप के साथ आने वाले डिवाइस अभी भी "com.android.vending" दिखाते हैं। मेरे पास ऐसा कोई नया डिवाइस नहीं है। यदि आप कर सकते हैं, तो क्या आप इसे सत्यापित करने में मदद कर सकते हैं? धन्यवाद – lucas

+0

हाय लुकास, मैंने एंड्रॉइड संस्करण 4.0.4 चलाने वाले एंड्रॉइड डिवाइस के साथ परीक्षण किया और उस समय के नवीनतम Google Play संस्करण के साथ ... –

+2

स्पष्ट तथ्य यह है कि अमेज़ॅन या कोई ऐप स्टोर getInstallerPackageName के लिए शून्य वापस आता है उनके हिस्से पर पूरी तरह विफलता की तरह लगता है। किसी उपयोगकर्ता को ध्यान में रखते हुए Google Play और अमेज़ॅन या अन्य स्टोर एक ही डिवाइस पर स्थापित हो सकते हैं, ऐसा लगता है कि स्टोर में ऐप के लिए ऐप को जोड़ने या लिंक करने के लिए यह एकमात्र तरीका है। मान लीजिए कि आप एकाधिक एपीके उत्पन्न नहीं करना चाहते हैं। –

11

अच्छी खबर है! Apparently अमेज़ॅन स्टोर का नवीनतम संस्करण अंततः Google Play's "com.android.vending" के विपरीत PackageManager.getInstallerPackageName()"com.amazon.venezia" पर सेट करता है।

पुराने ऐप्स अभी भी null वापस आ जाएंगे, और मैंने वास्तव में एपीआई सत्यापित नहीं किया है या फिर नया स्टोर इंस्टॉल करना है या फिर पुराने ऐप को अपग्रेड करना इंस्टॉलर सेट करेगा। लेकिन एक नया ऐप इंस्टॉल करना और /data/system/packages.xml की जांच करना installer सही ढंग से सेट है।

16

चूंकि सैमसंग ने PackageManager.getInstallerPackageName() को लागू नहीं किया है, यह अभी भी शून्य हो जाता है। तो सभी संकुल प्राप्त करने के लिए PackageManager.getInstalledPackages() का उपयोग करें और samsungapp packagename "com.sec.android.app.samsungapps" के लिए खोजें।

स्टोर:

null - developer 
com.android.vending - google play 
com.amazon.venezia - amazon app 
com.sec.android.app.samsungapps - samsung app store 

कोड:

// lets start with google play store link 
String link = "https://play.google.com/store/apps/details?id=com.hellothupten.capital2countryquiz"; 

//find out the installer for your app package name. 
String installer = getPackageManager().getInstallerPackageName(
     "com.hellothupten.capital2countryquiz"); 

if (installer == null) { 
    List<PackageInfo> installedPackages = getPackageManager() 
      .getInstalledPackages(PackageManager.GET_ACTIVITIES); 
    for (PackageInfo p : installedPackages) { 
     if (p.packageName.contains("samsungapps")) { 
      // change to samsung app store link 
      link = "http://apps.samsung.com/mars/topApps/topAppsDetail.as?productId=000000840239"; 
      break; 
     } 
    } 
} else if (installer.contains("amazon")) { 
    // change to amazon app store link 
    link = "amzn://apps/android?p=com.hellothupten.capital2countryquiz"; 
} else if (installer.contains("samsung")) { 
    // change to samsung app store link. This does not 
    // exist..but who knows samsung may implement 
    // getInstallerPackageName in future, I assume it will 
    // contain a word samsung in its package name. 
    link = "http://apps.samsung.com/mars/topApps/topAppsDetail.as?productId=000000840239"; 

} 

उपयोग की दुकान कड़ी के रूप में लिंक चर।

अद्यतन:

samsungapps://ProductDetail/com.sec.chaton 

सैमसंग: http://developer.samsung.com/android/technical-docs/Samsung-Apps-Deeplink-Guide

2

तुम इतनी निर्धारित करने के लिए अपने स्वयं के अनुप्रयोग अमेज़न की दुकान से स्थापित किया गया है कि क्या कोशिश कर रहे हैं, उस स्थिति के लिए निम्न से संबंधित है। लेकिन सवाल पूछने के बाद से चीजें बदल गई हैं, इसलिए यह उत्तर 2016 के लिए मान्य है, 2012 में नहीं।

जैसा कि ऊपर बताया गया है, अमेज़ॅन इंस्टॉलर के संस्करणों द्वारा स्थापित ऐप्स 2013 के मध्य से पहले रिलीज किए गए ऐप्स getInstallerPackageName() से जब उस विधि को स्थापित ऐप का पैकेज नाम पास कर दिया जाता है। लेकिन उस समय के बाद उन्होंने इस तरह के कॉल के लिए "com.amazon.venezia" वापस करना शुरू कर दिया। और हाल ही में, अमेज़ॅन अंडरग्राउंड ऐप एक दूसरा इंस्टॉलर पैकेज नाम, com.amazon.mshop.android असाइन कर सकता है।

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

, यदि इस समस्या के बावजूद, आप इस दृष्टिकोण का उपयोग करना चाहते हैं, लेकिन पुराने संस्थापक संस्करणों है कि रिक्त के रूप में संस्थापक निशान होने उपकरणों के लिए मिथ्या नकारात्मक से बचने के लिए चाहते हैं, तो आपको निम्न कोशिश कर सकते हैं:

  • टेस्ट getInstallerPackageName() यह देखने के लिए कि यह शून्य है या नहीं।

  • यदि गैर-शून्य है, तो यह देखने के लिए जांच करें कि यह com.amazon से शुरू होता है, और आप विश्वास कर सकते हैं कि यह अमेज़ॅन से स्थापित किया गया है, और आप विश्वास कर सकते हैं कि यह अमेज़ॅन से स्थापित नहीं किया गया था नहीं करता।

  • लेकिन अगर शून्य है, तो डिवाइस पर हर पैकेज पर पुनरावृत्ति करके एक अतिरिक्त परीक्षण करें, प्रत्येक पैकेज नाम को इन्स्टॉलरपेकेजनाम() प्राप्त करने के लिए सामना करना पड़ रहा है, यह देखने के लिए कि क्या कोई भी "com.amazon" से शुरू होता है या नहीं ।

    • कि मूल्य के साथ वहाँ कोई नहीं कर रहे हैं, तो अपने शून्य मान अस्पष्ट है, और आप पर विचार करना चाहिए कि आप किसी भी जानकारी एक ही रास्ता या के बारे में है कि क्या अपने अनुप्रयोग अमेज़न की दुकान से स्थापित किया गया था अन्य की जरूरत नहीं है कि (के रूप में साइड लोडेड का विरोध किया)।

    • लेकिन अगर यहां तक ​​कि इंस्टॉलर पैकेज मूल्य होने से एक ही ऐप्लिकेशन है, तो आप यह मान सकते हैं अपने अनुप्रयोग , अमेज़न की दुकान से स्थापित नहीं क्योंकि यह एक सुरक्षित शर्त डिवाइस का एक संस्करण चल रहा है वह यह है कि यह था कि अमेज़ॅन स्टोर जो "com.amazon" से शुरू होने वाले इंस्टॉलर पैकेज नाम के साथ इंस्टॉल किए गए ऐप्स को टैग करता है, यह देखते हुए कि आपके अलावा कम से कम एक ऐप वास्तव में इस तरह से टैग किया गया है - अत्यंत किसी भी अन्य तरीके से होने की संभावना नहीं है। और इसका मतलब है कि के लिए शून्य मान ऐप अमेज़ॅन इंस्टॉलर द्वारा निर्मित नहीं किया गया था, बल्कि कुछ अन्य इंस्टॉलर द्वारा - और संभवतः इसका मतलब है कि आप ऐप को अपने एपीके की स्थानीय प्रति से अलग-अलग लोड किया गया था।

+0

अमेज़ॅन uk.amazon.mShop.android का भी उपयोग करता है – Ettore