如果设备上缺少 HMS,防止@hmscore 显示初始弹出窗口

Prevent @hmscore to show initial popup if missing HMS on device

我正在使用 React Native 开发移动应用程序。

该应用程序已准备就绪并已完成 iOS 和 Android 平台。但是,我必须实现新功能才能使我的应用程序在华为设备(使用 HMS)上运行。

我目前正在实施 @hmscore/react-native-hms-push。该插件在华为设备上正常工作,但是,在 Android 设备上,例如三星,它导致我出现以下问题:当我在三星上启动我的应用程序时,出现提示,告诉我 HMS 服务未安装并且它询问我是否要安装它们 (Yes/No)。

我希望这个提示永远不会出现在非华为设备上。用户应该永远不会看到此提示并继续使用 FCM 推送。

事实上,如果在三星上安装了 HMS 服务,我在管理不同的 Push Token 和其他逻辑时会遇到问题。

如何防止@hmscore插件在启动应用程序时显示此提示?

出现这个提示是因为你在GMS手机上调用了HMS接口phone。您可以在GMS手机phone.And上使用HMS服务,当手机phone上的GMS不可用时,您可以下载HMS Core来使用该服务。

请参考:How to check Google Mobile Services enable in device or not?

华为已经为React native提供了部分HMS Core kit插件:

Reference documents

Push Kit plugins for React Native

Huawei Availability React Native Plugin 在android台设备上提供HMS Core APK检测能力。如果没有,插件提供导航到AppGallery以安装HMS Core。

详情可以关注Docs.

AndoridManifest.xml(库级别,@hmscore/react-native-hms-push)你会发现如下代码片段:

   <application>
       <service android:name="com.huawei.hms.rn.push.services.MessagingHeadlessService" />
       <service
               android:name="com.huawei.hms.rn.push.remote.HmsPushMessageService"
               android:exported="false">
           <intent-filter>
               <action android:name="com.huawei.push.action.MESSAGING_EVENT" />
           </intent-filter>
       </service>
       <meta-data
               android:name="push_kit_auto_init_enabled"
               android:value="true" />
   </application>

改变这个:

 <meta-data
                android:name="push_kit_auto_init_enabled"
                android:value="true" />

对此:

 <meta-data
                android:name="push_kit_auto_init_enabled"
                android:value="false" />

提示消失。但是,这是在库级别(在 node_modules 内)进行的更改。根据 manifest merge(Android Developer) 中的描述,可以在 AndroidManifest.xml(主级别)中覆盖此 属性。

最终修复是将此代码片段放入 AndroidManifest.xml(主要级别):

        <meta-data
                tools:replace="android:value"
                android:name="push_kit_auto_init_enabled"
                android:value="false" />

希望本文能帮助您避免应用程序启动时出现提示。