如何检测 iPhone X (Ionic - cordova app)

How to detect iPhone X (Ionic - cordova app)

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

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

是否有 cordova 插件 来检测 iPhone X?如果答案是否定的,这是了解用户是否有 iPhone X in javascript?

的最佳方法

谢谢

检查: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?

科尔多瓦

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

window.device.model

将给予:

iPhone10,3iPhone10,6

参见doc

对于浏览器

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

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

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

我把这个 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 一起使用。

修复@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;
};