【问题标题】:How to implement Android playstore in-app update with react-native如何使用 react-native 实现 Android Playstore 应用内更新
【发布时间】:2022-04-26 03:58:35
【问题描述】:

如何使用我的 react-native 应用实现 Play 商店应用内更新,该应用已经在 Play 商店上线?

我已经通过 API 调用实现了代码推送和内部版本检查,以强制用户更新应用程序。

使用 Codepush:代码推送仅适用于 javascript 更改。但是,在很多情况下,当原生代码发生变化时,我们需要更新整个应用程序。

使用 API 检查:我们需要观察更新何时上线,并更新保存在后端的版本号以强制用户更新应用。

虽然这两种解决方案都有点不完整,但我想实现 play-store 应用内更新的优雅方法,但找不到如何完成它的线索。

【问题讨论】:

    标签: android react-native


    【解决方案1】:

    我没有为此找到任何 react-native 包,所以我必须自己实现它。

    您可以查看完整教程here 及以下可下载文件here

    但简而言之,这是您需要做的。

    1. 使用Android Studio 在您的 react-native 项目中打开 android 文件夹,并在 build.gradle(app) 文件的依赖项部分末尾添加 implementation 'com.google.android.play:core:1.7.3'。如下所示,
    dependencies {
        implementation fileTree(dir: "libs", include: ["*.jar"])
        //noinspection GradleDynamicVersion
        implementation "com.facebook.react:react-native:+"  // From node_modules
    
    
        .......
        implementation 'com.google.android.play:core:1.7.3' // add it at the end
    }
    
    

    添加依赖后点击同步。

    1. 下载InAppUpdateModule.javaInAppUpdatePackage.java文件,放在MainActivity.java(android/app/src/main/java/<package>/)的同一目录下
    2. InAppUpdateModule.javaInAppUpdatePackage.java 中的包名更改为您的项目包名。
    3. 现在打开MainApplication.java 并将我们的InAppUpdatePackage 添加到getPackages 方法中,如下所示,
            @Override
            protected List<ReactPackage> getPackages() {
              @SuppressWarnings("UnnecessaryLocalVariable")
              List<ReactPackage> packages = new PackageList(this).getPackages();
              // Packages that cannot be autolinked yet can be added manually here, for example:
               //  packages.add(new MyReactNativePackage());
                packages.add(new InAppUpdatePackage());
              return packages;
            }
    
    1. 下载 InAppUpdate.js 并将其放入您的 react-native 项目中。
    2. InAppUpdate.js 导入到任何js 文件中,无论您想在哪里使用。并像下面这样使用它。
      componentDidMount () {
        InAppUpdate.checkUpdate() // this is how you check for update 
      }
    
    1. 就是这样。

    您可以从here下载所有文件

    【讨论】:

    • 我已经按照这些步骤进行操作,最后在使用内部应用程序共享中的链接进行调试时,它重定向到我的应用程序打开的 Playstore,但其中缺少安装按钮!我的应用程序仅在美国受支持。我正在尝试从不同的国家。这可能是原因吗?请澄清,谢谢
    • 我在我的博客上回复了。您没有看到来自不同国家/地区的安装按钮是正常的。
    • 这看起来很有希望。我会试试这个。
    • @Naroju 感谢您的澄清。使用 VPN 连接到商店后,它工作得非常好!
    • @Naroju 我按照这些步骤上传了两个版本到内部应用共享。上传新版本后,我可以看到按钮从“打开”变为“更新”。但是,当我打开我的应用程序时,不会出现弹出窗口。我尝试了很多次,但似乎无法显示弹出窗口。你知道为什么会这样吗?
    【解决方案2】:

    有一个相当新的包可以做到这一点:sp-react-native-in-app-updates

    它还通过向用户提示重定向到 App Store 的本机警报来处理 iOS 案例。

    【讨论】:

      【解决方案3】:

      多一个选项(比 APi 检查更好): 从 Play 商店查看最新版本并采取相应措施,https://github.com/kimxogus/react-native-version-check

      VersionCheck.needUpdate()
        .then(async res => {
          console.log(res.isNeeded);    // true
          if (res.isNeeded) {
            Linking.openURL(await VersionCheck.getStoreUrl());  // open store if update is needed.
          }
        });
      

      【讨论】:

      • 如果我将更新的 apk 放到 Play 商店,它会自动检测每台设备上的更新吗?
      • 由于这是从设备中的应用程序触发的代码的一部分,它应该检查播放商店版本
      • -1 用于该库。您可以看到它通过解析应用列表中的 HTML 实现了 google play here 的版本检查。似乎没有任何出色的软件包可以包装 Play 商店应用内更新 API,因此 naroju 的回答似乎是目前最好的方法。
      【解决方案4】:

      您可以使用sp-react-native-in-app-updates 库进行inapp 更新。

      npm i sp-react-native-in-app-updates
      

      这是一个适用于 iOS 和 Android 的 react-native 原生模块,它会检查商店(播放/应用)是否有新版本的应用,并可以提示用户进行更新。

      它通过 Android 上的 Play-Core 使用嵌入式应用内更新(从应用程序内本地检查和下载 google play 补丁),并在 iOS 上使用 react-native-siren(检查并导航用户到 AppStore )。

      【讨论】:

        猜你喜欢
        • 2016-01-04
        • 1970-01-01
        • 2015-07-30
        • 2017-02-26
        • 1970-01-01
        • 2017-02-01
        • 1970-01-01
        • 2023-02-22
        • 1970-01-01
        相关资源
        最近更新 更多