কোনও নতুন সংস্করণ উপলভ্য হলে কোনও অ্যান্ড্রয়েড অ্যাপের জোর করে আপডেট করুন


104

গুগল প্লে স্টোরে আমার একটি অ্যাপ রয়েছে। যখন কোনও আপডেট সংস্করণ পাওয়া যায়, তখন পুরানো সংস্করণটি অকেজো হয়ে যায় - অর্থাৎ ব্যবহারকারীরা অ্যাপটি আপডেট না করে, তারা অ্যাপটিতে প্রবেশ করে না। নতুন সংস্করণ উপলব্ধ হয়ে উঠলে আমি কীভাবে ব্যবহারকারীদের অ্যাপ আপডেট করতে বাধ্য করতে পারি?


4
এই ওপেন সোর্স গিটহাব প্রকল্প (এমএএএচএনড্রয়েডউপডেটার) সম্পূর্ণরূপে এই কার্যকারিতা সরবরাহ করে। খুব সহজ। github.com/hummatli/MAHndroidUpdater
সাত্তার হুমাতলী

উত্তর:


102

আমি এখানে অন্য উত্তরে স্কট হেল্মির বক্তব্যটির সাথে একমত। তবে কিছু চরম পরিস্থিতিতে (সুরক্ষা সমস্যাগুলি, এপিআই ব্রেকিং পরিবর্তনগুলি ...) যেখানে আপনার অ্যাপ্লিকেশনটি ব্যবহার চালিয়ে যেতে ব্যবহারকারীদের আপডেট করার প্রয়োজন রয়েছে, আপনি একটি সহজ সংস্করণ API সরবরাহ করতে পারেন। এপিআই দেখতে এই রকম হবে:

সংস্করণচেক এপিআই:

অনুরোধ পরামিতি:

  • int appVersion

প্রতিক্রিয়া

  1. boolean forceUpgrade
  2. boolean recommendUpgrade

যখন আপনার অ্যাপ্লিকেশন শুরু হবে, আপনি এই অ্যাপ্লিকেশনটিকে কল করতে পারেন যা বর্তমান অ্যাপ্লিকেশন সংস্করণে যায় এবং সংস্করণকারী API কলটির প্রতিক্রিয়া পরীক্ষা করতে পারে।

যদি forceUpgradeহয় true, হয় থেকে বিকল্প সহ একটি পপ-আপ ডায়ালগ দেন ব্যবহারকারী অ্যাপ্লিকেশন প্রস্থান যাক, অথবা অ্যাপ্লিকেশন আপগ্রেড করার Google Play দোকানে যান।

অন্যথায় যদি recommendUpgradeহয় true, আপডেট করার জন্য বা অ্যাপ্লিকেশান ব্যবহার করা চালিয়ে যেতে বিকল্প সহ পপ-আপ ডায়ালগ প্রদর্শন করুন।

এমনকি এই জোর করে আপগ্রেড ক্ষমতা স্থানে থাকা সত্ত্বেও, আপনার পুরানো সংস্করণগুলি সমর্থন করা চালিয়ে যাওয়া উচিত, একেবারে প্রয়োজন না হলে needed


অ্যাপটি শুরু হওয়ার পরে এবং আপগ্রেডটি সত্য হওয়ার সময় আপনি কী পপআপ প্রদর্শন করবেন? (ইউএক্স দৃষ্টিকোণ থেকে) বা একবার পপআপ দেখান এবং ব্যবহারকারী আপগ্রেড করতে অস্বীকার করে তবে আবার দেখাবেন না।
আনিশ

8
প্রস্তাবিত আপগ্রেডের জন্য, আমি মনে করি আপনি যদি ব্যবহারকারী অস্বীকার করেন তবে আপনাকে আবার দেখাবেন না। আপনি এটি "প্রতি এন বার একবার ব্যবহারকারী অ্যাপটি খোলার পরে" প্রদর্শন করতে পারেন। আপনি নিজেই এন মানটি স্থির করতে পারেন এবং এটি বাস্তবায়ন করতে পারেন।
মাইকেল

4
আরও ভাল সমাধান ইমো হ'ল অ্যাপ্লিকেশনটির সংস্করণটি সমস্ত এপিআই কলগুলির শিরোনামে পদ্ধতিগতভাবে পাস করা এবং তারপরে সংস্করণটি অপ্রচলিত রয়েছে তা সনাক্ত করে যদি এপিআই একটি নির্দিষ্ট স্থিতির কোড ফেরত দেয়। এবং তারপরে এটি অ্যাপ্লিকেশনটির অভ্যন্তরে পরিচালনা করুন। এই চেকটির জন্য আরও একটি উত্সর্গীকৃত এপিআই কল করা এবং অ্যাপ / পরিষেবাটির ভিতরে এই API কলটি কখন / কোথায় করা উচিত তা নির্ধারণের চেয়ে এটি ভাল।
রাফেল সি

@ রাফেলসি এটি আপনার সার্ভারের পাশ বাস্তবায়নের উপর নির্ভর করে। এমন কোনও ফিল্টার যুক্ত করাও নিখুঁত নয় যা কিছু পরিস্থিতিতে সমস্ত API এর সংস্করণ পরীক্ষা করে।
সেপ্টেম্বর GH

4
@SepGH জিনিষ থেকে পরিবর্তিত হতে এবং Android এখন একটি API যা আপনাকে আপগ্রেড এবং তাকে যদি তিনি একটি সর্বনিম্ন সংস্করণে আপগ্রেড না অ্যাপ ব্যবহার অব্যাহত থেকে ব্লক করতে ব্যবহারকারী বলপূর্বক ব্যবহার করতে পারেন প্রস্তাব করে: developer.android.com/guide/ অ্যাপ্লিকেশন-বান্ডেল / অ্যাপ-আপডেটগুলি
রাফেল সি

56

এটি ব্যবহার করে দেখুন: প্রথমে আপনাকে প্লেস্টোর লিঙ্কে একটি অনুরোধ কল করতে হবে, সেখান থেকে বর্তমান সংস্করণটি আনতে হবে এবং তারপরে এটি আপনার বর্তমান সংস্করণের সাথে তুলনা করুন।

String currentVersion, latestVersion;
Dialog dialog;
private void getCurrentVersion(){
 PackageManager pm = this.getPackageManager();
        PackageInfo pInfo = null;

        try {
            pInfo =  pm.getPackageInfo(this.getPackageName(),0);

        } catch (PackageManager.NameNotFoundException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        currentVersion = pInfo.versionName;

   new GetLatestVersion().execute();

}

private class GetLatestVersion extends AsyncTask<String, String, JSONObject> {

        private ProgressDialog progressDialog;

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
        }

        @Override
        protected JSONObject doInBackground(String... params) {
            try {
//It retrieves the latest version by scraping the content of current version from play store at runtime
                Document doc = Jsoup.connect(urlOfAppFromPlayStore).get();
                latestVersion = doc.getElementsByClass("htlgb").get(6).text();

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

            }

            return new JSONObject();
        }

        @Override
        protected void onPostExecute(JSONObject jsonObject) {
            if(latestVersion!=null) {
                if (!currentVersion.equalsIgnoreCase(latestVersion)){
                   if(!isFinishing()){ //This would help to prevent Error : BinderProxy@45d459c0 is not valid; is your activity running? error
                    showUpdateDialog();
                    }
                }
            }
            else
                background.start();
            super.onPostExecute(jsonObject);
        }
    }

private void showUpdateDialog(){
        final AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("A New Update is Available");
        builder.setPositiveButton("Update", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse
                        ("market://details?id=yourAppPackageName")));
                dialog.dismiss();
            }
        });

        builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                background.start();
            }
        });

        builder.setCancelable(false);
        dialog = builder.show();
    }

4
আমি মনে করি এটির জন্য বাহ্যিক গ্রন্থাগার জেএসপ ব্যবহার করতে হবে?
আব্রাহাম ফিলিপ

4
হ্যাঁ, তবে এটি এইচটিএমএল ডিভিজ পৃষ্ঠা পাওয়ার জন্য। আমি বলতে চাইছিলাম, এই কার্যকারিতা অর্জনের জন্য আপনার কোনও তৃতীয় পক্ষের গ্রন্থাগার ব্যবহারের প্রয়োজন নাও হতে পারে, আপনি যদি এইচটিএমএল উপাদানটি JSoup ছাড়াই স্ক্র্যাপ করতে পারেন তবে এটি কার্যকর হবে
আশুকিংশর্ম

4
যদি তারা পুনরায় মান পরিবর্তন করে ??
অসোক বাজ

4
যদি তারা আইটেমপ্রপ মান পরিবর্তন করে, তবে এটি আমার অ্যাপ্লিকেশনগুলিকেও প্রভাবিত করবে, আমি তাৎক্ষণিকভাবে সমর্থন করার জন্য আমার উত্তরটি সম্পাদনা করব, তাই ততক্ষণ কোনও উদ্বেগ নেই :)
আশুকিংশর্মা

দুর্দান্ত সেটসনস্যাবল (মিথ্যা)
কাই ওয়াং

48

নতুন সংস্করণ প্রকাশের সাথে সাথেই আপনার কোনও পুরানো সংস্করণ সমর্থন করা উচিত নয়। এর ফলে এক ভয়ানক ব্যবহারকারীর অভিজ্ঞতা আসবে। সঙ্গত কারণেই আমি এমন কোনও সফ্টওয়্যার বিক্রেতার অস্তিত্ব সম্পর্কে জানি না যা এটি করে।

যদি ব্যবহারকারী সেই সময়ে আপডেট করতে না পারে বা না চায় তবে কী হবে? তারা কেবল আপনার অ্যাপ্লিকেশনটি ব্যবহার করতে পারে না, যা খারাপ।

গুগল এর মতো সংস্করণ ট্র্যাকিংয়ের জন্য কোনও বিকল্প সরবরাহ করে না যাতে আপনাকে নিজের রোল করতে হবে। আপনার অ্যাপ্লিকেশন যাচাই করতে পারে বর্তমান লাইভ সংস্করণটি ফিরিয়ে দেওয়ার জন্য একটি সাধারণ ওয়েব পরিষেবা যথেষ্ট। তারপরে আপনি সংস্করণটি আপডেট করতে পারবেন এবং অ্যাপটি জানবে যে এটি পুরানো। আমি কেবল এটি ব্যবহার করার পরামর্শ দিচ্ছি আপনার ব্যবহারকারীদের গুগল প্লে এর উপর নির্ভর করে আরও দ্রুত একটি আপডেট রয়েছে তা জানাতে। এটি অ্যাপ্লিকেশনটিকে কাজ করতে বাধা দেওয়ার জন্য ব্যবহার করা উচিত নয়, কেবলমাত্র ব্যবহারকারীকে আপডেট করার অনুরোধ জানাতে।


4
@ আশরাফুল যদি এটি বা কোনও উত্তর আপনার প্রশ্নের সমাধান করে থাকে তবে দয়া করে চেক-মার্কে ক্লিক করে এটি গ্রহণ করার বিষয়টি বিবেচনা করুন। এটি বৃহত্তর সম্প্রদায়কে নির্দেশ করে যে আপনি একটি সমাধান পেয়েছেন এবং উত্তরদাতা এবং নিজেকে উভয়কেই কিছু খ্যাতি দিয়েছেন। এটি করার কোনও বাধ্যবাধকতা নেই।
সুফিয়ান

আপনি কতটা সফটওয়্যার বিক্রেতাকে অস্তিত্বে জানেন তার উত্তরটি বিষয়ভিত্তিক। আপনি কি পরিমাণ দিতে পারেন?
লু মর্দা 16'15

4
অ্যাপ স্টোর বা প্লে স্টোর থেকে বর্তমান অ্যাপ সংস্করণ পাওয়া সম্ভব? বা আমার সার্ভারে আমার সর্বশেষ অ্যাপ্লিকেশন সংস্করণ রাখা দরকার কিনা? কারণ এই মুহূর্তে আমার সার্ভারে সর্বশেষ অ্যাপ্লিকেশন সংস্করণটি ফিরিয়ে আনার জন্য সার্ভিস কল রয়েছে তবে অ্যাপটি প্রকাশের সময় প্রতিবারই সার্ভার আপডেট করার দরকার হয়। সুতরাং কি স্বতন্ত্র স্টোর থেকে বর্তমান সংস্করণ নম্বর পাওয়া সম্ভব?
সুভা

4
সুপারসেল কেবল তাদের গেমগুলির সর্বশেষতম সংস্করণ সমর্থন করে। তারা গুগল প্লেতে একটি নতুন সংস্করণ ঠেলে দেওয়ার পরে, যে কোনও প্রবীণ ক্লায়েন্ট সংযোগের চেষ্টা করছে সার্ভারের কাছ থেকে "আপডেটের প্রয়োজন" প্রতিক্রিয়া পাবে এবং সংযোগটি বন্ধ দেখতে পাবে। তারা প্রতি বছর একাধিকবার এটি করছে। সুতরাং যদি না আপনি কোনও "গেম সংস্থাকে" "সফ্টওয়্যার বিক্রেতা" হিসাবে গণনা করতে চান, তবে এখন আপনি একজনকে জানেন :) তারা এখনও প্রতিদিন কয়েক মিলিয়ন ডলার উপার্জন করছে তা বিবেচনা করে, দৃশ্যত এই ভয়ানক ব্যবহারকারীর অভিজ্ঞতা কোনও শো স্টপার নয় is ।
আরজান

@ সুভা হ্যাঁ, এটি সম্ভব। তবে এর জন্য কোনও আনুষ্ঠানিক এপিআই নেই, সুতরাং আপনাকে ওয়েব পৃষ্ঠাগুলি স্ক্র্যাপ করতে হবে। যার অর্থ হ'ল ওয়েব পৃষ্ঠায় পরিবর্তন হলে এটি ভেঙে যেতে পারে। আমি এটি একটি তৃতীয় পক্ষের অ্যাপ্লিকেশনটিতে করেছি যা আমি উত্তর হিসাবে বরং সহজ কোডটি লিখেছি এবং পোস্ট করেছি । বর্তমানে কোডটি প্লে এবং আইটিউনস উভয় পৃষ্ঠার জন্যই কাজ করবে। কোনও উত্পাদনের পরিবেশে, গুগল বা অ্যাপল পৃষ্ঠাগুলির বিন্যাসের উপর নির্ভর না করে সার্ভারের সর্বশেষ অ্যাপ্লিকেশন সংস্করণটি স্বয়ংক্রিয়ভাবে আপডেট করার সমাধানের সন্ধান করা ভাল?
আরজান

28

গুগল দল থেকে সমাধান

অ্যান্ড্রয়েড 5.0 থেকে শুরু করে যা নতুন গুগল প্লে ইন অ্যাপ আপডেট সিস্টেমের মাধ্যমে সহজেই অর্জনযোগ্য। প্রয়োজনীয়তাগুলি হ'ল 1.5.0+ সংস্করণটির প্লে কোর লাইব্রেরি থাকতে হবে এবং অ্যাপ্লিকেশনগুলির পরিবর্তে অ্যাপ্লিকেশন বান্ডিলস আইডস্ট্রিবিউশন ব্যবহার করতে হবে।

গ্রন্থাগারটি আপনাকে আপডেট সম্পর্কে ব্যবহারকারীদের অবহিত করার জন্য 2 টি বিভিন্ন উপায় সরবরাহ করে:

  1. নমনীয়, যখন ব্যবহারকারীরা অ্যাপটিকে পটভূমিতে আপডেট করার সময় ব্যবহার করা চালিয়ে যেতে পারে।

  2. তাত্ক্ষণিক - স্ক্রিনটি ব্লক করে যা কোনও ব্যবহারকারীকে আপডেট না করা পর্যন্ত অ্যাপ্লিকেশনটিতে প্রবেশ করতে দেয় না।

এটি বাস্তবায়নের জন্য পরবর্তী পদক্ষেপ রয়েছে:

  1. আপডেট উপলব্ধতার জন্য পরীক্ষা করুন
  2. একটি আপডেট শুরু করুন
  3. আপডেটের স্থিতির জন্য একটি কলব্যাক পান
  4. আপডেটটি হ্যান্ডেল করুন

এই সমস্ত পদক্ষেপের বাস্তবায়নগুলি সরকারী সাইটে বিশদে বর্ণিত হয়েছে: https://developer.android.com/guide/app-bundle/in-app-updates


16

স্কট এবং মাইকেল এর উত্তর সঠিক। এমন কোনও পরিষেবা হোস্ট করুন যা আপনাকে সমর্থন করে এমন একটি ন্যূনতম সংস্করণ নম্বর সরবরাহ করে যা ইনস্টল করা সংস্করণটির সাথে তুলনা করে। আপনার আশা করা যায় যে এটি কখনই ব্যবহার করার দরকার নেই, তবে এটির জীবন রক্ষাকারী কিছু সংস্করণ উপস্থিত থাকলে অবশ্যই কিছু মারাত্মক ত্রুটির কারণে আপনাকে অবশ্যই হত্যা করতে হবে।

আমি কেবল পরবর্তীটি করার জন্য কোড যুক্ত করতে চেয়েছিলাম। এটির পরে আপনি কীভাবে গুগল প্লে ইন্টেন্ট চালু করেন এবং ব্যবহারকারীকে তাদের আপগ্রেড করার অনুরোধ করার পরে স্টোরটিতে আপনার নতুন সংস্করণে নিয়ে যান।

public class UpgradeActivity extends Activity {
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_upgrade);
        final String appName = "com.appname";
        Button button = (Button) findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                    startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id="+appName)));

            }
        });
    }
}

আপনার যদি প্রতিটি রিলিজের জন্য আপগ্রেড করতে হয় তবে আপনার নকশাকে পুনরায় বিবেচনা করা উচিত।


15

গুগল ইন-অ্যাপ আপডেটগুলি লাইব চালু করেছে, ( https://developer.android.com/guide/app-bundle/in-app-updates ) এটি ললিপপ + এ কাজ করে এবং আপনাকে ব্যবহারকারীকে একটি সুন্দর আপডেটের জন্য জিজ্ঞাসা করার ক্ষমতা দেয় কথোপকথন (FLEXIBLE) বা বাধ্যতামূলক পূর্ণ-স্ক্রিন বার্তা (তাত্ক্ষণিক) সহ।

আপনার পরবর্তীটি বাস্তবায়ন করা দরকার। এটি দেখতে কেমন হবে তা এখানে: এখানে চিত্র বর্ণনা লিখুন

আমি এই উত্তরে সমস্ত কোডটি কভার করেছি: https://stackoverflow.com/a/56808529/5502121


4
এটাই সেরা উত্তর!
ফাল্দিভিয়া

এই বৈশিষ্ট্যটি আসলে প্লে ক্যাশে আপ টু ডেটের উপর নির্ভর করে যখন ব্যবহারকারী আপনার অ্যাপ্লিকেশনটি চালু করে অর্থ্যাৎ যদি ক্যাশে থাকা আপনার অ্যাপ্লিকেশনটির সংস্করণ নম্বরটি প্লেস্টোরে আপনার সর্বশেষ মোতায়েনের সংস্করণ সংখ্যার মতো না হয় তবে এটি ব্যবহারকারীকে প্রম্পট করবে না ..
kiran01bm

7

সরকারীভাবে গুগল এর জন্য একটি অ্যান্ড্রয়েড এপিআই সরবরাহ করে।

এপিআই বর্তমানে কয়েকটি মুষ্টিমেয় অংশীদারদের সাথে পরীক্ষা করা হচ্ছে, এবং শীঘ্রই সমস্ত বিকাশকারীদের জন্য উপলব্ধ হবে।

আপডেট এপিআই এখন উপলভ্য - https://developer.android.com/guide/app-bundle/in-app-updates



4
এই এপিআই কি এখন পাওয়া যায়?
ইয়ায়ায়া

আমি এটি গুগল করেছি এবং এই বিকাশকারীকে পেয়েছি and Android.com/guide/app-bundle/in-app-updates
Chulo

এই বৈশিষ্ট্যটি আসলে প্লে ক্যাশে আপ টু ডেটের উপর নির্ভর করে যখন ব্যবহারকারী আপনার অ্যাপ্লিকেশনটি চালু করে অর্থ্যাৎ যদি ক্যাশে থাকা আপনার অ্যাপ্লিকেশনটির সংস্করণ নম্বরটি প্লেস্টোরে আপনার সর্বশেষ মোতায়েনের সংস্করণ সংখ্যার মতো না হয় তবে এটি ব্যবহারকারীকে প্রম্পট করবে না ..
কিরান01 বিএম

6

আমি এটির জন্য ফায়ারবেসের রিমোট কনফিগারেশন কার্যকারিতা পরীক্ষা করার জন্য সুপারিশ করছি।

আমি "পঙ্গু অ্যান্ড্রয়েড সংস্করণ" এর মতো দেখতে একটি শর্ত সহ এটি একটি পরামিতি - app_version_en सक्षम ব্যবহার করে এটি প্রয়োগ করেছি:

applies if App ID == com.example.myapp and App version regular expression ^(5.6.1|5.4.2) 

প্যারামিটারের জন্য ডিফল্ট "সত্য", তবে অক্ষম অ্যান্ড্রয়েড সংস্করণগুলির মান ভুয়া থাকে। অক্ষম অ্যানড্রইড ভার্সনগুলির জন্য আমার রেজেসে আপনি |{version name}সেই বন্ধনীগুলির মধ্যে অন্যটির সাথে আরও অক্ষম সংস্করণ যুক্ত করতে পারেন ।

তারপরে আমি কেবল কনফিগারেশনটি বলে যে সংস্করণটি সক্ষম করা আছে কিনা তা যাচাই করে দেখি - আমার একটি ক্রিয়াকলাপ রয়েছে যা আমি চালু করি যা ব্যবহারকারীকে আপগ্রেড করতে বাধ্য করে। আমি কেবলমাত্র দুটি স্থানে যাচাই করেছিলাম বাহ্যিকভাবে অ্যাপ্লিকেশন চালু করা যেতে পারে (আমার ডিফল্ট লঞ্চার ক্রিয়াকলাপ এবং একটি উদ্দেশ্য-হ্যান্ডলিং ক্রিয়াকলাপ)। যেহেতু রিমোট কনফিগারেশন ক্যাশে ভিত্তিতে কাজ করে, ক্যাশেটি অবৈধ করার জন্য প্রয়োজনীয় সময়টি না পারলে এটি তাত্ক্ষণিকভাবে অ্যাপ্লিকেশনটির "অক্ষম" সংস্করণগুলি ক্যাপচার করবে না, তবে আপনি যদি যাচ্ছেন তবে এটি সর্বাধিক 12 ঘন্টা তাদের প্রস্তাবিত ক্যাশে সমাপ্তির মান।


এটি একটি খুব ভাল বিকল্প। "অক্ষম" সংস্করণগুলির একটি উপসেট নির্দিষ্ট করে, আপনি দ্রুত নিজেকে রক্ষা করতে পারবেন, কোনও অ্যাপ্লিকেশনটির সুরক্ষার সমস্যা বা বড় পারফরম্যান্স সমস্যা থাকতে পারে। এটি আপনাকে প্রতিটি সংস্করণ সমর্থন করা চালিয়ে যাওয়ার অনুমতি দেয় তবে যখন কোনও প্রয়োজন দেখা দেয় তখন নির্দিষ্ট সংস্করণটিকে নিষিদ্ধ করে।
টেরি

3

স্থানীয় এবং প্লে স্টোর এপিপির সংস্করণ কোডটি চেক করুন

try {
        versionChecker VersionChecker = new versionChecker();
        String versionUpdated = VersionChecker.execute().get().toString();
        Log.i("version code is", versionUpdated);


        PackageInfo packageInfo = null;
        try {
            packageInfo = getPackageManager().getPackageInfo(getPackageName(), 0);
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        }
        int version_code = packageInfo.versionCode;
        String version_name = packageInfo.versionName;
        Log.i("updated version code", String.valueOf(version_code) + "  " + version_name);
        if (version_name != versionUpdated) {
            String packageName = getApplicationContext().getPackageName();//
            UpdateMeeDialog updateMeeDialog = new UpdateMeeDialog();
            updateMeeDialog.showDialogAddRoute(MainActivity.this, packageName);
            Toast.makeText(getApplicationContext(), "please updated", Toast.LENGTH_LONG).show();
        }
    } catch (Exception e) {
        e.getStackTrace();
    }

সংস্করণ চেক জন্য ক্লাস বাস্তবায়ন

class versionChecker extends AsyncTask<String, String, String> {
String newVersion;

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

    try {
        newVersion = Jsoup.connect("https://play.google.com/store/apps/details?id=+YOR_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("div[itemprop=softwareVersion]")
                .first()
                .ownText();
    } catch (IOException e) {
        e.printStackTrace();
    }

    return newVersion;
}
}

আপডেটের জন্য ডায়লব বক্স

public class UpdateMeeDialog {

ActivityManager am;
TextView rootName;
Context context;
Dialog dialog;
String key1,schoolId;
public void showDialogAddRoute(Activity activity, final String packageName){
    context=activity;
    dialog = new Dialog(context);

    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
    dialog.setCancelable(false);
    dialog.setContentView(R.layout.dialog_update);
    am = (ActivityManager)activity.getSystemService(Context.ACTIVITY_SERVICE);

    Button cancelDialogue=(Button)dialog.findViewById(R.id.buttonUpdate);
    Log.i("package name",packageName);
    cancelDialogue.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent=new Intent(Intent.ACTION_VIEW);                
    intent.setData(Uri.parse("https://play.google.com/store/apps/details?
    id="+packageName+"&hl=en"));
            context.startActivity(intent);
        }
    });
    dialog.show();
}
}

কথোপকথন বিন্যাস

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#d4e9f2">


<TextView
    android:layout_width="match_parent"
    android:layout_height="40dp"

    android:text="Please Update First..!!"
    android:textSize="20dp"
    android:textColor="#46a5df"
    android:textAlignment="center"
    android:layout_marginTop="50dp"
    android:id="@+id/textMessage"
    />
<LinearLayout
    android:layout_width="match_parent"
    android:orientation="horizontal"
    android:weightSum="1"
    android:layout_marginTop="50dp"
    android:layout_below="@+id/textMessage"
    android:layout_height="50dp">

    <Button
        android:id="@+id/buttonUpdate"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="Update"
        android:background="#67C6F1"
        android:textAlignment="center" />
</LinearLayout>


2

আপগ্রেড করার জন্য আমাদের নিজস্ব প্রক্রিয়াটি সংজ্ঞায়িত করা আরও ভাল।

  1. এমন একটি ওয়েব পরিষেবা তৈরি করুন যা আমাদের সার্ভার থেকে অ্যাপের (আইওএস, অ্যান্ড্রয়েড) সর্বশেষতম সংস্করণ দেয়।
  2. অথবা অ্যাপ্লিকেশনে আপনি যে কোনও ওয়েব পরিষেবা ব্যবহার করেছেন (যেমন লগইন) সার্ভার থেকে সর্বশেষ অ্যাপ্লিকেশন সংস্করণটি ফিরিয়ে দেবে।
  3. একবার অ্যাপ্লিকেশনটি # 1 বা 2 থেকে সংস্করণ পাবে App যদি সেখানে পার্থক্য থাকে তবে আমরা নিম্নরূপ সতর্কতা প্রদর্শন করতে পারি,

অ্যান্ড্রয়েড এবং আইওএস: যদি সর্বশেষ অ্যাপ্লিকেশন সংস্করণ উপলব্ধ থাকে তবে এটি "আরও বৈশিষ্ট্য সহ সর্বশেষ সংস্করণ উপলব্ধ, আপগ্রেড বোতামে ক্লিক করুন আপগ্রেড করতে" ("আপগার্ড" এবং "নং ধন্যবাদ" বোতাম সহ সতর্কতা প্রদর্শন করবে alert) তারপরে অ্যাপটি পুনঃনির্দেশিত হবে প্লেস্টোর / অ্যাপস্টোর এবং এটি সর্বশেষ সংস্করণটি খুলবে।

 --- we can do upgrade compulsory or optionally.

আপগ্রেড প্রক্রিয়া করার আগে দয়া করে নিশ্চিত হয়ে নিন যে কোনও ডিবি স্কিমা পরিবর্তন থাকলে আপনি সঠিক ডিবি মাইগ্রেশন প্রক্রিয়া পরিচালনা করেছেন।


1

অ্যাপ্লিকেশন ব্যবহারকারীকে বাজারে কোনও আপডেট উপলভ্য থাকলে আপডেট করতে বাধ্য করার জন্য আপনার প্রথমে বাজারে অ্যাপ্লিকেশন সংস্করণটি পরীক্ষা করা উচিত এবং এটি ডিভাইসে থাকা অ্যাপ্লিকেশনটির সংস্করণের সাথে তুলনা করা উচিত। যদি সেগুলি আলাদা হয় তবে এটি আপডেট উপলব্ধ। এই পোস্টে আমি ডিভাইসে বাজারের বর্তমান সংস্করণ এবং বর্তমান সংস্করণ পাওয়ার জন্য কোডটি লিখেছিলাম এবং তাদের একসাথে তুলনা করি। আমি আপডেট ডায়ালগটি কীভাবে প্রদর্শন করব এবং ব্যবহারকারীকে আপডেট পৃষ্ঠায় পুনর্নির্দেশ করব তাও আমি দেখিয়েছি। দয়া করে এই লিঙ্কটি দেখুন: https://stackoverflow.com/a/33925032/5475941 কেবল নিশ্চিত হয়ে নিন যে কথোপকথনে আপনি কেবলমাত্র ব্যবহারকারী আপডেট বোতামটি দেখান এবং তাকে বাতিল বোতামটি দেখান না। এক্ষেত্রে অ্যাপটি ব্যবহার করার আগে তাকে আপডেট করতে বাধ্য করা হবে।


1

এখানে অবশ্যই স্পষ্টভাবে উল্লেখ করা উচিত তা হ'ল শীঘ্রই প্রকাশিত অ্যাপ্লিকেশন আপডেটগুলি API

এই এপিআই দিয়ে আপনার কাছে দুটি বিকল্প থাকবে; প্রথমটি সমালোচনামূলক আপডেটের জন্য একটি পূর্ণ-স্ক্রিন অভিজ্ঞতা যখন আপনি প্রত্যাশা করেন যে আপডেটটি তত্ক্ষণাত প্রয়োগ হওয়ার জন্য অপেক্ষা করবেন। দ্বিতীয় বিকল্পটি একটি নমনীয় আপডেট, যার অর্থ ব্যবহারকারী আপডেটটি ডাউনলোড করার সময় অ্যাপটি ব্যবহার করতে পারবেন keep আপনি আপডেট প্রবাহ সম্পূর্ণরূপে কাস্টমাইজ করতে পারেন যাতে এটি আপনার অ্যাপ্লিকেশনের অংশের মতো মনে হয়।


1

অ্যাপ্লিকেশন সংস্করণটির জন্য রিমোট কনফিগারেশন ব্যবহার করা এবং সর্বদা লঞ্চের ক্রিয়াকলাপটি পরীক্ষা করা ভাল অ্যাপ্লিকেশন সংস্করণটি দূরবর্তী সংস্করণের মতোই বা অ্যাপ স্টোর থেকে আপডেটের জন্য জোর না করে তবে তা পরীক্ষা করা ভাল idea

সাধারণ যুক্তি খুশি কোডিং ..

https://firebase.google.com/docs/remote-config/android


1

এটি মোকাবেলার জন্য আপনি অ্যাপ্লিকেশন আপডেটগুলি প্লে কোর লাইব্রেরি ব্যবহার করতে পারেন। আপনি আপডেটের প্রাপ্যতার জন্য যাচাই করতে পারেন এবং নির্বিঘ্নে উপলভ্য হলে সেগুলি ইনস্টল করতে পারেন।

অ্যাপ্লিকেশন আপডেটগুলি এমন অ্যাপ্লিকেশনগুলির সাথে সামঞ্জস্যপূর্ণ নয় যা APK বর্ধিত ফাইল (.বব ফাইল) ব্যবহার করে। আপনি হয় নমনীয় ডাউনলোডগুলি বা তাত্ক্ষণিক আপডেটের জন্য যেতে পারেন যা গুগল প্লে আপনার জন্য আপডেট ডাউনলোড এবং ইনস্টল করার জন্য যত্ন নেয়।

dependencies {
    implementation 'com.google.android.play:core:1.5.0'
    ...
}

এই উত্তরটি https://stackoverflow.com/a/58212818/7579041 দেখুন


0

আপনি ভেরিয়েবলটিতে অ্যাপে রাখা সংস্করণ সংখ্যার মধ্যে একটি ম্যাচ করে এটি করতে পারেন এবং একইভাবে বর্তমান অ্যাপ্লিকেশন সংস্করণটি সার্ভারের পাশে রাখা হয় এবং প্রতিবার ব্যবহারকারী অ্যাপটি খোলার পরে প্রথম অনুরোধটি প্রেরণ করা উচিত যা এটি পাওয়া যায় কিনা তা যাচাই করার জন্য মিলে যাওয়া কিছুই করতে পারে না কেবল ব্যবহারকারী আপনার অ্যাপ্লিকেশনটিকে অন্যথায় ব্যবহার করতে দেয় অন্যথায় গুগল প্লেস্টোরের উদ্দেশ্যে অভিপ্রায় চালায় বা আপনার অ্যাপ্লিকেশনটিতে একটি ওয়েবভিউ উইন্ডো খুলতে পারে (উইন্ডো.ওপেন (" https://play.google.com/store/apps/details?id= PACKAGE_NAME ", '_system', 'অবস্থান = হ্যাঁ');) এবং সেখানে তারা স্বয়ংক্রিয়ভাবে বোতাম আপডেট যে কি PlayStore google আপনার জন্য হয়, তাহলে যদি আপনি আছে আত স্বয়ংক্রিয় আপডেট আছে চাওয়ার থাকবে।


0

আপনি আপনার ব্যবহারকারীদের অবহিত করতে পারেন যে আপডেট করার জন্য উপলব্ধ বর্তমান অ্যাপ্লিকেশনটির একটি নতুন সংস্করণ রয়েছে। এছাড়াও, যদি এই শর্তটি সত্য হয় তবে আপনি অ্যাপটিতে লগইন অবরোধ করতে পারেন।

এটি আপনাকে সমাধান সরবরাহ করে কিনা তা দয়া করে দেখুন ।


0

ঠিক আছে, অ্যাপ্লিকেশন পৃষ্ঠা (গুগল প্লে অ্যাপ পৃষ্ঠা) থেকে সংস্করণ কোডটি স্ক্র্যাপ করা, ইত্যাদি এই সমস্যার অনেকগুলি সমাধান হতে পারে etc.

তবে আমি আপনাকে চূড়ান্ত সমাধানটি দেখাতে যাচ্ছি যার জন্য এক পয়সাও লাগবে না এবং যাদুবিদ্যার মতো কাজ করবে।

  1. ফায়ারবেস রিমোট
    কনফিগার প্যানেলে আপনার অ্যাপের সর্বশেষ সংস্করণ কোডটি কেবল সংরক্ষণ করুন
  2. অ্যাপটি যখনই খোলা হবে তখন সেই সংস্করণ কোড মানটি আনুন
  3. এটি অ্যাপ্লিকেশনের বর্তমান সংস্করণ কোডের সাথে তুলনা করুন, যা আপনি নীচের কোড দ্বারা পেতে পারেন

    private int getCurrentVersionCode() {
    try {
        return getPackageManager().getPackageInfo(getPackageName(), 0).versionCode;
    } catch (NameNotFoundException e) {
        e.printStackTrace();
    }
    return -1;
    

    }

যদি আনীত সংস্করণ কোডটি বর্তমান সংস্করণটির চেয়ে বেশি হয় তবে অ্যাপ্লিকেশনটি আপডেট করতে জিজ্ঞাসা করে একটি সতর্কতা ডায়ালগ দেখান। অন্যথায়, অ্যাপ্লিকেশনটি ইতিমধ্যে আপডেট হয়েছে।

সুতরাং, আপনি যখনই নতুন সংস্করণটি রোল আউট করবেন তখন আপনার নতুন সংস্করণ কোডটি ফায়ারবেস রিমোট কনফিগার প্যানেলে রাখা দরকার

ফায়ারবেস রিমোট কনফিগার ব্যবহার করে কীভাবে ব্যবহারকারীদের অ্যাপ আপডেট করতে বাধ্য করা যায় তার পুরো টিউটোরিয়ালটি আপনি পড়তে পারেন


0

গুগল প্লে কোর লাইব্রেরির জন্য অ্যাপ-আপডেট আপডেট করেছে।

অ্যাপ্লিকেশন আপডেটগুলি সহজেই প্রয়োগ করতে আমি একটি লাইটওয়েট লাইব্রেরি প্রয়োগ করেছি। কীভাবে ব্যবহারকারীকে আপডেট সম্পাদন করতে বাধ্য করা যায় সে সম্পর্কে আপনি নীচের লিঙ্কটিতে একটি উদাহরণ পেতে পারেন।

https://github.com/dnKaratzas/android-inapp-update#forced-updates


0

var activeVersion = "3.9.2";

var currentVersion = "3.9.1";

var activeVersionArr = অ্যাক্টিভ ভার্সন.স্প্লিট ("।"); var currentVersionArr = বর্তমান ভার্সন.স্প্লিট ("।");

var compArray = JSON.stringify (activeVersionArr) == JSON.stringify (কারেন্ট ভার্সনআর);

if (তুলনাআরে) {মিথ্যা প্রত্যাবর্তন; }

যদি (! তুলনাআররে) {(ভার i = 0; i <অ্যাক্টিভ ভার্সনআর লেন্থ; i++) {
যদি (অ্যাক্টিভ ভার্সনআর [i]! == কারেন্ট ভার্সনআর [i]) {
যদি (অ্যাক্টিভ ভার্সনআর [i]> কারেন্ট ভার্সনআর [i]) সত্য প্রত্যাবর্তন; } অন্য {প্রত্যাবর্তন মিথ্যা; }
}}}

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.