【问题标题】:How to detect iPhone X (Ionic - cordova app)如何检测 iPhone X(Ionic - cordova 应用程序)
【发布时间】:2018-03-24 02:32:30
【问题描述】:

我需要对我的应用进行一些更改,但仅限于 iPhone X。

该应用基于 Apache Cordova(使用 Ionic 框架)。

是否有 cordova 插件 来检测 iPhone X?如果答案是否定的,那么在 javascript 中了解用户是否拥有 iPhone X 的最佳方法是什么?

谢谢

【问题讨论】:

  • 你有什么想法?
  • @str 真的重要吗?
  • @Jackowski 是的。根据必须更改的内容,有比首先检测设备更好的方法来实现它。
  • 实际上我需要为这个设备添加另一个部分到应用程序。不幸的是,这些东西并不依赖于新的 SDK。

标签: javascript cordova ionic-framework iphone-x


【解决方案1】:

修复@Jacksonkr 的答案,并感谢@Made in Moon 提供有关 iphone10.3 和 iphone10.6 型号的信息。您可以使用它来获取设备 iphone X 及更高版本

export default () => {
  try {
    const exceptions = ['iPhone10,3', 'iPhone10,6'];
    const iphoneModel = Device.model;
    const m = iphoneModel.match(/iPhone(\d+),?(\d+)?/);
    const model = +m[1];

    if (model >= 11) {
      // is iphone X
      return true;
    } else if (model === 10) {
      // iPhone10,3 = iPhone X
      // iPhone10,4 = iPhone 8
      // iPhone10,5 = iPhone 8 Plus
      // iPhone10,6 = iPhone Xs
      return exceptions.includes(iphoneModel);
    }
  } catch (e) {
    console.log(e);
  }

  return false;
};

【讨论】:

    【解决方案2】:

    我把这个 es6 放在一起检查 iphone 10 及以上

    const isIphoneX = () => {
        try {
            const iphoneModel = window.device.model;
            const m = iphoneModel.match(/iPhone(\d+),?(\d+)?/);
            const model = +m[1];
    
            if (model >= 10) { // is iphone X
                return true;
            }
        } catch (e) { }
    
        return false;
    }
    

    ** 编辑 **

    我相信我使用的是cordova-plugin-device,因为我的项目不是离子应用程序。我重写了正则表达式,因此它也可以与 ionic.Platform.device().model 一起使用。

    【讨论】:

    • 你觉得不应该是const model = +m[0]; ?
    • @AlexisCaffa javascript 总是将完整匹配转储到 0 索引中,所以我使用1 索引作为第一个反向引用(在括号中)
    • hai @Jacksonkr,并非所有型号> = 10 是 iphone X 及更高版本。 iPhone 8 (iPhone10,4) 和 8 Plus (iPhone10,5) 有例外。
    【解决方案3】:

    我使用内置的 ionic.Platform.device() 方法执行了以下操作。如果您已经在使用 ionic,我认为没有必要安装全新的插件。

    let model = ionic.Platform.device().model
    $scope.deviceIphonex = model.includes('iPhone10')
    

    然后我可以在我的应用程序中的任何地方使用它,并专门为 iphone X 做一些事情。

    【讨论】:

      【解决方案4】:

      对于科尔多瓦

      像这样使用cordova-plugin-device插件:

      window.device.model

      将给予:

      iPhone10,3iPhone10,6

      doc:

      对于浏览器

      this comment

      【讨论】:

        【解决方案5】:

        检查:var deviceInformation = ionic.Platform.device();

        来自Ionic bundle.js

        /**
             * @ngdoc method
             * @name ionic.Platform#device
             * @description Return the current device (given by cordova).
             * @returns {object} The device object.
             */
            device: function() {
              return window.device || {};
            },
        

        同时检查cordova-plugin-device

        属性

        device.cordova       // returns CDV_VERSION
         device.model
         device.platform     // always returns iOS
         device.uuid
         device.version
         device.manufacturer // always returns  Apple
         device.isVirtual    // not relevant
         device.serial 
        

        这个插件调用CDVDevice.m -> UIDevice 所以如果你仍然无法获取iPhone X 值得找到如何在Obj-C中检测它并更改CDVDevice.m


        还请检查此质量检查:iOS devices return different format device model, why?

        【讨论】:

        • device.model 是否返回“iPhone X”?
        • @johnborges 好,你自己试试吧:)
        • 使用模拟器返回“x86”,我们该如何测试呢?也在看这个问题 (link) 似乎无法检测到 iPhone X
        • @ErnestoSchiavo 在真机上运行,​​模拟器总是返回x86x86_64
        • @DaveAlden iPhoneX
        猜你喜欢
        • 1970-01-01
        • 2015-06-07
        • 1970-01-01
        • 2018-01-31
        • 1970-01-01
        • 1970-01-01
        • 2017-09-03
        • 2018-10-13
        • 1970-01-01
        相关资源
        最近更新 更多