【问题标题】:How to forbid Tablet usage in expo / react-native?如何禁止在 expo / react-native 中使用平板电脑?
【发布时间】:2020-08-13 12:56:14
【问题描述】:

我已经为智能手机开发了一个带有 Expo 和 react-native 的应用程序——现在我正在尝试将“.aab”文件上传到 Google Play 商店——但它似乎也可用于平板电脑和可穿戴设备。我真的不知道如何将其编码到“app.json”或代码本身中,只能支持智能手机。

此外,甚至不能从智能手机以外的任何其他设备下载应用程序,因为这会导致用户体验不佳

我尝试了设备目录,但只能选择按处理器或 RAM 进行阻止 - 有没有简单的 goto 解决方案?

【问题讨论】:

  • 您可以使用react-native-device-infoisTablet方法在应用启动时知道是否有平板,并显示应用不支持平板的消息。
  • 但是他们仍然可以下载它吗?并且只看到类似“它不受支持...”的内容
  • 是的,没错。您可以在 Google Play 商店 中排除设备,但不能按通用外形尺寸,这意味着您必须在排除列表中添加所有平板电脑型号:View & restrict your app's compatible devices .

标签: android react-native google-play expo


【解决方案1】:

要禁止您的应用支持平板电脑/电视,您只需将以下标签添加到AndroidManifestFile.xml

如果您使用的是expo,请尝试使用eject 并执行此操作。

<manifest ... >
    <supports-screens android:smallScreens="true"
                      android:normalScreens="true"       
                      android:largeScreens="false"         <- forbid for tablets
                      android:xlargeScreens="false"/>      <- forbid for tv
    ...
</manifest>

注意:以下是博览会所说的,所以不要担心弹出(如果你不想修改原生文件),但要完全了解。

退出后,您的所有 JS 文件都将保持不变,但我们会在您的项目文件夹中另外创建 ios 和 android 目录。这些将分别包含 Xcode 和 Android Studio 项目,它们将依赖于 React Native 和 Expo 的核心 SDK。 您仍然可以使用 Expo CLI 开发和测试您的项目,并且您仍然可以以相同的方式发布您的 Expo JS 代码。但是,如果您添加未包含在 Expo 中的本机依赖项,​​其他用户将无法使用主 Expo 应用程序运行您的应用程序的这些功能。您需要自己分发本机项目。

【讨论】:

    【解决方案2】:

    您好,我对 React 原生框架一点也不熟悉,但我快速搜索了一下,您的项目中一定有一个 AndroidManifest.xml 文件;最有可能在android &gt; app &gt; src &gt; main

    在您设法找到AndroidManfiest.xml 文件的地方或任何地方,您可以通过添加以下内容来限制您的应用仅支持正常的屏幕尺寸:

    <supports-screens android:normalScreens="true"
                      android:largeScreens="false"
                      android:xlargeScreens="false"
                      android:largestWidthLimitDp="600"/>
    
    

    更多关于&lt;supports-screens&gt;标签here

    更多关于屏幕尺寸的信息here 如果 600 不是您想要的,请看这里,也许您想支持一些平板尺寸;)

    当您在清单文件中声明它们时,上传的 apk 或捆绑包会自动显示给仅具有选定屏幕配置的设备。您甚至可以在 Play 管理中心的 Device Catlog 部分查看您的应用支持的设备。

    我希望它有所帮助。告诉我。

    【讨论】:

    • 我没有 AndroidManifest.xml,因为它是一个由 expo 管理的项目(对不起,我对此很陌生)
    • 哦。我刚刚才知道 Expo 是建立在 React native 之上的,并且不允许对原生代码进行太多修改。 stackoverflow.com/a/44270825/3283350如果你绝对想做你提到的事情,也许这会有所帮助:docs.expo.io/expokit/eject
    【解决方案3】:

    您也可以在 Play-store 上发布您的应用时移除设备。关注this 文档。

    查看您的应用支持和排除的设备:

    登录您的 Play 管理中心。 选择一个应用程序。 在左侧菜单中,单击发布管理 > 设备目录。 如果您还没有,请查看并接受服务条款。 选择全部、支持或排除选项卡。 如果您想将设备列表下载为 CSV 文件,请点击页面右侧附近的下载设备列表。

    【讨论】:

      【解决方案4】:

      您可以通过在 app.json 中添加 ios 配置并设置 "supportsTablet": false

      来移除对平板电脑的支持

      你可以看到documenatation

      app.json

      {
        "expo": {
          "name": "appname",
          "description": "No description",
          //Any Other properties
          "ios": {
            "supportsTablet": false
          }
        }
      }
      

      注意:这将在您弹出ExpoKit中的项目时起作用

      您还可以通过expo-devices 包在运行时使用平板电脑

      import * as Device from 'expo-device';
      
      consle.log(Device.DeviceType);// tablet
      

      Device.DeviceType output Ref

      您也可以在退出 expo 后通过更改 AndroidManifest.xml 文件来停止对 android 的支持

      <manifest ... >
      <compatible-screens>
          <!-- all small size screens -->
          <screen android:screenSize="small" android:screenDensity="ldpi" />
          <screen android:screenSize="small" android:screenDensity="mdpi" />
          <screen android:screenSize="small" android:screenDensity="hdpi" />
          <screen android:screenSize="small" android:screenDensity="xhdpi" />
          <screen android:screenSize="small" android:screenDensity="xxhdpi" />
          <screen android:screenSize="small" android:screenDensity="xxxhdpi" />
          <!-- all normal size screens -->
          <screen android:screenSize="normal" android:screenDensity="ldpi" />
          <screen android:screenSize="normal" android:screenDensity="mdpi" />
          <screen android:screenSize="normal" android:screenDensity="hdpi" />
          <screen android:screenSize="normal" android:screenDensity="xhdpi" />
          <screen android:screenSize="normal" android:screenDensity="xxhdpi" />
          <screen android:screenSize="normal" android:screenDensity="xxxhdpi" />
      </compatible-screens>
      </manifest>
      

      【讨论】:

      • 我如何在 android 上使用它?
      • 非常感谢,我有 expo 托管项目,但我找不到 AndroidManifest.xml 文件,我先做 expo build:android -t app:bundle 然后它为我创建了捆绑包.. .
      • @Kev1n91 如果你想在 android manifest docs.expo.io/introduction/managed-vs-bare/…987654325@ 中删除对平板电脑的支持,你必须做 expo 弹出
      • 如果您想在托管项目中删除对平板电脑的支持,然后您可以使用 expo-device 检查它是否是平板电脑,在这种情况下,您可以退出应用程序编程
      猜你喜欢
      • 1970-01-01
      • 2020-10-19
      • 1970-01-01
      • 2012-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多