【问题标题】:Will react native work without Google Services on Huawei phone?华为手机上没有谷歌服务会反应原生工作吗?
【发布时间】:2021-04-08 22:48:11
【问题描述】:

很快,新的华为手机将停止支持 Google Play 和 Google 移动服务。

华为正在准备自己的生态系统,称为 HMS https://developer.huawei.com/consumer/en/service/hms/developer.html

他们的应用商店叫做“华为应用程序库”,文档在这里:https://developer.huawei.com/consumer/en/doc/30202

他们现在正在向开发人员(包括我)发送消息,鼓​​励他们在自己的商店中发布应用。他们声称他们只需要一个 APK 文件,不需要对应用程序进行任何更改。

我的问题是:

  • react-native 应用程序是否可以在不更改代码的情况下运行?
  • Firebase SDK 能正常工作吗?
  • 在另一个 Android 生态系统中维护应用的真正隐性成本是多少?

【问题讨论】:

    标签: android react-native google-play-services huawei-mobile-services


    【解决方案1】:

    华为已经发布了华为移动服务,目前正在逐步更新其服务,以与谷歌和苹果紧密匹配。至于你问的问题

    1. react-native 应用程序是否可以在不更改代码的情况下运行?

    可以,只要你能生成一个apk上传到他们的华为App Gallery。您不必更改任何代码。

    1. Firebase SDK 能正常工作吗?

    这取决于您尝试合并到您的应用程序中的服务类型,例如,如果您尝试使用 Firebase 提供的身份验证模块使用 Google 登录,那么它将仅在不包含 GMS 的手机上受支持( Google 移动服务),即华为 Mate 30 Pro。

    但是,如果您正在查看通知。谷歌有 Firebase Cloud Messaging,华为有华为推送通知。您可以使用其中任何一种,因为这取决于后端服务的架构,并且所有安卓设备都支持。

    1. 在另一个 Android 生态系统中维护应用的真正隐性成本是多少?

    这完全取决于您如何构建系统以及应用程序中所需的服务。假设您希望将华为登录包含在您的应用程序中,并且您还需要包含 HMS,但是您希望在华为应用程序库中维护这些,而对于 Google,您已经实现了 FCM 和 Google 登录和地图,那么您将拥有维护两个不同的分支,它们共享共同的核心功能,这既费时又费钱。

    如果应用程序仅使用纯粹依赖于逻辑且很少或没有 GMS/HMS 的裸功能,那么您不必为您的项目维护单独的分支,一个就足够了。您只需向 Google Play Publish 和 Huawei App Gallery 提交版本即可。

    如果您想为 GMS 和 HMS 使用一个存储库,那么您必须检查可用的服务以启用该功能。

    对于 GMS

    val gmsAvailable = GooglePlayServicesUtil.getInstance().isGooglePlayServicesAvailable(mContext)
    

    对于 HMS

    val hmsAvailable = HuaweiApiAvailability.getInstance().isHuaweiMobileServicesAvailable(mContext)
    

    所以当尝试使用谷歌登录或华为登录或任何其他服务时,它会是。

    if gmsAvailable {
       // execute GMS Code
    } else if hmsAvailable {
       // execute HMS Code
    }
    

    注意*以上代码是在 Kotlin 中

    【讨论】:

    • 对于第 2 项,如果我的应用当前使用 FCM 进行 Play Store 中部署的推送通知,如果我在华为应用程序库中上传相同的 APK,FCM 是否仍然有效?
    • 否,FCM 不适用于 HMS 设备。你必须使用这个 ReactNative 插件来进行 HMS 推送通知:developer.huawei.com/consumer/en/doc/development/…
    【解决方案2】:

    华为已经开始构建 HMS 生态系统,让顶级应用在其新设备上无需访问 GMS 即可使用,例如 Mate 30 和 P40 设备,从而改善这些设备上的用户体验。如果设备可以访问GMS,建议您使用GMS,如果设备无法访问GMS,建议您使用HMS。

    至于你的问题:

    1.

    React-Native 应用程序是否可以在不更改代码的情况下运行?

    如果您的应用使用任何用于 React Native 的 GMS 插件,例如 Google Sign-in 和 Firebase Cloud Messaging,您的应用可能无法在没有 GMS 访问权限的设备上正常运行。因此,您需要对您的应用程序进行一些代码更改。 华为为 React Native 提供了一些 HMS Core 套件插件。有关详细信息,请访问以下链接:

    Firebase SDK 能正常工作吗?

    这取决于您使用的 GMS 服务。例如,如果您的应用使用 GMS 的推送通知/位置/地图服务,您的应用可能无法正常运行。在这种情况下,您需要使用相关的 HMS SDK 来代替。您可以选择使用哪些HMS Core 服务。

    3.

    在另一个 Android 中维护应用的隐性成本是多少 生态系统?

    确实存在一些隐藏的工作量,例如维护代码,将您的应用发布到华为应用市场,以及同时修改 GMS 和 HMS 以提供新功能。当然,这取决于您的应用程序的复杂性。如果你的应用使用了很多 GMS 服务,工作量就比较大。如果您的应用使用的 GMS 服务较少,则工作量相对较低。为了减少您的工作量,建议您在项目中同时使用 GMS 和 HMS。方法如下:

    检查设备是否supports GMS

    检查设备是否supports HMS

    在您的应用中,您可以使用以下伪代码同时使用 GMS 和 HMS:

    if isGMSAvailable {
       // execute GMS Code
    } else if isHMSAvailable {
       // execute HMS Code
    }

    这样做可以减少后续维护代码和添加新功能的工作量。

    【讨论】:

      【解决方案3】:

      关于:

      Firebase SDK 能正常工作吗?

      您可以使用华为提供的名为 QuickHMS 的服务 - 您只需搜索依赖项/框架/库并查看它是否可以在 HMS 设备上运行:https://quickhms.com/en/compatibility-check/

      当前 ReactNative HMS 插件列表可以在这里找到:https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-Library-V1/reactnative-plugin-0000001050155850-V1

      【讨论】:

        猜你喜欢
        • 2021-01-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-05-05
        • 2020-03-02
        • 2016-11-04
        • 2017-10-11
        相关资源
        最近更新 更多