如何检测 iPhone X(Ionic - Cordova 应用程序)

15

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

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

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

谢谢


你有什么想要的更改? - str
@str 真的很重要吗? - Hedegare
2
@Jackowski 是的,它可以。根据需要更改的内容,有比首先检测设备更好的方法来实现它。 - str
实际上,我需要为这个设备添加另一个部分到应用程序中。不幸的是,这些事情并不依赖于新的 SDK。 - Ernesto Schiavo
5个回答

7

检查: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设备返回不同格式的设备型号,为什么?


device.model 返回的是 "iPhone X" 吗? - johnborges
@johnborges 好的,你自己试试吧 :) - Maxim Shoustin
2
使用模拟器返回“x86”,我们该如何测试呢?此外,查看这个问题(链接),似乎无法检测到iPhone X。 - Ernesto Schiavo
1
@ErnestoSchiavo 在真实设备上运行它,模拟器总是会返回 x86x86_64 - Maxim Shoustin
4
@DaveAlden iPhoneX - Maxim Shoustin
显示剩余5条评论

5

5
我写了这个 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应用程序。我重新编写了正则表达式,以便它也可以与ionic.Platform.device().model一起使用。


你觉得应该是 const model = +m[0]; 吗? - AlexisCaffa
1
@AlexisCaffa,JavaScript 总是将完整匹配转储到 0 索引中,因此我使用 1 索引来表示第一个反向引用(即在括号中的内容)。 - Jacksonkr
嗨 @Jacksonkr,不是所有型号> = 10的手机都是iPhone X及以上。 iPhone 8(iPhone10,4)和8 Plus(iPhone10,5)是例外情况。 - Alauddin Afif Cassandra

3

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

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

我可以在我的应用程序中任何位置使用它,并为iPhone X执行特定的操作。


0

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接