在应用程序内通知用户新版本可用

时间:2013-05-09 16:24:50

标签: android google-play

我在市场上有一个Android应用程序,我注意到当我发布新版本时,应用程序更新可能需要一段时间。

我所希望的是谷歌使用谷歌Chrome应用程序所做的事情(可能只是不确定的测试版)。

我想要做的是当用户启动我的应用程序时,它可以检查是否有新版本可用,如果有,只需在底部显示一条小消息,通知用户有可供下载的新版本。如果他们点击它,那么用户将直接进入游戏商店内的应用程序,以便他们可以开始更新。

这是怎么做到的?我没有找到任何关于Android的东西,我发现了一些与iOS相关的东西,但显然对我没有好处。

感谢您提供的任何帮助。

10 个答案:

答案 0 :(得分:8)

当您可以向Google Play查看最新版本的应用时,没有API或服务。

相反,您应该在服务器上维护最新版本代码,并让您的应用程序定期检查它自己的版本代码。如果服务器上的版本代码较高,那么您的应用程序需要更新,您可以相应地告诉用户。

答案 1 :(得分:5)

真诚地,我认为这不值得努力。我的第一个建议是忘记它,因为Play商店将负责更新通知。

如果您真的想花时间和精力,请查看:

答案 2 :(得分:1)

答案 3 :(得分:0)

如何检查Playstore上是否有新版本的应用程序,通知用户在Android中使用新版本更新旧应用程序并显示是或否以获取它们的Playstore。只需按照说明操作,将附加的代码放入您的应用中,即可检查新版本的应用是否可用。此代码每天检查应用程序版本,如果Playstore上有任何新的版本更新,则会在应用程序启动时显示弹出窗口以进行更新。

if (newVersion > curVersion) {
                    /* Post a Handler for the UI to pick up and open the Dialog */
                    mHandler.post(showUpdate);
                } 
   private Runnable showUpdate = new Runnable(){
           public void run(){
            new AlertDialog.Builder(MainActivity.this)
            .setIcon(R.drawable.ic_launcher)
            .setTitle("Update available")
            .setMessage("An update for Live Share Tips is available on Play Store.")
            .setNegativeButton("Update now", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int whichButton) {
                            /* User clicked OK so do some stuff */
                        easyTracker.send(MapBuilder.createEvent("App update",
                                "Update now", " ", null).build());
                            Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=com.appuonline.livesharetips"));
                            startActivity(intent);
                    }
            })
            .setPositiveButton("Later", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int whichButton) {
                            /* User clicked Cancel */
                        easyTracker.send(MapBuilder.createEvent("Update_Later",
                                "Update later", " ", null).build());
                    }
            })
            .show();
           }
    }; 

下载完整代码[url]:http://androidaone.com/11-2014/notify-users-update-app-new-version-available-playstore/

答案 4 :(得分:0)

我们使用的是这样做..

我向应用程序发送云(包含新的应用程序版本)并在应用程序中处理它。在处理这个云时我查看天气我在云中的当前版本和版本与我向用户定期弹出一个弹出窗口来定期更新谷歌播放中的应用程序..

答案 5 :(得分:0)

这可能对其他人有用。我尝试过这种方式

首先创建一个类,该类具有几种方法来启动Play商店并以这种方式获取应用程序版本代码和版本信息

public class CheckForUpdate {

public static final String ACTION_APP_VERSION_CHECK="app-version-check";

public static void launchPlayStoreApp(Context context)
{

    final String appPackageName = context.getPackageName(); // getPackageName() from Context or Activity object
    try {
        context.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + appPackageName)));
    } catch (android.content.ActivityNotFoundException anfe) {
        context.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=" + appPackageName)));
    }

}

public static int getRemoteVersionNumber(Context context)
{
    int versionCode=0;
    try {
        PackageInfo pInfo = context.getPackageManager().getPackageInfo(context.getPackageName(), 0);
        String version = pInfo.versionName;
        versionCode=pInfo.versionCode;
    } catch (PackageManager.NameNotFoundException e) {
        e.printStackTrace();
    }
    return versionCode;
}

}

第二个创建另一个具有sharedpreference方法的util类,以这种方式保存和检索版本代码

public class PreferenceUtils {

// this is for version code
private  final String APP_VERSION_CODE = "APP_VERSION_CODE";
private  SharedPreferences sharedPreferencesAppVersionCode;
private SharedPreferences.Editor editorAppVersionCode;
private static Context mContext;

public PreferenceUtils(Context context)
{
    this.mContext=context;
    // this is for app versioncode
    sharedPreferencesAppVersionCode=mContext.getSharedPreferences(APP_VERSION_CODE,MODE_PRIVATE);
    editorAppVersionCode=sharedPreferencesAppVersionCode.edit();
}

public void createAppVersionCode(int versionCode) {

    editorAppVersionCode.putInt(APP_VERSION_CODE, versionCode);
    editorAppVersionCode.apply();
}

public int getAppVersionCode()
{
    return sharedPreferencesAppVersionCode.getInt(APP_VERSION_CODE,0); // as default version code is 0
}

}

最后,您可以在启动器活动或您想要在其中显示警报对话框的任何其他活动中使用该应用程序,以更新应用程序。

public class DashboardActivity extends AppCompatActivity {


@Override
protected void onCreate(Bundle savedInstanceState) {
   ...........
    //check whether app is first time launched
    AppLaunchChecker.onActivityCreate(this);
    alertAppUpdate();
}

以这种方式实施alertAppUpdate()方法

private void alertAppUpdate()
{

int remoteVersionCode=CheckForUpdate.getRemoteVersionNumber(this);
PreferenceUtils preferenceUtils=new PreferenceUtils(this);
if(AppLaunchChecker.hasStartedFromLauncher(this))
{
    preferenceUtils.createAppVersionCode(remoteVersionCode);
    Log.i("First time","First time app is launched");
}
int existingVersionCode= preferenceUtils.getAppVersionCode();
if(remoteVersionCode>existingVersionCode)
{
    /*
      **
      * app is updated, alert user to update app from playstore 
      * if app is updated then only save the version code in preferenceUtils
      *
     */


    AlertDialog.Builder dialogBuilder=AlertDialogBox.getAlertDialogBuilder(this,"Update available","Do you want to update your app now?");
    dialogBuilder.setPositiveButton("Update Now", (dialogInterface, i) -> {
        CheckForUpdate.launchPlayStoreApp(this);
        Log.i("app update service","app is needed to update");
        preferenceUtils.createAppVersionCode(remoteVersionCode);
    });
    dialogBuilder.setNegativeButton("Later",(dialogInterface,i)->{

    });    

    dialogBuilder.show();
    }
}

如果有任何错误,请告诉我。谢谢。

答案 6 :(得分:0)

我使用Firebase Remote配置做到了。这是我的方法,称为一次-

private void checkAndShowUpdateAvailableAlert() {
    try {
        String VERSION = "version";
        String NEW_FEATURES = "newFeatures";

        if (singleton.isUpdateAvailable()) {
            FirebaseRemoteConfig firebaseRemoteConfig = FirebaseRemoteConfig.getInstance();
            FirebaseRemoteConfigSettings configSettings = new FirebaseRemoteConfigSettings.Builder()
                    .setDeveloperModeEnabled(BuildConfig.DEBUG)
                    .build();
            firebaseRemoteConfig.setConfigSettings(configSettings);

            Map<String, Object> defaultValueHashMap = new HashMap<>();
            defaultValueHashMap.put(VERSION, BuildConfig.VERSION_CODE);
            defaultValueHashMap.put(NEW_FEATURES, "");

            firebaseRemoteConfig.setDefaults(defaultValueHashMap);

            long cacheExpiration = 3600; // 1 hour in seconds.
            if (firebaseRemoteConfig.getInfo().getConfigSettings().isDeveloperModeEnabled()) {
                cacheExpiration = 0;
            }

            firebaseRemoteConfig.fetch(cacheExpiration)
                    .addOnCompleteListener(this, new OnCompleteListener<Void>() {
                        @Override
                        public void onComplete(@NonNull Task<Void> task) {
                            if (task.isSuccessful()) {
                                // showing update alert only one time
                                singleton.setUpdateAvailable(false);

                                firebaseRemoteConfig.activateFetched();
                                long remoteVersionCode = firebaseRemoteConfig.getLong(VERSION);
                                String newFeatures = firebaseRemoteConfig.getString(NEW_FEATURES);
                                Log.d(TAG, "Remote version: " + remoteVersionCode
                                        + ", New Features: " + newFeatures);
                                if (remoteVersionCode > BuildConfig.VERSION_CODE
                                        && newFeatures != null
                                        && !newFeatures.isEmpty()) {
                                    contextUtility.showUpdateAlert(newFeatures);
                                }

                            } else {
                                Log.e(TAG, "Remote config fetch failed");
                            }
                        }
                    });
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

步骤-

我在Firebase项目中维护两个键值对-

1. newFeatures and 
2. version

版本实际上是versionCode(整数),与我最新的版本versionCode同步。当我发布任何新版本时,我将从Firebase控制台更新此值。

在应用程序中,我检查一次(该值),如果该值较大,则会向用户显示更新警报。 newFeatures是向用户显示what's new的附加键。

要查看完整的源代码-https://github.com/varunon9/SaathMeTravel

答案 7 :(得分:0)

答案 8 :(得分:0)

您可以使用 google play 核心库来实现这一点。

首先,您需要在 gradle 依赖项中包含该库:

implementation "com.google.android.play:core-ktx:1.7.0"

然后你可以像这样在你的 Application 类或 MainActivity 类中使​​用它:

private fun checkFroUpdates() {
    val appUpdateManager = AppUpdateManagerFactory.create(this)

    val appUpdateInfoTask = appUpdateManager.appUpdateInfo

    appUpdateInfoTask.addOnSuccessListener { appUpdateInfo ->

        if (appUpdateInfo.updateAvailability() == UpdateAvailability.UPDATE_AVAILABLE) {
            when {
                appUpdateInfo.isUpdateTypeAllowed(AppUpdateType.IMMEDIATE) -> appUpdateManager.startUpdateFlowForResult(
                        appUpdateInfo,
                        AppUpdateType.IMMEDIATE,
                        this,
                        -1
                )

                appUpdateInfo.isUpdateTypeAllowed(AppUpdateType.FLEXIBLE) -> appUpdateManager.startUpdateFlowForResult(
                        appUpdateInfo,
                        AppUpdateType.FLEXIBLE,
                        this,
                        -1
                )
            }
        }
    }
}

来源:https://developer.android.com/guide/playcore/in-app-updates/kotlin-java

答案 9 :(得分:-1)

    PackageInfo packageInfo = getPackageManager().getPackageInfo(getPackageName(), 0);
                if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.P) {
                    va = String.valueOf(packageInfo.getLongVersionCode());
                } else {
                    va = String.valueOf(packageInfo.versionCode);
                }
//get last version from server like below code and comparison whit va 
                sv = new serviceApi(this);
                sv.getVC("VERC_market", new setver.OnVC() {
                    @Override
                    public void onReceived(String vc) {
                        int vc1 = Integer.parseInt(vc);
                        int va1 = Integer.parseInt(va);
                        if (va1 < vc1) {
                            new AlertDialog.Builder(DemoPrimaryVocabGrouping.this)
                                    .setMessage("hi pls give last version ")
                                    .setPositiveButton("update", new DialogInterface.OnClickListener() {
                                        public void onClick(DialogInterface dialog, int which) {
                                            Intent goToMarket = new Intent(Intent.ACTION_VIEW).setData(Uri
                                                    .parse("your app link in market"));
                                            startActivity(goToMarket);
                                        }
                               `enter code here`     })
                                    .setNegativeButton("no ", null)
                                    .setIcon(android.R.drawable.ic_dialog_alert)
                                    .show();
                        }
                    }
                });