অ্যান্ড্রয়েড অ্যাপে রেট ইট বৈশিষ্ট্যটি কীভাবে প্রয়োগ করা যায়


97

আমি একটি অ্যান্ড্রয়েড অ্যাপ বিকাশ করছি। যার মধ্যে সবকিছু ঠিকঠাক কাজ করছে। আমার অ্যাপ্লিকেশন চালু করতে প্রস্তুত। তবে সেখানে আমার আরও একটি বৈশিষ্ট্য প্রয়োগ করা দরকার। আমার একটি পপআপ প্রদর্শন করতে হবে যা এতে রয়েছে

Rate It এবং Remind me later

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

এর আগে কি কেউ এই পরিস্থিতির মুখোমুখি হয়েছেন? যদি তা হয় তবে এর কোনও সমাধান বা বিকল্প নেই?


4
সুতরাং আপনি কি কেবল এটির রেট চাইছেন / আমাকে পরে স্মরণ করিয়ে দিচ্ছেন বা কোনও নির্দিষ্ট ব্যবহারকারী কোনও অ্যান্ড্রয়েড অ্যাপ রেট দিয়েছে কিনা তা কীভাবে জানতে চাইছেন?
wtsang02

4
আমি পপআপ বাস্তবায়ন করেছি। তবে কোনও ব্যবহারকারী অ্যাপটি রেট দেয় কিনা তা কীভাবে জানবেন
নবীন

-1 আমি এই প্রশ্নের এবং লিঙ্কটির একটির মধ্যে পার্থক্য দেখছি না।
wtsang02

4
@ wtsang02, এটি সত্য হতে পারে। তবে প্রশ্নটি দেখুন। এটি জিজ্ঞাসা করা হয়েছে Mar 15 2011। প্রায় 20 মাস পরে। আমি মনে করি কারও কারও কাছে আমার প্রয়োজনের সমাধান বা বিকল্প রয়েছে। এটা এখানে পোস্ট করা হয়েছে।
নবীন

আপনি গ্রন্থাগারটি github.com/Vorlonsoft/AndroidRate ( implementation 'com.vorlonsoft:androidrate:1.0.3') ব্যবহার করতে পারেন
আলেকজান্ডার সাভিন

উত্তর:


183

আমি কিছুক্ষণ আগে এটিকে বাস্তবায়ন করেছি। কোনও ব্যবহারকারী কোনও অ্যাপকে রেট দিয়েছে কি না তা জানা অসম্ভব, রেটিংগুলিকে মুদ্রায় পরিণত হতে আটকাতে (কিছু বিকাশকারী "এই অ্যাপ্লিকেশনটিকে রেট দিন এবং অ্যাপ্লিকেশনটিতে বিনামূল্যে পেতে পারেন") এর মতো একটি বিকল্প যুক্ত করতে পারে।

আমার লেখা ক্লাসটি তিনটি বোতাম সরবরাহ করে এবং ডায়ালগটি কনফিগার করে যাতে অ্যাপটি একবার চালুর পরে প্রদর্শিত হয় n(ব্যবহারকারীরা যদি অ্যাপটি কিছুটা আগে ব্যবহার করে থাকেন তবে অ্যাপটি রেটিং করার উচ্চতর সম্ভাবনা রয়েছে them তাদের বেশিরভাগই অসম্ভাব্য এমনকি এটি প্রথম রানে কী করে তা জানতে):

public class AppRater {
    private final static String APP_TITLE = "App Name";// App Name
    private final static String APP_PNAME = "com.example.name";// Package Name

    private final static int DAYS_UNTIL_PROMPT = 3;//Min number of days
    private final static int LAUNCHES_UNTIL_PROMPT = 3;//Min number of launches

    public static void app_launched(Context mContext) {
        SharedPreferences prefs = mContext.getSharedPreferences("apprater", 0);
        if (prefs.getBoolean("dontshowagain", false)) { return ; }

        SharedPreferences.Editor editor = prefs.edit();

        // Increment launch counter
        long launch_count = prefs.getLong("launch_count", 0) + 1;
        editor.putLong("launch_count", launch_count);

        // Get date of first launch
        Long date_firstLaunch = prefs.getLong("date_firstlaunch", 0);
        if (date_firstLaunch == 0) {
            date_firstLaunch = System.currentTimeMillis();
            editor.putLong("date_firstlaunch", date_firstLaunch);
        }

        // Wait at least n days before opening
        if (launch_count >= LAUNCHES_UNTIL_PROMPT) {
            if (System.currentTimeMillis() >= date_firstLaunch + 
                    (DAYS_UNTIL_PROMPT * 24 * 60 * 60 * 1000)) {
                showRateDialog(mContext, editor);
            }
        }

        editor.commit();
    }   

    public static void showRateDialog(final Context mContext, final SharedPreferences.Editor editor) {
        final Dialog dialog = new Dialog(mContext);
        dialog.setTitle("Rate " + APP_TITLE);

        LinearLayout ll = new LinearLayout(mContext);
        ll.setOrientation(LinearLayout.VERTICAL);

        TextView tv = new TextView(mContext);
        tv.setText("If you enjoy using " + APP_TITLE + ", please take a moment to rate it. Thanks for your support!");
        tv.setWidth(240);
        tv.setPadding(4, 0, 4, 10);
        ll.addView(tv);

        Button b1 = new Button(mContext);
        b1.setText("Rate " + APP_TITLE);
        b1.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                mContext.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + APP_PNAME)));
                dialog.dismiss();
            }
        });        
        ll.addView(b1);

        Button b2 = new Button(mContext);
        b2.setText("Remind me later");
        b2.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                dialog.dismiss();
            }
        });
        ll.addView(b2);

        Button b3 = new Button(mContext);
        b3.setText("No, thanks");
        b3.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                if (editor != null) {
                    editor.putBoolean("dontshowagain", true);
                    editor.commit();
                }
                dialog.dismiss();
            }
        });
        ll.addView(b3);

        dialog.setContentView(ll);        
        dialog.show();        
    }
}

শ্রেণীর সংহত করা যোগ করার মতোই সহজ:

AppRater.app_launched(this);

আপনার ক্রিয়াকলাপে। এটি সম্পূর্ণ অ্যাপ্লিকেশনটিতে কেবল একটি ক্রিয়াকলাপে যুক্ত করা প্রয়োজন।


4
এটি একই ডিভাইসটি ব্যবহার করে একাধিক ব্যবহারকারীকে সমর্থন করে না।
AsafK

4
@ আসফক হ্যাঁ, তবে একই ডিভাইসটি ব্যবহার করে একাধিক ব্যবহারকারী কেবলমাত্র appraterপ্রমাণীকরণের পরে ডায়ালগ দেখিয়ে এবং এর shared preferenceমধ্যে গুগল ইমেল ঠিকানা অন্তর্ভুক্ত করতে পরিবর্তন করে পরিচালনা করতে পারবেন key
স্টিফেন

4
হাই, আমার একটি প্রশ্ন আছে। কেন আপনি সবকিছু স্থির করলেন? ধন্যবাদ রাঘব!
রুচির বড়োনিয়া

4
হাই, আমি আপনার উপরের কোডটি চেষ্টা করছি। আমি AppRater.app_launched(this);আমার onCreate()মেইনএকটিভিটির ভিতরে রেখেছি । আমি সর্বনিম্ন সংখ্যাটি প্রবর্তনকে 2 তেও পরিবর্তন করেছি। তবে, আমি 2 অ্যাপ্লিকেশন প্রবর্তনের পরে ডায়লগটি দেখছি না। তুমি কি আমাকে সাহায্য করতে পারবে? ধন্যবাদ!
ব্যতিক্রম

4
এনাম ব্যবহার করা ভাল Context.MODE_PRIVATE-context.getSharedPreferences("apprater", Context.MODE_PRIVATE);
বিবেক

18

আমার একজন ডায়ালগফ্রেগমেন্ট ব্যবহার করছে:

public class RateItDialogFragment extends DialogFragment {
    private static final int LAUNCHES_UNTIL_PROMPT = 10;
    private static final int DAYS_UNTIL_PROMPT = 3;
    private static final int MILLIS_UNTIL_PROMPT = DAYS_UNTIL_PROMPT * 24 * 60 * 60 * 1000;
    private static final String PREF_NAME = "APP_RATER";
    private static final String LAST_PROMPT = "LAST_PROMPT";
    private static final String LAUNCHES = "LAUNCHES";
    private static final String DISABLED = "DISABLED";

    public static void show(Context context, FragmentManager fragmentManager) {
        boolean shouldShow = false;
        SharedPreferences sharedPreferences = getSharedPreferences(context);
        SharedPreferences.Editor editor = sharedPreferences.edit();
        long currentTime = System.currentTimeMillis();
        long lastPromptTime = sharedPreferences.getLong(LAST_PROMPT, 0);
        if (lastPromptTime == 0) {
            lastPromptTime = currentTime;
            editor.putLong(LAST_PROMPT, lastPromptTime);
        }

        if (!sharedPreferences.getBoolean(DISABLED, false)) {
            int launches = sharedPreferences.getInt(LAUNCHES, 0) + 1;
            if (launches > LAUNCHES_UNTIL_PROMPT) {
                if (currentTime > lastPromptTime + MILLIS_UNTIL_PROMPT) {
                    shouldShow = true;
                }
            }
            editor.putInt(LAUNCHES, launches);
        }

        if (shouldShow) {
            editor.putInt(LAUNCHES, 0).putLong(LAST_PROMPT, System.currentTimeMillis()).commit();
            new RateItDialogFragment().show(fragmentManager, null);
        } else {
            editor.commit();
        }
    }

    private static SharedPreferences getSharedPreferences(Context context) {
        return context.getSharedPreferences(PREF_NAME, 0);
    }

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        return new AlertDialog.Builder(getActivity())
                .setTitle(R.string.rate_title)
                .setMessage(R.string.rate_message)
                .setPositiveButton(R.string.rate_positive, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + getActivity().getPackageName())));
                        getSharedPreferences(getActivity()).edit().putBoolean(DISABLED, true).commit();
                        dismiss();
                    }
                })
                .setNeutralButton(R.string.rate_remind_later, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        dismiss();
                    }
                })
                .setNegativeButton(R.string.rate_never, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        getSharedPreferences(getActivity()).edit().putBoolean(DISABLED, true).commit();
                        dismiss();
                    }
                }).create();
    }
}

তারপরে এটি onCreate()আপনার মূল ফ্রেগমেন্টঅ্যাক্টিভিটির মধ্যে ব্যবহার করুন :

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ...

    RateItDialogFragment.show(this, getFragmentManager());

}

ভাল একটা! ডায়ালগটি লোড করার সময় যদি কিছু ভুল হয়ে যায় তবে ডায়ালগফ্রেগমেন্টটি দেখানোর আগে আমি কেবল এডিটর ডট কমিট () রাখব।
নারকো

ধন্যবাদ আপডেট হয়েছে।
1515

দ্রষ্টব্য: আপনি যদি ভাগ করা পছন্দগুলি সংরক্ষণ করতে আবেদন করেন তবে এটি মেমরি ফাঁস হতে পারে। আপনি যদি যত্ন সহকারে লক্ষ্য করেন setPositiveButtonএবং setNegativeButton, এটি কমিট ব্যবহার করে ভাগ করা পছন্দগুলিতে লিখছেন তবে আপনি যদি প্রয়োগ করেন যা অ্যাসিঙ্ক হয় এবং ক্রিয়াকলাপটি সম্পূর্ণ না হওয়া অবধি রেফারেন্স রাখবে এবং তার পরে এটি বরখাস্তের ডাক দিচ্ছে না। খণ্ডনটি খণ্ডনটিকে ধ্বংস করার চেষ্টা করবে, তবে এটি করা যায় না কারণ ক্রিয়াকলাপটি ভাগ করে নেওয়া পছন্দ দ্বারা প্রয়োগ করা প্রক্রিয়াটি দ্বারা ব্যবহৃত / ব্যবহৃত হয়। (আমি এটি পেতাম কারণ অ্যান্ড্রয়েড স্টুডিও ব্যবহারকারীকে প্রয়োগ করার প্রতিশ্রুতি পরিবর্তন করতে অনুরোধ করবে, আপনি না করলে তা করবেন না অন্য কিছু যুক্তি ব্যবহার করুন)
সায়

@ মিক্সেল ক্রিয়াকলাপে এবং টুকরা ছাড়াই কোড ব্যবহার করার জন্য কীভাবে সংশোধন করবেন?
ব্যবহারকারী 1090751

7

আমি মনে করি আপনি যা করতে চেষ্টা করছেন তা সম্ভবত পাল্টা-উত্পাদনশীল।

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

সরাসরি কোনও অ্যাপ্লিকেশনকে রেট দেওয়ার সক্ষমতা যুক্ত করা আমার ফ্রি সংস্করণের জন্য সংখ্যার রেটিংগুলিতে সামান্য হ্রাস এবং আমার প্রদত্ত অ্যাপ্লিকেশনটিতে সামান্য বৃদ্ধি ঘটায়। ফ্রি অ্যাপ্লিকেশনটির জন্য, আমার 4 তারা রেটিংগুলি আমার 5 তারা রেটিংয়ের চেয়ে বেশি বেড়েছে, যেহেতু যারা আমার অ্যাপটি ভাল বলে মনে করে তবে দুর্দান্ত নয় তারাও এটিকে রেট দিতে শুরু করে। পরিবর্তন ছিল প্রায় -২.২। অর্থ প্রদানের জন্য, পরিবর্তনটি প্রায় +0.1 ছিল। আমার প্রচুর মন্তব্য পাওয়া পছন্দ না করে আমার এটি বিনামূল্যে সংস্করণ থেকে সরিয়ে দেওয়া উচিত।

আমি আমার রেটিং বোতামটি সেটিংস (পছন্দ) স্ক্রিনে রেখেছি, যেখানে এটি স্বাভাবিক ক্রিয়াকলাপকে প্রভাবিত করে না। এটি এখনও আমার রেটিং রেটটি 4 বা 5 এর ফ্যাক্টর দ্বারা বৃদ্ধি করেছে আমার কোনও সন্দেহ নেই যে আমি যদি আমার ব্যবহারকারীদের রেটিং তৈরিতে ঠাট্টা করার চেষ্টা করি তবে প্রতিবাদ হিসাবে আমি প্রচুর ব্যবহারকারী আমাকে খারাপ রেটিং দিবে।


100% সত্য। আমার ফ্রি অ্যাপেও একই ঘটনা ঘটেছে।
আকাশ ভার্লানি

6

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

মডিউল গ্রেডল:

dependencies {
  implementation 'com.vorlonsoft:androidrate:1.0.8'
}

মেইনএ্যাকটিভিটি.জভা:

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

  AppRate.with(this)
      .setStoreType(StoreType.GOOGLEPLAY) //default is GOOGLEPLAY (Google Play), other options are
                                          //           AMAZON (Amazon Appstore) and
                                          //           SAMSUNG (Samsung Galaxy Apps)
      .setInstallDays((byte) 0) // default 10, 0 means install day
      .setLaunchTimes((byte) 3) // default 10
      .setRemindInterval((byte) 2) // default 1
      .setRemindLaunchTimes((byte) 2) // default 1 (each launch)
      .setShowLaterButton(true) // default true
      .setDebug(false) // default false
      //Java 8+: .setOnClickButtonListener(which -> Log.d(MainActivity.class.getName(), Byte.toString(which)))
      .setOnClickButtonListener(new OnClickButtonListener() { // callback listener.
          @Override
          public void onClickButton(byte which) {
              Log.d(MainActivity.class.getName(), Byte.toString(which));
          }
      })
      .monitor();

  if (AppRate.with(this).getStoreType() == StoreType.GOOGLEPLAY) {
      //Check that Google Play is available
      if (GoogleApiAvailability.getInstance().isGooglePlayServicesAvailable(this) != ConnectionResult.SERVICE_MISSING) {
          // Show a dialog if meets conditions
          AppRate.showRateDialogIfMeetsConditions(this);
      }
  } else {
      // Show a dialog if meets conditions
      AppRate.showRateDialogIfMeetsConditions(this);
  }
}

রেট কথোপকথন দেখানোর জন্য ডিফল্ট শর্তাদি নীচে রয়েছে:

  1. অ্যাপ্লিকেশনটি ইনস্টলেশন থেকে 10 দিনেরও বেশি পরে লঞ্চ করা হয়েছে। এর মাধ্যমে পরিবর্তন করুন AppRate#setInstallDays(byte)
  2. অ্যাপটি 10 ​​বারেরও বেশি লঞ্চ হয়েছে। এর মাধ্যমে পরিবর্তন করুন AppRate#setLaunchTimes(byte)
  3. নিরপেক্ষ বোতামটি ক্লিক করার পরে অ্যাপটি 1 দিনেরও বেশি সময় চালু হয় is এর মাধ্যমে পরিবর্তন করুন AppRate#setRemindInterval(byte)
  4. অ্যাপ্লিকেশানের মাধ্যমে এক্স কাল ও এক্স% 1 = 0. পরিবর্তন চালু AppRate#setRemindLaunchTimes(byte)
  5. অ্যাপ্লিকেশন ডিফল্টরূপে নিরপেক্ষ ডায়ালগ দেখায় (আমাকে পরে স্মরণ করিয়ে দিন)। এর মাধ্যমে পরিবর্তন করুন setShowLaterButton(boolean)
  6. বোতাম টিপলে কলব্যাক নির্দিষ্ট করতে। দ্বিতীয় আর্গুমেন্টের সমান মানটি যুক্তিটিতে DialogInterface.OnClickListener#onClickপাস করা হবে onClickButton
  7. সেটিংসটি AppRate#setDebug(boolean)নিশ্চিত করবে যে অ্যাপটি চালু হওয়ার পরে রেটিংয়ের অনুরোধটি প্রতিবার প্রদর্শিত হবে। এই বৈশিষ্ট্যটি শুধুমাত্র উন্নয়নের জন্য!

কথোপকথন প্রদর্শনের জন্য customচ্ছিক কাস্টম ইভেন্টের প্রয়োজনীয়তা

ডায়ালগ দেখানোর জন্য আপনি অতিরিক্ত requirementsচ্ছিক প্রয়োজনীয়তা যুক্ত করতে পারেন। প্রতিটি প্রয়োজন একটি অনন্য স্ট্রিং হিসাবে যুক্ত / রেফারেন্স করা যেতে পারে। আপনি এই জাতীয় প্রতিটি ইভেন্টের জন্য ন্যূনতম গণনা সেট করতে পারেন (উদাহরণস্বরূপ "ক্রিয়া_পরিবর্তিত" 3 বার, "বোতাম_ ক্লিক" 5 বার, ইত্যাদি)

AppRate.with(this).setMinimumEventCount(String, short);
AppRate.with(this).incrementEventCount(String);
AppRate.with(this).setEventCountValue(String, short);

শো ডায়ালগ পতাকা সাফ করুন

আপনি যখন ডায়ালগটি আবার দেখাতে চান, কল করুন AppRate#clearAgreeShowDialog()

AppRate.with(this).clearAgreeShowDialog();

বোতাম টিপুন যখন

কল AppRate#showRateDialog(Activity)

AppRate.with(this).showRateDialog(this);

কাস্টম ভিউ সেট করুন

কল AppRate#setView(View)

LayoutInflater inflater = (LayoutInflater)this.getSystemService(LAYOUT_INFLATER_SERVICE);
View view = inflater.inflate(R.layout.custom_dialog, (ViewGroup)findViewById(R.id.layout_root));
AppRate.with(this).setView(view).monitor();

নির্দিষ্ট থিম

আপনি ডায়ালগ স্ফীত করতে একটি নির্দিষ্ট থিম ব্যবহার করতে পারেন।

AppRate.with(this).setThemeResId(int);

কাস্টম সংলাপ

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

<resources>
    <string name="rate_dialog_title">Rate this app</string>
    <string name="rate_dialog_message">If you enjoy playing this app, would you mind taking a moment to rate it? It won\'t take more than a minute. Thanks for your support!</string>
    <string name="rate_dialog_ok">Rate It Now</string>
    <string name="rate_dialog_cancel">Remind Me Later</string>
    <string name="rate_dialog_no">No, Thanks</string>
</resources>

গুগল প্লে উপলব্ধ কিনা তা পরীক্ষা করে দেখুন

if (GoogleApiAvailability.getInstance().isGooglePlayServicesAvailable(this) != ConnectionResult.SERVICE_MISSING) {

}

4

জাভা এবং কোটলিন সমাধান (২০২০ সালে গুগলের মাধ্যমে অ্যাপ-এ পর্যালোচনা এপিআই):

এখানে চিত্র বর্ণনা লিখুন

প্রথমে আপনার build.gradle(app)ফাইলে নিম্নলিখিত নির্ভরতা যুক্ত করুন ( এখানে সম্পূর্ণ সেটআপ )

dependencies {
    // This dependency is downloaded from the Google’s Maven repository.
    // So, make sure you also include that repository in your project's build.gradle file.
    implementation 'com.google.android.play:core:1.8.0'
}

আপনার এই পদ্ধতিটি যুক্ত করুন Activity:

void askRatings() {
    ReviewManager manager = ReviewManagerFactory.create(this);
    Task<ReviewInfo> request = manager.requestReviewFlow();
    request.addOnCompleteListener(task -> {
        if (task.isSuccessful()) {
            // We can get the ReviewInfo object
            ReviewInfo reviewInfo = task.getResult();
            Task<Void> flow = manager.launchReviewFlow(this, reviewInfo);
            flow.addOnCompleteListener(task2 -> {
                // The flow has finished. The API does not indicate whether the user
                // reviewed or not, or even whether the review dialog was shown. Thus, no
                // matter the result, we continue our app flow.
            });
        } else {
            // There was some problem, continue regardless of the result.
        }
    });
}

অন্য যে কোনও পদ্ধতির মতো এটিকে কল করুন:

askRatings();

কোটলিন কোডটি এখানে পাওয়া যাবে


তবে এই পর্যালোচনা কথোপকথনটি কেবল একবারই প্রদর্শিত হচ্ছে app অ্যাপে পর্যালোচনা ডায়ালগটি আমরা কীভাবে অ্যাপে একবারের বেশি দেখাব?
ব্যবহারকারী 2162130

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

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

এর জন্য ন্যূনতম এপিআই প্রয়োজনীয়তা ???
এজি-বিকাশকারী

4
@ এজি-বিকাশকারী এটি এখনও যাচাই করেন নি, তবে আমি নিশ্চিত এটি এপিআই>> ২১ হতে হবে
আইডিকোড

3

এই লাইব্রেরিটি ব্যবহার করুন, এটি সহজ এবং সহজ .. https://github.com/hotchemi/Android- রেট

নির্ভরতা যুক্ত করে ..

dependencies {
  compile 'com.github.hotchemi:android-rate:0.5.6'
}

4
আপনি গ্রন্থাগার github.com/Vorlonsoft/AndroidRate ( implementation 'com.vorlonsoft:androidrate:1.0.3') ব্যবহার করতে পারেন । এটি আপ টু ডেট।
আলেকজান্ডার সাভিন

3

এই সমাধানটি উপরে উপস্থাপিতগুলির সাথে খুব মিল। পার্থক্যটি হ'ল আপনি লঞ্চ এবং দিন প্রতি রেটিং কথোপকথনের প্রম্পটটি বিলম্ব করতে সক্ষম হতে চলেছেন। যদি আমাকে পরে মনে করিয়ে দেওয়া বোতাম টিপতে থাকে তবে আমি পপ আপটি 3 দিন এবং 10 টি লঞ্চের জন্য বিলম্ব করব। এটির জন্য এটিই করা হয়েছে যা এটি রেট করার জন্য নির্বাচিত হয়েছে, তবে বিলম্বগুলি দীর্ঘতর হয়েছে (ব্যবহারকারীকে আসলে অ্যাপটি রেট দেওয়া হয়েছে এমন ক্ষেত্রে এত তাড়াতাড়ি বিরক্ত করবেন না This এটি আবার প্রদর্শিত না হয়ে পরিবর্তন করা যেতে পারে, তারপরে আপনাকে অবশ্যই এটি করতে হবে) আপনার মত কোড পরিবর্তন করুন)। আশা করি এটি কাউকে সাহায্য করবে!

public class AppRater {
    private final static String APP_TITLE = "your_app_name";
    private static String PACKAGE_NAME = "your_package_name";
    private static int DAYS_UNTIL_PROMPT = 5;
    private static int LAUNCHES_UNTIL_PROMPT = 10;
    private static long EXTRA_DAYS;
    private static long EXTRA_LAUCHES;
    private static SharedPreferences prefs;
    private static SharedPreferences.Editor editor;
    private static Activity activity;

    public static void app_launched(Activity activity1) {
        activity = activity1;

        Configs.sendScreenView("Avaliando App", activity);

        PACKAGE_NAME = activity.getPackageName();

        prefs = activity.getSharedPreferences("apprater", Context.MODE_PRIVATE);
        if (prefs.getBoolean("dontshowagain", false)) 
            return;

        editor = prefs.edit();

        EXTRA_DAYS = prefs.getLong("extra_days", 0);
        EXTRA_LAUCHES = prefs.getLong("extra_launches", 0);

        // Increment launch counter
        long launch_count = prefs.getLong("launch_count", 0) + 1;
        editor.putLong("launch_count", launch_count);

        // Get date of first launch
        Long date_firstLaunch = prefs.getLong("date_firstlaunch", 0);
        if (date_firstLaunch == 0) {
            date_firstLaunch = System.currentTimeMillis();
            editor.putLong("date_firstlaunch", date_firstLaunch);
        }

        // Wait at least n days before opening
        if (launch_count >= (LAUNCHES_UNTIL_PROMPT + EXTRA_LAUCHES))
            if (System.currentTimeMillis() >= date_firstLaunch + (DAYS_UNTIL_PROMPT * 24 * 60 * 60 * 1000) + EXTRA_DAYS)
                showRateDialog();

        editor.commit();
    }   

    public static void showRateDialog() {
        final Dialog dialog = new Dialog(activity);
        dialog.setTitle("Deseja avaliar o aplicativo " + APP_TITLE + "?");

        LinearLayout ll = new LinearLayout(activity);
        ll.setOrientation(LinearLayout.VERTICAL);
        ll.setPadding(5, 5, 5, 5);

        TextView tv = new TextView(activity);
        tv.setTextColor(activity.getResources().getColor(R.color.default_text));
        tv.setText("Ajude-nos a melhorar o aplicativo com sua avaliação no Google Play!");
        tv.setWidth(240);
        tv.setGravity(Gravity.CENTER);
        tv.setPadding(5, 5, 5, 5);
        ll.addView(tv);

        Button b1 = new Button(activity);
        b1.setTextColor(activity.getResources().getColor(R.color.default_text));
        b1.setBackground(activity.getResources().getDrawable(R.drawable.rounded_blue_box));
        b1.setTextColor(Color.WHITE);
        b1.setText("Avaliar aplicativo " + APP_TITLE + "!");
        b1.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                Configs.sendHitEvents(Configs.APP_RATER, Configs.CATEGORIA_ANALYTICS, "Clique", "Avaliar", activity);

                activity.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + PACKAGE_NAME)));
                delayDays(60);
                delayLaunches(30);
                dialog.dismiss();
            }
        });        
        ll.addView(b1);
        LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) b1.getLayoutParams();
        params.setMargins(5, 3, 5, 3);
        b1.setLayoutParams(params);

        Button b2 = new Button(activity);
        b2.setTextColor(activity.getResources().getColor(R.color.default_text));
        b2.setBackground(activity.getResources().getDrawable(R.drawable.rounded_blue_box));
        b2.setTextColor(Color.WHITE);
        b2.setText("Lembre-me mais tarde!");
        b2.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                Configs.sendHitEvents(Configs.APP_RATER, Configs.CATEGORIA_ANALYTICS, "Clique", "Avaliar Mais Tarde", activity);
                delayDays(3);
                delayLaunches(10);
                dialog.dismiss();
            }
        });
        ll.addView(b2);
        params = (LinearLayout.LayoutParams) b2.getLayoutParams();
        params.setMargins(5, 3, 5, 3);
        b2.setLayoutParams(params);

        Button b3 = new Button(activity);
        b3.setTextColor(activity.getResources().getColor(R.color.default_text));
        b3.setBackground(activity.getResources().getDrawable(R.drawable.rounded_blue_box));
        b3.setTextColor(Color.WHITE);
        b3.setText("Não, obrigado!");
        b3.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                Configs.sendHitEvents(Configs.APP_RATER, Configs.CATEGORIA_ANALYTICS, "Clique", "Não Avaliar", activity);

                if (editor != null) {
                    editor.putBoolean("dontshowagain", true);
                    editor.commit();
                }
                dialog.dismiss();
            }
        });
        ll.addView(b3);
        params = (LinearLayout.LayoutParams) b3.getLayoutParams();
        params.setMargins(5, 3, 5, 0);
        b3.setLayoutParams(params);

        dialog.setContentView(ll);        
        dialog.show();        
    }

    private static void delayLaunches(int numberOfLaunches) {
        long extra_launches = prefs.getLong("extra_launches", 0) + numberOfLaunches;
        editor.putLong("extra_launches", extra_launches);
        editor.commit();
    }

    private static void delayDays(int numberOfDays) {
        Long extra_days = prefs.getLong("extra_days", 0) + (numberOfDays * 1000 * 60 * 60 * 24);
        editor.putLong("extra_days", extra_days);
        editor.commit();
    }
}

বাটনগুলির একটি নির্দিষ্ট রঙ এবং পটভূমি রয়েছে। ব্যাকগ্রাউন্ডটি এই এক্সএমএল ফাইলে দেখানো হয়েছে:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:padding="10dp"
    android:shape="rectangle" >

    <solid android:color="#2E78B9" />

    <corners
        android:bottomLeftRadius="6dp"
        android:bottomRightRadius="6dp"
        android:topLeftRadius="6dp"
        android:topRightRadius="6dp" />

</shape>

উত্স: "আমার অ্যাপ্লিকেশনটিকে রেট দিন" এর জন্য অ্যান্ড্রয়েড পদ্ধতির


"কনফিগস" কী তা চেষ্টা করার পরে খুঁজে পাওয়া যায় না।
মোঃ ইমরান চৌধুরী

4
@ মোঃ.ইমরানচৌধুরী দেরী জবাবের জন্য দুঃখিত। কনফিগারগুলি আমার একটি ব্যক্তিগত শ্রেণি যা আমি গুগল অ্যানালিটিক্সের জন্য ব্যবহার করি। আপনি কেবল কোনও সমস্যা ছাড়াই সেই বিবৃতিটি সরিয়ে ফেলতে পারেন!
গুস্তাভো বায়োচি কোস্টা

আপনার হয় হয় মূল উত্তরের সাথে লিঙ্ক করা উচিত বা তাকে ক্রেডিট দেওয়া উচিত। stackoverflow.com/a/6920848/563735
রোহিত Mandiwal


1

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

এটির বিষয়ে চিন্তা করুন, যদি কোনও অ্যাপ্লিকেশন বলতে পারে যে ব্যবহারকারী কোনও পর্যালোচনা রেখে গেছে বা না, ডেভেলপার এমন কিছু বৈশিষ্ট্যগুলি সীমাবদ্ধ করতে পারে যা কেবলমাত্র ব্যবহারকারী 5/5 রেটিং ছেড়ে গেলে আনলক হয়ে যায় be এটি গুগল প্লে-এর অন্যান্য ব্যবহারকারীদের পর্যালোচনাগুলিতে বিশ্বাস না করে এবং রেটিং সিস্টেমকে ক্ষুন্ন করবে।

বিকল্প সমাধানগুলি আমি দেখেছি হ'ল অ্যাপটি নির্দিষ্ট সময়, বা একটি নির্দিষ্ট বিরতিতে অ্যাপ্লিকেশনটি খোলা থাকলে ব্যবহারকারীকে রেটিং জমা দেওয়ার জন্য মনে করিয়ে দেয়। উদাহরণস্বরূপ, প্রতি দশমবার অ্যাপটি খোলার সময়, ব্যবহারকারীকে একটি রেটিং ছেড়ে "ইতিমধ্যে সম্পন্ন" এবং "পরে আমাকে স্মরণ করিয়ে দিন" বোতাম সরবরাহ করতে বলুন। ব্যবহারকারী যদি তাকে পরে মনে করিয়ে দিতে বেছে নিয়ে থাকে তবে এই বার্তাটি দেখিয়ে রাখুন। কিছু অন্যান্য অ্যাপ্লিকেশন বিকাশকারীরা এই বার্তাটি বর্ধমান ব্যবধানের সাথে দেখায় (যেমন, অ্যাপটি খোলার সময় 5, 10, 15 ম বার), কারণ কোনও ব্যবহারকারী যদি অ্যাপ্লিকেশনটি খোলার জন্য 100 তম বারের উপর কোনও পর্যালোচনা না রেখে থাকে, এটি সম্ভবত সম্ভবত সে একটি ছাড়বে না।

এই সমাধানটি নিখুঁত নয়, তবে আমি মনে করি এটি আপাতত আপনার পক্ষে সেরা। এটি আপনাকে ব্যবহারকারীর উপর আস্থা রাখতে নেতৃত্ব দেয়, তবে বুঝতে পারবেন যে বিকল্পটির অর্থ অ্যাপ্লিকেশন বাজারের প্রত্যেকের জন্য সম্ভাব্যতর খারাপ অভিজ্ঞতা।


1

আগস্ট 2020 পর্যন্ত, গুগল প্লে-এর অ্যাপ-অ্যাপ্লিকেশন পর্যালোচনা এপিআই উপলব্ধ এবং এর উত্তর অনুসারে এর সোজা বাস্তবায়ন সঠিক ।

তবে আপনি যদি এর উপরে কিছু ডিসপ্লে যুক্তি যুক্ত করতে চান তবে ফাইভ-স্টার-মি লাইব্রেরিটি ব্যবহার করুন।

onCreateলাইব্রেরি কনফিগার করতে মেইনএ্যাকটিভিটির পদ্ধতিতে লঞ্চের সময় সেট করুন এবং দিনগুলি ইনস্টল করুন ।

  FiveStarMe.with(this)
      .setInstallDays(0) // default 10, 0 means install day.
      .setLaunchTimes(3) // default 10
      .setDebug(false) // default false
      .monitor();

তারপরে যখনই শর্ত পূরণ হয় তখন প্রম্পটটি দেখানোর জন্য যে কোনও ক্রিয়াকলাপ / খণ্ডের অনক্রিট / অনভিউক্র্যাটেড পদ্ধতিতে নীচের পদ্ধতি কলটি রাখুন।

FiveStarMe.showRateDialogIfMeetsConditions(this); //Where *this* is the current activity.

এখানে চিত্র বর্ণনা লিখুন

সংস্থাপনের নির্দেশনা:

আপনি জিটপ্যাক থেকে ডাউনলোড করতে পারেন।

পদক্ষেপ 1: প্রকল্পে এটি যুক্ত করুন (মূল) build.gradle।

allprojects {
  repositories {
    ...
    maven { url 'https://jitpack.io' }
  }
}

পদক্ষেপ 2: আপনার মডিউল (অ্যাপ) স্তরের বিল্ড.gradle এ নিম্নলিখিত নির্ভরতা যুক্ত করুন।

dependencies {
  implementation 'com.github.numerative:Five-Star-Me:2.0.0'
}


আমি আপনার ব্যাখ্যাটি এবং গ্রন্থাগারের লেখক প্রদত্ত একটি অনুসরণ করেছি (গিথুব এ), তবে আমি InAppRating বার্তাটি পাইনি। আমি লিবটিকে মেইনএকটিভিটি # অনক্রিটে পদ্ধতিতে সূচনা করেছি তখন আমি একে একে ফ্রিজেন্টে ডেকে আছি। টুকরো টুকরো সম্পর্কিত কোন সমস্যা আছে?
সউফ রোছডিআইআই

4
এই প্রম্পটটি দেখতে আপনাকে এপিকে কমপক্ষে অভ্যন্তরীণ অ্যাপ্লিকেশন ভাগ করে নেওয়া বা অভ্যন্তরীণ পরীক্ষার ট্র্যাকটিতে আপলোড করতে হবে। বিকাশকারী.অ্যান্ড্রয়েড.
com/guide/playcore/in-app-review/test

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

0

রাঘব সুদের উত্তরের কোটলিন সংস্করণ

Rater.kt

    class Rater {
      companion object {
        private const val APP_TITLE = "App Name"
        private const val APP_NAME = "com.example.name"

        private const val RATER_KEY = "rater_key"
        private const val LAUNCH_COUNTER_KEY = "launch_counter_key"
        private const val DO_NOT_SHOW_AGAIN_KEY = "do_not_show_again_key"
        private const val FIRST_LAUNCH_KEY = "first_launch_key"

        private const val DAYS_UNTIL_PROMPT: Int = 3
        private const val LAUNCHES_UNTIL_PROMPT: Int = 3

        fun start(mContext: Context) {
            val prefs: SharedPreferences = mContext.getSharedPreferences(RATER_KEY, 0)
            if (prefs.getBoolean(DO_NOT_SHOW_AGAIN_KEY, false)) {
                return
            }

            val editor: Editor = prefs.edit()

            val launchesCounter: Long = prefs.getLong(LAUNCH_COUNTER_KEY, 0) + 1;
            editor.putLong(LAUNCH_COUNTER_KEY, launchesCounter)

            var firstLaunch: Long = prefs.getLong(FIRST_LAUNCH_KEY, 0)
            if (firstLaunch == 0L) {
                firstLaunch = System.currentTimeMillis()
                editor.putLong(FIRST_LAUNCH_KEY, firstLaunch)
            }

            if (launchesCounter >= LAUNCHES_UNTIL_PROMPT) {
                if (System.currentTimeMillis() >= firstLaunch +
                    (DAYS_UNTIL_PROMPT * 24 * 60 * 60 * 1000)
                ) {
                    showRateDialog(mContext, editor)
                }
            }

            editor.apply()
        }

        fun showRateDialog(mContext: Context, editor: Editor) {
            Dialog(mContext).apply {
                setTitle("Rate $APP_TITLE")

                val ll = LinearLayout(mContext)
                ll.orientation = LinearLayout.VERTICAL

                TextView(mContext).apply {
                    text =
                        "If you enjoy using $APP_TITLE, please take a moment to rate it. Thanks for your support!"

                    width = 240
                    setPadding(4, 0, 4, 10)
                    ll.addView(this)
                }

                Button(mContext).apply {
                    text = "Rate $APP_TITLE"
                    setOnClickListener {
                        mContext.startActivity(
                            Intent(
                                Intent.ACTION_VIEW,
                                Uri.parse("market://details?id=$APP_NAME")
                            )
                        );
                        dismiss()
                    }
                    ll.addView(this)
                }

                Button(mContext).apply {
                    text = "Remind me later"
                    setOnClickListener {
                        dismiss()
                    };
                    ll.addView(this)
                }

                Button(mContext).apply {
                    text = "No, thanks"
                    setOnClickListener {
                        editor.putBoolean(DO_NOT_SHOW_AGAIN_KEY, true);
                        editor.commit()
                        dismiss()
                    };
                    ll.addView(this)
                }

                setContentView(ll)
                show()
            }
        }
    }
}

অনুকূল উত্তর

Rater.kt

class Rater {
    companion object {
        fun start(context: Context) {
            val prefs: SharedPreferences = context.getSharedPreferences(RATER_KEY, 0)
            if (prefs.getBoolean(DO_NOT_SHOW_AGAIN_KEY, false)) {
                return
            }

            val editor: Editor = prefs.edit()

            val launchesCounter: Long = prefs.getLong(LAUNCH_COUNTER_KEY, 0) + 1;
            editor.putLong(LAUNCH_COUNTER_KEY, launchesCounter)

            var firstLaunch: Long = prefs.getLong(FIRST_LAUNCH_KEY, 0)
            if (firstLaunch == 0L) {
                firstLaunch = System.currentTimeMillis()
                editor.putLong(FIRST_LAUNCH_KEY, firstLaunch)
            }

            if (launchesCounter >= LAUNCHES_UNTIL_PROMPT) {
                if (System.currentTimeMillis() >= firstLaunch +
                    (DAYS_UNTIL_PROMPT * 24 * 60 * 60 * 1000)
                ) {
                    showRateDialog(context, editor)
                }
            }

            editor.apply()
        }

        fun showRateDialog(context: Context, editor: Editor) {
            Dialog(context).apply {
                setTitle("Rate $APP_TITLE")
                LinearLayout(context).let { layout ->
                    layout.orientation = LinearLayout.VERTICAL
                    setDescription(context, layout)
                    setPositiveAnswer(context, layout)
                    setNeutralAnswer(context, layout)
                    setNegativeAnswer(context, editor, layout)
                    setContentView(layout)
                    show()       
                }
            }
        }

        private fun setDescription(context: Context, layout: LinearLayout) {
            TextView(context).apply {
                text = context.getString(R.string.rate_description, APP_TITLE)
                width = 240
                setPadding(4, 0, 4, 10)
                layout.addView(this)
            }
        }

        private fun Dialog.setPositiveAnswer(
            context: Context,
            layout: LinearLayout
        ) {
            Button(context).apply {
                text = context.getString(R.string.rate_now)
                setOnClickListener {
                    context.startActivity(
                        Intent(
                            Intent.ACTION_VIEW,
                            Uri.parse(context.getString(R.string.market_uri, APP_NAME))
                        )
                    );
                    dismiss()
                }
                layout.addView(this)
            }
        }

        private fun Dialog.setNeutralAnswer(
            context: Context,
            layout: LinearLayout
        ) {
            Button(context).apply {
                text = context.getString(R.string.remind_later)
                setOnClickListener {
                    dismiss()
                };
                layout.addView(this)
            }
        }

        private fun Dialog.setNegativeAnswer(
            context: Context,
            editor: Editor,
            layout: LinearLayout
        ) {
            Button(context).apply {
                text = context.getString(R.string.no_thanks)
                setOnClickListener {
                    editor.putBoolean(DO_NOT_SHOW_AGAIN_KEY, true);
                    editor.commit()
                    dismiss()
                };
                layout.addView(this)
            }
        }
    }
}

কনস্ট্যান্টস.কে.টি.

object Constants {

    const val APP_TITLE = "App Name"
    const val APP_NAME = "com.example.name"

    const val RATER_KEY = "rater_key"
    const val LAUNCH_COUNTER_KEY = "launch_counter_key"
    const val DO_NOT_SHOW_AGAIN_KEY = "do_not_show_again_key"
    const val FIRST_LAUNCH_KEY = "first_launch_key"

    const val DAYS_UNTIL_PROMPT: Int = 3
    const val LAUNCHES_UNTIL_PROMPT: Int = 3

}

স্ট্রিং.এক্সএমএল

<resources>
    <string name="rate_description">If you enjoy using %1$s, please take a moment to rate it. Thanks for your support!</string>
    <string name="rate_now">Rate now</string>
    <string name="no_thanks">No, thanks</string>
    <string name="remind_later">Remind me later</string>
    <string name="market_uri">market://details?id=%1$s</string>
</resources>

0

অ্যান্ড্রয়েডের নতুন ইন-অ্যাপ পর্যালোচনা সিস্টেম চালু হয়েছে যা বিকাশকারীদের অ্যাপটি ছাড়াই প্লে স্টোর পর্যালোচনার জন্য জিজ্ঞাসা করতে দেয়।

নকশা নির্দেশিকা এবং কখন একটি পর্যালোচনা কার্ড প্রদর্শন করতে হবে তা পরীক্ষা করতে, সরকারী দস্তাবেজটি দেখুন

https://developer.android.com/guide/playcore/in-app-review

বাস্তবায়ন:

  • প্লে-কোর লাইব্রেরিকে আপনার বিল্ড.gradle ফাইলের নির্ভরতা হিসাবে যুক্ত করুন।
implementation 'com.google.android.play:core:1.8.0'
  • একটি তৈরি করুন ReviewManager উদাহরণস্বরূপ এবং অনুরোধ করুন ReviewInfo অবজেক্ট। রিভিউআইনফো অবজেক্টটিকে প্রাক-ক্যাশেড করা হবে এবং তারপরে ব্যবহারকারীর কাছে রিভিউ কার্ড উপস্থাপন করতে " আরম্ভ করা হবে " প্রবর্তন করুন।

     private var reviewInfo: ReviewInfo? = null
    
     val manager = ReviewManagerFactory.create(context)
    
     val request = manager.requestReviewFlow()
    
     requestFlow.addOnCompleteListener { request ->
         if (request.isSuccessful) {
             //Received ReviewInfo object
             reviewInfo = request.result
         } else {
             //Problem in receiving object
             reviewInfo = null
         }
    
     reviewInfo?.let {
         val flow = reviewManager.launchReviewFlow(this@MainActivity, it)
         flow.addOnCompleteListener {
             //Irrespective of the result, the app flow should continue
         }
     }
    

দ্রষ্টব্য: ব্যবহারকারী আপনার অ্যাপ্লিকেশন বা গেমটি যথেষ্ট পরিমাণে অভিজ্ঞতার পরে পর্যালোচনা প্রবাহটি দেখানোর পরামর্শ দেওয়া হচ্ছে।

অ্যাপ্লিকেশন পর্যালোচনার জন্য কখন অনুরোধ করবেন:

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

এটি পরীক্ষা করার আগে কয়েকটি পয়েন্ট:

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

  • আপনি যদি আপনার অ্যাপ্লিকেশনটির জন্য অতীতে প্রতিক্রিয়া জানান তবে অ্যাপ-এর পর্যালোচনা এপিআই'র লঞ্চরভিউফ্লো কোনও পর্যালোচনা কার্ড উপস্থাপন করবে না । এটি কেবল একটি সাফল্য ইভেন্ট ট্রিগার করে।

  • কোটা সীমাবদ্ধতার কারণে, একটি লঞ্চরভিউফ্লো পদ্ধতিতে কল করা সর্বদা একটি ডায়ালগ প্রদর্শন করতে পারে না। এটি কোনও ক্লিক ইভেন্টের সাথে লিঙ্ক করা উচিত নয়।


0

অ্যাপ-এর পর্যালোচনার জন্য নীচে বাস্তবায়ন হয়েছে তা নিশ্চিত করুন:

implementation 'com.google.android.play:core:1.8.0'

অনক্রিয়েট

public void RateApp(Context mContext) {
    try {
        ReviewManager manager = ReviewManagerFactory.create(mContext);
        manager.requestReviewFlow().addOnCompleteListener(new OnCompleteListener<ReviewInfo>() {
            @Override
            public void onComplete(@NonNull Task<ReviewInfo> task) {
                if(task.isSuccessful()){
                    ReviewInfo reviewInfo = task.getResult();
                    manager.launchReviewFlow((Activity) mContext, reviewInfo).addOnFailureListener(new OnFailureListener() {
                        @Override
                        public void onFailure(Exception e) {
                            Toast.makeText(mContext, "Rating Failed", Toast.LENGTH_SHORT).show();
                        }
                    }).addOnCompleteListener(new OnCompleteListener<Void>() {
                        @Override
                        public void onComplete(@NonNull Task<Void> task) {
                            Toast.makeText(mContext, "Review Completed, Thank You!", Toast.LENGTH_SHORT).show();
                        }
                    });
                }

            }
        }).addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(Exception e) {
                Toast.makeText(mContext, "In-App Request Failed", Toast.LENGTH_SHORT).show();
            }
        });
    } catch (ActivityNotFoundException e) {
        e.printStackTrace();
    }
}

0

এই সমস্ত লাইব্রেরি এই পোস্টে সমস্যার সমাধান নয়। এই লাইব্রেরিগুলি গুগল প্লেতে অ্যাপটিতে কেবল একটি ওয়েবপৃষ্ঠা খুলবে। পরিবর্তে এই প্লে কোর লাইব্রেরিতে আরও নিয়মিত ইন্টারফেস রয়েছে।

সুতরাং আমি মনে করি এটিই সমস্যা, প্রোগুয়ার্ড: এটি কিছু ক্লাস পর্যাপ্ত পরিমাণে ছাড়িয়ে যায় https://stackoverflow.com/a/63650212/10117882

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