प्रोग्राम को ऐप अपडेट के लिए प्ले स्टोर पर जांचें


92

मैंने अपना ऐप Google Play Store पर डाल दिया है। यह मेरी कंपनी के बहुत सारे ग्राहकों द्वारा स्थापित किया गया है। मैं तंत्र को समझता हूं कि ऐप को अपग्रेड करने का इरादा कैसे है।

उपयोगकर्ताओं को ऑटो-अपडेट के लिए प्रत्येक ऐप के लिए प्लेस्टोर ऐप में ऑटो-अपडेट चेक बॉक्स की जांच करनी चाहिए। हालाँकि कुछ उपयोगकर्ताओं ने इसे अनियंत्रित किया है या पहली बार में इसकी जाँच नहीं की है।

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

अगर प्ले स्टोर पर मेरे ऐप का अपडेटेड वर्जन है तो क्या प्रोग्रामेटिकली चेक करने का कोई तरीका है?

क्या मेरे पास वह कोड हो सकता है जो हर बार उपयोगकर्ता द्वारा Play Store की जाँच करने वाले ऐप को शुरू करता है? यदि कोई अद्यतन संस्करण है, तो उपयोगकर्ता को प्लेस्टोर पर निर्देशित किया जा सकता है। इसका मतलब यह होगा कि ऑटो-अपडेट की जाँच करना आवश्यक नहीं है।

अग्रिम में धन्यवाद

मैट


अगर ऐप में कोई अपडेट उपलब्ध है तो क्या प्ले स्टोर पहले से ही उपयोगकर्ता को सूचना नहीं देता है?
— निश्चल कोरे

1
क्या आपका एप्लिकेशन आपके द्वारा लिखे गए एपीआई से दूर क्लाउड / इंटरनेट से जुड़ता है - जैसा कि आपके पास बस एक 'संस्करण' चर हो सकता है जिसे आप मैन्युअल रूप से अपडेट कर सकते हैं - आवेदन खोलने पर, स्थानीय संस्करण को क्लाउड संस्करण के साथ जांचें - यदि वे अलग, एक अद्यतन का सुझाव
— gavlaaaaaaaa

मैंने ऐसा करने के लिए jsoup का उपयोग किया था, लेकिन अब वर्तमान संस्करण फ़ील्ड को निकालने के लिए regex का उपयोग करें ।
— गीजर मैकनबिन्स

जवाबों:


41

अपडेट १9 अक्टूबर २०१ ९

https://developer.android.com/guide/app-bundle/in-app-updates

अपडेट 24 अप्रैल 2019:

Android ने एक ऐसी सुविधा की घोषणा की जो संभवतः इस समस्या को ठीक कर देगी। इन-ऐप अपडेट एपीआई का उपयोग करना: https://android-developers.googleblog.com/2018/11/unfolding-right-now-at-androiddevsummit.html

मूल:

जहाँ तक मुझे पता है, कोई आधिकारिक Google API नहीं है जो इसका समर्थन करता है।

आपको एक एपीआई से एक संस्करण संख्या प्राप्त करने पर विचार करना चाहिए।

इसके बजाय बाहरी एपीआई या वेबपेज (जैसे Google Play Store) से कनेक्ट करने के लिए। एक जोखिम है कि एपीआई या वेबपेज में कुछ बदल सकता है, इसलिए आपको यह देखने के लिए विचार करना चाहिए कि क्या वर्तमान ऐप का संस्करण कोड आपके स्वयं के एपीआई से प्राप्त संस्करण संख्या के नीचे है।

बस याद रखें कि यदि आप अपने ऐप को अपडेट करते हैं, तो आपको ऐप के वर्जन नंबर के साथ अपने एपीआई में संस्करण को बदलना होगा।

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

आपको यह मूल्य अपने Google Play Store पेज से प्राप्त करना है (इस बीच बदल दिया गया है, अब काम नहीं कर रहा है):

<div class="content" itemprop="softwareVersion"> x.x.x  </div>

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

संकेत दें कि उसे आदर्श रूप से अधिसूचना के साथ अपडेट करने की आवश्यकता है।

चीज़ें जो आप कर सकते हों

अपने खुद के एपीआई का उपयोग कर संस्करण संख्या

पेशेवरों:

  • Google Play Store के पूरे कोड को लोड करने की आवश्यकता नहीं है (डेटा / बैंडविड्थ पर बचाता है)

विपक्ष:

  • उपयोगकर्ता ऑफ़लाइन हो सकता है, जो कि एपीआई को एक्सेस नहीं किए जाने के बाद से बेकार की जाँच करता है

वेबपेज Google Play Store पर संस्करण संख्या

पेशेवरों:

  • आपको API की आवश्यकता नहीं है

विपक्ष:

  • उपयोगकर्ता ऑफ़लाइन हो सकता है, जो कि एपीआई को एक्सेस नहीं किए जाने के बाद से बेकार की जाँच करता है
    • इस पद्धति का उपयोग करने से आपके उपयोगकर्ताओं को अधिक बैंडविड्थ / मोबाइल डेटा खर्च हो सकता है
    • प्ले स्टोर वेबपेज बदल सकता है जो आपके संस्करण को 'रिपर' नहीं बनाता है।

Google Play Store के वेबपेज पर संस्करण संख्या अब किसी भी विचार के Current Versionरूप में सूचीबद्ध Varies with deviceहै कि इसे कैसे हल किया जा सकता है या यदि कोई अन्य विकल्प उपलब्ध है ??
— shadygoneinsane


वास्तव में। इस प्रश्न के लिए आया था क्योंकि अब हम वेबरेक्स्ट करते समय अपने स्वयं के Google play पेज के html स्रोत तक नहीं पहुँच सकते। हम एक FileNotFoundException प्राप्त करते हैं।
— ग्रिस्ग्राम

एक div की तलाश में कुछ ऐसा करने की कोशिश करेंगे जिसमें पाठ शामिल हो। वर्तमान संस्करण / Huidige छंद अगले संख्या का पता लगाएं और अगले भाग में डॉट्स अंक। <div class = "hAyfc"> <div class = "BgcNfc"> Huidige versie </ div> <div> <span class = "htlgb"> 1.0 </ span> </ div>
— रिचर्ड लिंडआउट

Classname wil को शायद अपनी वेबसाइट पर हर अपडेट में बदला जा सकता है।
— रिचर्ड लिंडआउट

35

JSoup को अपने ऐप्स में शामिल करें build.gradle फ़ाइल:

dependencies {
    compile 'org.jsoup:jsoup:1.8.3'
}

और वर्तमान संस्करण प्राप्त करें जैसे:

currentVersion = getPackageManager().getPackageInfo(getPackageName(), 0).versionName;

और निम्नलिखित धागा निष्पादित करें:

private class GetVersionCode extends AsyncTask<Void, String, String> {
    @Override
    protected String doInBackground(Void... voids) {

    String newVersion = null;
    try {
        newVersion = Jsoup.connect("https://play.google.com/store/apps/details?id=" + MainActivity.this.getPackageName() + "&hl=it")
                .timeout(30000)
                .userAgent("Mozilla/5.0 (Windows; U; WindowsNT 5.1; en-US; rv1.8.1.6) Gecko/20070725 Firefox/2.0.0.6")
                .referrer("http://www.google.com")
                .get()
                .select(".hAyfc .htlgb")
                .get(7)
                .ownText();
        return newVersion;
    } catch (Exception e) {
        return newVersion;
    }
    }

    @Override
    protected void onPostExecute(String onlineVersion) {
        super.onPostExecute(onlineVersion);
        Log.d("update", "Current version " + currentVersion + "playstore version " + onlineVersion);
        if (onlineVersion != null && !onlineVersion.isEmpty()) {
            if (Float.valueOf(currentVersion) < Float.valueOf(onlineVersion)) {
                //show dialog
            }
        }
    }

अधिक जानकारी के लिए देखें: http://revisitingandroid.blogspot.in/2016/12/programmatically-check-play-store-for.html


@Override संरक्षित शून्य onPostExecute (स्ट्रिंग ऑनलाइनVersion) {} पर अगर चेक संस्करण के लिए शर्त फ्लोट मान में नहीं होनी चाहिए। क्योंकि यह इस अवैध java.lang.NumberFormatException जैसे त्रुटि को फेंक सकता है: अमान्य फ्लोट: "1.0.6"। तो इस का उपयोग करें। अगर (currentVersion.equalsIgnoreCase (onlineVersion)) {....}
— धर्मशिष्ठ

1
Jsoup के बिना इसे करने के बारे में कोई विचार?
— हितेश साहू

प्रिय @HiteshSahu, आपको playstore URL " play.google.com/store/apps/details?id=com.whatsapp&hl=en " पर हिट करना होगा । यह ओपन पेज यूआरएल। पेज पर राइट क्लिक करें और "पेज सोर्स देखें" विकल्प पर क्लिक करें। पृष्ठ के HTML में आप एक विशेषता देख सकते हैं: "<div class =" content "itemprop =" softwareVersion "> 1.2 </ div>"। आपको html को पार्स करना होगा और इस ध्वज को मैन्युअल रूप से प्राप्त करना होगा।
— तरुण

2
getPackageManager().getPackageInfo(getPackageName(), 0).versionNameआप बस इस्तेमाल कर सकते हैं BuildConfig.VERSION_NAME:)
— एनोबॉन्ग

1
यह स्पष्ट रूप से एक उत्पन्न वर्गनाम है जिसे कभी भी बदला जा सकता है। आपको ऐसा नहीं करना चाहिए।
— रिचर्ड लिंडआउट

24

फायरबेस रिमोट कॉन्फिगरेशन अब के लिए एक संभव और विश्वसनीय समाधान हो सकता है, क्योंकि Google ने इसमें किसी भी एप को उजागर नहीं किया था।

Firebase Remote Config Docs की जाँच करें

चरण 1. फायरबेस प्रोजेक्ट बनाएं और अपने प्रोजेक्ट में google_play_service.json जोड़ें

2. "कुंजियाँ" की तरह "android_latest_version_code" और "android_latest_version_name" जैसे फायरबेस कंसोल में-> रिमोट कॉन्फिगर करें

3. एंड्रॉइड कोड

    public void initializeFirebase() {
        if (FirebaseApp.getApps(mContext).isEmpty()) {
            FirebaseApp.initializeApp(mContext, FirebaseOptions.fromResource(mContext));
        }
        final FirebaseRemoteConfig config = FirebaseRemoteConfig.getInstance();
        FirebaseRemoteConfigSettings configSettings = new FirebaseRemoteConfigSettings.Builder()
                                                              .setDeveloperModeEnabled(BuildConfig.DEBUG)
                                                              .build();
        config.setConfigSettings(configSettings);
}

वर्तमान संस्करण का नाम और कोड प्राप्त करें

int playStoreVersionCode = FirebaseRemoteConfig.getInstance().getString(
                "android_latest_version_code");
PackageInfo pInfo = this.getPackageManager().getPackageInfo(getPackageName(), 0);
int currentAppVersionCode = pInfo.versionCode; 
if(playStoreVersionCode>currentAppVersionCode){
//Show update popup or whatever best for you
}

4. और अपने वर्तमान प्रोडक्शन वर्जन के नाम और कोड के साथ "android_latest_version_code" और "android_latest_version_name" तक की तारीख वाले फायरबेस रखें।

फायरबेस रिमोट कॉन्फिगरेशन एंड्रायड और आईफोन दोनों पर काम करता है।


1
Firebase में पैरामीटर बनाने के लिए firebasetutorials.com/… देखें ।
— कूलमाइंड

मुझे लगता है, इस समाधान के कारण त्रुटि हो सकती है Caused by: com.android.tools.r8.utils.AbortException: Error: null, Cannot fit requested classes in a single dex file (# methods: 68703 > 65536):। इस मामले में आपको अपने आवेदन में मल्टीडेक्स जोड़ना चाहिए।
— कूलमाइंड

17

आप वर्तमान प्राप्त कर सकते हैं playstore संस्करण का उपयोग कर JSoupनीचे की तरह कुछ संशोधन के साथ:

@Override
protected String doInBackground(Void... voids) {

    String newVersion = null;
    try {
        newVersion = Jsoup.connect("https://play.google.com/store/apps/details?id=" + MainActivity.this.getPackageName() + "&hl=it")
                .timeout(30000)
                .userAgent("Mozilla/5.0 (Windows; U; WindowsNT 5.1; en-US; rv1.8.1.6) Gecko/20070725 Firefox/2.0.0.6")
                .referrer("http://www.google.com")
                .get()
                .select(".hAyfc .htlgb")
                .get(7)
                .ownText();
        return newVersion;
    } catch (Exception e) {
        return newVersion;
    }
}

@Override
protected void onPostExecute(String onlineVersion) {
    super.onPostExecute(onlineVersion);

    Log.d("update", "playstore version " + onlineVersion);
}

@ तरुण का जवाब अब काम नहीं कर रहा है।


यह काम कर रहा दोस्त है लेकिन क्या मैं इस पर हमेशा के लिए भरोसा कर सकता हूं या निकट भविष्य में बदल जाएगा ??
— अविनाश रॉय

1
यह इस पर भरोसा करने की अनुशंसा नहीं की जाती है क्योंकि यह आधिकारिक समाधान नहीं है।
— निकुंज

@ निकुंज मैं एक क्लास GetVersionCode बनाता हूं जो AsyncTask को बढ़ाता है और जब मैं उस कोड के अंदर अपना कोड लिखता हूं तो GetPackageName () त्रुटि दिखाता है। मैंने यह कोशिश की, GetVersionCode.this लेकिन कुछ भी नहीं काम करता है।
— आशीष

1
.Select ("। HAyfc .htlgb") का उपयोग करना। (7) बदलावों के खिलाफ मजबूत नहीं है। मैंने इसके बजाय सूचकांक 5 का उपयोग करते हुए एक और समाधान देखा। सही का चयन करने के लिए, मैं एक विस्तारित क्वेरी .select ("। HAyfc .BgcNfc: :OOnn (करंट वर्जन) + .htlgb.htlgb") का उपयोग करता हूं। पहले ()
— .text

8

Google Play वेबसाइट पर Google की ओर से हाल ही में किए गए परिवर्तनों के कारण @Tarun उत्तर पूरी तरह से काम कर रहा था।

बस ये बदलिए @ तरुण जवाब से ।।

class GetVersionCode extends AsyncTask<Void, String, String> {

    @Override

    protected String doInBackground(Void... voids) {

        String newVersion = null;

        try {
            Document document = Jsoup.connect("https://play.google.com/store/apps/details?id=" + MainActivity.this.getPackageName()  + "&hl=en")
                    .timeout(30000)
                    .userAgent("Mozilla/5.0 (Windows; U; WindowsNT 5.1; en-US; rv1.8.1.6) Gecko/20070725 Firefox/2.0.0.6")
                    .referrer("http://www.google.com")
                    .get();
            if (document != null) {
                Elements element = document.getElementsContainingOwnText("Current Version");
                for (Element ele : element) {
                    if (ele.siblingElements() != null) {
                        Elements sibElemets = ele.siblingElements();
                        for (Element sibElemet : sibElemets) {
                            newVersion = sibElemet.text();
                        }
                    }
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return newVersion;

    }


    @Override

    protected void onPostExecute(String onlineVersion) {

        super.onPostExecute(onlineVersion);

        if (onlineVersion != null && !onlineVersion.isEmpty()) {

            if (Float.valueOf(currentVersion) < Float.valueOf(onlineVersion)) {
                //show anything
            }

        }

        Log.d("update", "Current version " + currentVersion + "playstore version " + onlineVersion);

    }
}

और JSoup लाइब्रेरी जोड़ना न भूलें

dependencies {
compile 'org.jsoup:jsoup:1.8.3'}

और Oncreate () पर

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    String currentVersion;
    try {
        currentVersion = getPackageManager().getPackageInfo(getPackageName(), 0).versionName;
    } catch (PackageManager.NameNotFoundException e) {
        e.printStackTrace();
    }

    new GetVersionCode().execute();

}

यह बात है .. इस लिंक के लिए धन्यवाद


7

वहाँ AppUpdater पुस्तकालय है। कैसे शामिल करें:

  1. अपनी परियोजना build.gradle के लिए भंडार जोड़ें :
allprojects {
    repositories {
        jcenter()
        maven {
            url "https://jitpack.io"
        }
    }
}
  1. अपने मॉड्यूल build.gradle में लाइब्रेरी जोड़ें :
dependencies {
    compile 'com.github.javiersantos:AppUpdater:2.6.4'
}
  1. अपने ऐप के मेनिफेस्ट में INTERNET और ACCESS_NETWORK_STATE अनुमतियां जोड़ें:
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
  1. इसे अपनी गतिविधि में जोड़ें:
AppUpdater appUpdater = new AppUpdater(this); 
appUpdater.start();

किसी भी तरह काम नहीं। निम्नलिखित कोड का उपयोग करके, कृपया मुझे बताएं कि मैं क्या गलत कर रहा हूं।
— अनुराग श्रीवास्तव

नमस्ते, मुझे लगता है कि एक बग है। इस चर्चा की जांच करें github.com/javiersantos/AppUpdater/issues/132
— stenlytw

7

यहाँ छवि विवरण दर्ज करें

Google ने इन-ऐप अपडेट API पेश किया है

वर्तमान में एपीआई दो प्रवाह का समर्थन करता है:

  • "तत्काल" प्रवाह एक पूर्ण-स्क्रीन उपयोगकर्ता अनुभव है जो उपयोगकर्ता को आपके ऐप का उपयोग करने से पहले डाउनलोड से अपडेट करने के लिए मार्गदर्शन करता है।
  • "लचीला प्रवाह" उपयोगकर्ताओं को आपके ऐप का उपयोग करते समय अपडेट डाउनलोड करने की अनुमति देता है।

6

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

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

डिवाइस रेडी पर, अपना स्टोर URL सेट करें

        if (device.platform == 'iOS')
           storeURL = 'https://itunes.apple.com/lookup?bundleId=BUNDLEID';
        else
           storeURL = 'https://play.google.com/store/apps/details?id=BUNDLEID';

अद्यतन उपलब्ध पद्धति को जितनी बार चाहें उतनी बार चलाया जा सकता है। हर बार जब उपयोगकर्ता होम स्क्रीन पर नेविगेट करता है तो मेरा भाग जाता है।

function isUpdateAvailable() {
    if (device.platform == 'iOS') {
        $.ajax(storeURL, {
            type: "GET",
            cache: false,
            dataType: 'json'
        }).done(function (data) {
            isUpdateAvailable_iOS(data.results[0]);
        }).fail(function (jqXHR, textStatus, errorThrown) {
            commsErrorHandler(jqXHR, textStatus, false);
        });
    } else {
        $.ajax(storeURL, {
            type: "GET",
            cache: false
        }).done(function (data) {
            isUpdateAvailable_Android(data);
        }).fail(function (jqXHR, textStatus, errorThrown) {
            commsErrorHandler(jqXHR, textStatus, false);
        });
    }
}

iOS कॉलबैक: ऐप्पल के पास एक एपीआई है, इसलिए इसे प्राप्त करना बहुत आसान है

function isUpdateAvailable_iOS (data) {
    var storeVersion = data.version;
    var releaseNotes = data.releaseNotes;
    // Check store Version Against My App Version ('1.14.3' -> 1143)
    var _storeV = parseInt(storeVersion.replace(/\./g, ''));
    var _appV = parseInt(appVersion.substring(1).replace(/\./g, ''));
    $('#ft-main-menu-btn').off();
    if (_storeV > _appV) {
        // Update Available
        $('#ft-main-menu-btn').text('Update Available');
        $('#ft-main-menu-btn').click(function () {
            openStore();
        });

    } else {
        $('#ft-main-menu-btn').html('&nbsp;');
        // Release Notes
        settings.updateReleaseNotes('v' + storeVersion, releaseNotes);
    }
}

एंड्रॉइड कॉलबैक: PlayStore आपको परिमार्जन करना होगा, जैसा कि आप देख सकते हैं कि संस्करण को हड़पना अपेक्षाकृत आसान है और व्हाट्स न्यू मैं टेक्स्ट की जगह html ले लेता हूं क्योंकि इस तरह से मैं उनके फॉर्मेटिंग (नई लाइनें आदि) का उपयोग कर सकता हूं

function isUpdateAvailable_Android(data) {
    var html = $(data);
    var storeVersion = html.find('div[itemprop=softwareVersion]').text().trim();
    var releaseNotes = html.find('.whatsnew')[0].innerHTML;
    // Check store Version Against My App Version ('1.14.3' -> 1143)
    var _storeV = parseInt(storeVersion.replace(/\./g, ''));
    var _appV = parseInt(appVersion.substring(1).replace(/\./g, ''));
    $('#ft-main-menu-btn').off();
    if (_storeV > _appV) {
        // Update Available
        $('#ft-main-menu-btn').text('Update Available');
        $('#ft-main-menu-btn').click(function () {
            openStore();
        });

    } else {
        $('#ft-main-menu-btn').html('&nbsp;');
        // Release Notes
        settings.updateReleaseNotes('v' + storeVersion, releaseNotes);
    }
}

खुले स्टोर तर्क सीधे आगे है, लेकिन पूर्णता के लिए

function openStore() {
    var url = 'https://itunes.apple.com/us/app/appname/idUniqueID';
    if (device.platform != 'iOS')
       url = 'https://play.google.com/store/apps/details?id=appid'
   window.open(url, '_system')
}

सुनिश्चित करें कि प्ले स्टोर और ऐप स्टोर को सफेद कर दिया गया है:

  <access origin="https://itunes.apple.com"/>
  <access origin="https://play.google.com"/>

मुझे त्रुटि मिल रही है "त्रुटि अजाक्स प्रतिक्रिया पार्स करने में त्रुटि: SyntaxError: अप्रत्याशित टोकन <"। जब अजाक्स मिलता है। क्या आप इस पर कुछ प्रकाश डाल सकते हैं, क्या गलत हुआ?
— कपिल कोण

ios या Android? क्या आपका url सही है? आपको ब्राउज़र पर सही पृष्ठ पर ले जाता है?
— tyler_mitchell

5

फायरबेस रिमोट कॉन्फिगरेशन बेहतर है।

  • एप्लिकेशन को एक नया बिल्ड प्रकाशित करने की आवश्यकता के बिना हमारे अनुप्रयोगों को जल्दी और आसानी से अपडेट करें

एंड्रॉइड पर रिमोट कॉन्फ़िगरेशन लागू करना

दूरस्थ कॉन्फ़िगरेशन निर्भरता जोड़ना

compile 'com.google.firebase:firebase-config:9.6.0'

एक बार हो जाने के बाद, हम अपने आवेदन में जहां आवश्यकता हो, वहां FirebaseRemoteConfig उदाहरण तक पहुँच सकते हैं:

FirebaseRemoteConfig firebaseRemoteConfig = FirebaseRemoteConfig.getInstance();

दूरस्थ कॉन्फ़िगरेशन मानों को पुनः प्राप्त करना

boolean someBoolean = firebaseRemoteConfig.getBoolean("some_boolean");
byte[] someArray = firebaseRemoteConfig.getByteArray("some_array");
double someDouble = firebaseRemoteConfig.getDouble("some_double");
long someLong = firebaseRemoteConfig.getLong("some_long");
String appVersion = firebaseRemoteConfig.getString("appVersion");

सर्वर-साइड मान प्राप्त करें

firebaseRemoteConfig.fetch(cacheExpiration)
            .addOnCompleteListener(new OnCompleteListener<Void>() {
                @Override
                public void onComplete(@NonNull Task<Void> task) {
                    if (task.isSuccessful()) {
                        mFirebaseRemoteConfig.activateFetched();
                        // We got our config, let's do something with it!
                        if(appVersion < CurrentVersion){
                           //show update dialog
                        }
                    } else {
                        // Looks like there was a problem getting the config...
                    }
                }
            });

अब एक बार playstore पर नया संस्करण अपलोड करने के बाद, हमें फायरबेस के अंदर संस्करण संख्या को अपडेट करना होगा। अब अगर यह नया संस्करण है तो अपडेट संवाद प्रदर्शित होगा


5

अंदर OnCreate विधि कोड के नीचे लिखें ..

VersionChecker versionChecker = new VersionChecker();
    try {
        latestVersion = versionChecker.execute().get();
        Toast.makeText(getBaseContext(), latestVersion , Toast.LENGTH_SHORT).show();

    } catch (InterruptedException | ExecutionException e) {
        e.printStackTrace();
    }

यह आपको एप्लिकेशन का स्टोर संस्करण देता है।

फिर आपको नीचे दिए गए एप्लिकेशन संस्करण की जांच करनी होगी

PackageManager manager = getPackageManager();
    PackageInfo info = null;
    try {
        info = manager.getPackageInfo(getPackageName(), 0);
    } catch (PackageManager.NameNotFoundException e) {
        e.printStackTrace();
    }
    assert info != null;
    version = info.versionName;

उसके बाद आप स्टोर संस्करण के साथ इसकी तुलना कर सकते हैं और अपनी खुद की अपडेट स्क्रीन सेटअप कर सकते हैं

if(version.equals(latestVersion)){
        Toast.makeText(getBaseContext(), "No Update" , Toast.LENGTH_SHORT).show();
    }else {
        Toast.makeText(getBaseContext(), "Update" , Toast.LENGTH_SHORT).show();

    }

और नीचे के रूप में VersionChecker.class जोड़ें

public class VersionChecker extends AsyncTask<String, String, String> {

    private String newVersion;

    @Override
    protected String doInBackground(String... params) {

        try {
            newVersion = Jsoup.connect("https://play.google.com/store/apps/details?id=" + "package name" + "&hl=en")
                    .timeout(30000)
                    .userAgent("Mozilla/5.0 (Windows; U; WindowsNT 5.1; en-US; rv1.8.1.6) Gecko/20070725 Firefox/2.0.0.6")
                    .referrer("http://www.google.com")
                    .get()
                    .select(".hAyfc .htlgb")
                    .get(7)
                    .ownText();
        } catch (IOException e) {
            e.printStackTrace();
        }

        return newVersion;
    }
}

3

एक सर्वर सेट करें जो एक HTTP url को उजागर करता है जो नवीनतम संस्करण की रिपोर्ट करता है, फिर उस URL को कॉल करने के लिए एक अलार्म प्रबंधक का उपयोग करें और देखें कि क्या डिवाइस पर संस्करण नवीनतम संस्करण के समान है। यदि यह एक संदेश या सूचना को पॉप अप नहीं करता है और उन्हें अपग्रेड करने के लिए बाजार में भेजता है।

कुछ कोड उदाहरण हैं: उपयोगकर्ताओं को ऐप के अंदर से नवीनतम ऐप संस्करण की जांच करने की अनुमति कैसे दें?


3

JSoup का उपयोग करने के अलावा, हम वैकल्पिक रूप से playStore से ऐप संस्करण प्राप्त करने के लिए पैटर्न मिलान कर सकते हैं।

Google playstore से नवीनतम पैटर्न को मैच करने के लिए, <div class="BgcNfc">Current Version</div><span class="htlgb"><div><span class="htlgb">X.X.X</span></div> हमें पहले उपरोक्त नोड अनुक्रम से मेल खाना होगा और फिर ऊपर के क्रम से संस्करण मान प्राप्त होगा। नीचे उसी के लिए कोड स्निपेट दिया गया है:

    private String getAppVersion(String patternString, String inputString) {
        try{
            //Create a pattern
            Pattern pattern = Pattern.compile(patternString);
            if (null == pattern) {
                return null;
            }

            //Match the pattern string in provided string
            Matcher matcher = pattern.matcher(inputString);
            if (null != matcher && matcher.find()) {
                return matcher.group(1);
            }

        }catch (PatternSyntaxException ex) {

            ex.printStackTrace();
        }

        return null;
    }


    private String getPlayStoreAppVersion(String appUrlString) {
        final String currentVersion_PatternSeq = "<div[^>]*?>Current\\sVersion</div><span[^>]*?>(.*?)><div[^>]*?>(.*?)><span[^>]*?>(.*?)</span>";
        final String appVersion_PatternSeq = "htlgb\">([^<]*)</s";
        String playStoreAppVersion = null;

        BufferedReader inReader = null;
        URLConnection uc = null;
        StringBuilder urlData = new StringBuilder();

        final URL url = new URL(appUrlString);
        uc = url.openConnection();
        if(uc == null) {
           return null;
        }
        uc.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows; U; WindowsNT 5.1; en-US; rv1.8.1.6) Gecko/20070725 Firefox/2.0.0.6");
        inReader = new BufferedReader(new InputStreamReader(uc.getInputStream()));
        if (null != inReader) {
            String str = "";
            while ((str = inReader.readLine()) != null) {
                           urlData.append(str);
            }
        }

        // Get the current version pattern sequence 
        String versionString = getAppVersion (currentVersion_PatternSeq, urlData.toString());
        if(null == versionString){ 
            return null;
        }else{
            // get version from "htlgb">X.X.X</span>
            playStoreAppVersion = getAppVersion (appVersion_PatternSeq, versionString);
        }

        return playStoreAppVersion;
    }

मुझे इसके माध्यम से हल हो गया, क्योंकि यह नवीनतम Google playstore परिवर्तनों के लिए भी काम करता है। उम्मीद है की वो मदद करदे।


3
private void CheckUPdate() {
    VersionChecker versionChecker = new VersionChecker();
    try
    {   String appVersionName = BuildConfig.VERSION_NAME;
        String mLatestVersionName = versionChecker.execute().get();
        if(!appVersionName.equals(mLatestVersionName)){
            AlertDialog.Builder alertDialog = new AlertDialog.Builder(Activity.this);
            alertDialog.setTitle("Please update your app");
            alertDialog.setMessage("This app version is no longer supported. Please update your app from the Play Store.");
            alertDialog.setPositiveButton("UPDATE NOW", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {
                    final String appPackageName = getPackageName();
                    try {
                        startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + appPackageName)));
                    } catch (android.content.ActivityNotFoundException anfe) {
                        startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=" + appPackageName)));
                    }
                }
            });
            alertDialog.show();
        }

    } catch (InterruptedException | ExecutionException e) {
        e.printStackTrace();
    }
}

@SuppressLint("StaticFieldLeak")
public class VersionChecker extends AsyncTask<String, String, String> {
    private String newVersion;
    @Override
    protected String doInBackground(String... params) {

        try {
            newVersion = Jsoup.connect("https://play.google.com/store/apps/details?id="+getPackageName())
                    .timeout(30000)
                    .userAgent("Mozilla/5.0 (Windows; U; WindowsNT 5.1; en-US; rv1.8.1.6) Gecko/20070725 Firefox/2.0.0.6")
                    .referrer("http://www.google.com")
                    .get()
                    .select(".hAyfc .htlgb")
                    .get(7)
                    .ownText();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return newVersion;
    }
}

यह कोड कैसे और क्या काम करेगा, इसके बारे में कुछ जानकारी प्रदान करें
— DarkSuniuM

2

इसके लिए कोई आधिकारिक GooglePlay API नहीं है।

लेकिन ऐप वर्जन डेटा पाने के लिए आप इस अनऑफिशियल लाइब्रेरी का इस्तेमाल कर सकते हैं ।

और, यदि उपरोक्त आपके लिए काम नहीं करता है, तो आप हमेशा अपने ऐप के पेज से http कनेक्ट कर सकते हैं (जैसे https://play.google.com/store/apps/details?id=com.shots.android&hl=en ) और "वर्तमान संस्करण" फ़ील्ड को पार्स करें।



2

आप Jsoup का उपयोग करके निम्नलिखित कोड आज़मा सकते हैं

String latestVersion = doc.getElementsContainingOwnText("Current Version").parents().first().getAllElements().last().text();

2

यहाँ छवि विवरण दर्ज करेंGoogle ने इन-ऐप अपडेट एपी पेश किया। इसका उपयोग करके हम उपयोगकर्ता को एप्लिकेशन के अंदर ऐप अपडेट करने के लिए कह सकते हैं। यदि उपयोगकर्ता स्वीकार करता है तो हम सीधे नवीनतम ऐप डाउनलोड कर सकते हैं और प्लेस्टोर पर रीडायरेक्ट के बिना इंस्टॉल कर सकते हैं। अधिक जानकारी के लिए कृपया नीचे दिए गए लिंक को देखें

link1 link2


मुझे आपके द्वारा बनाया गया GIF पसंद है :)
— हंटर

1

अब केवल उस विधि की पुष्टि की जाती है:

newVersion = Jsoup.connect("https://play.google.com/store/apps/details?id=" + AcMainPage.this.getPackageName() + "&hl=it")
                        .timeout(30000)
                        .userAgent("Mozilla/5.0 (Windows; U; WindowsNT 5.1; en-US; rv1.8.1.6) Gecko/20070725 Firefox/2.0.0.6")
                        .referrer("http://www.google.com")
                        .get()
                        .select(".hAyfc .htlgb")
                        .get(5)
                        .ownText();

1

Google ने इन-ऐप अपडेट फीचर पेश किया, ( https://developer.android.com/guide/app-bundle/in-app-updates ) यह लॉलीपॉप + पर काम करता है और आपको उपयोगकर्ता को एक अच्छा के साथ अपडेट के लिए पूछने की क्षमता देता है संवाद (फ्लेक्सिबल) या अनिवार्य पूर्ण-स्क्रीन संदेश (IMMEDIATE) के साथ।

यहाँ कैसे लचीला अद्यतन की तरह दिखेगा: यहाँ छवि विवरण दर्ज करें

और यहां इमीडिएट अपडेट फ्लो है: यहाँ छवि विवरण दर्ज करें

आप मेरे जवाब की जाँच यहाँ कर सकते हैं https://stackoverflow.com/a/56808529/5502121 दोनों लचीले और तत्काल अद्यतन प्रवाह को लागू करने का पूरा नमूना कोड प्राप्त करने के लिए । आशा करता हूँ की ये काम करेगा!

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.