【问题标题】:How do I detect which iOS device my user is using?如何检测我的用户正在使用哪个 iOS 设备?
【发布时间】:2012-08-26 19:29:59
【问题描述】:

我正在寻找一种方法来检测运行我的应用的设备。我对软件版本不感兴趣。我搜索了很多问题,但没有一个(令人惊讶地)满足我的需求,原因如下:

解决方案 1:

NSString *deviceType = [UIDevice currentDevice].model;

这不起作用,因为它只给了我“iPad”。我想知道是 iPad、iPad 2、新 iPad、iPhone 3GS、iPhone4 等。

解决方案 2: 不测试设备类型,检查单个功能

这不适用,因为我希望这些数据收集用户统计信息,而不是执行任何特定于设备的操作。

解决方案 3: 使用 UIDeviceHardware 发现 here

这段代码看起来已经过时了,而且似乎访问了设备上的私人数据。甚至存在争议,使用它的应用程序是否会获得批准。更重要的是,我不知道它是如何工作的 :) 还找到了另一种选择 here

我提到的最后两个可以安全使用吗?他们未来是否合规?它们是否符合 Apple 的审批规则?

或者有没有其他方法可以解决这个问题?

提前致谢。

【问题讨论】:

    标签: iphone objective-c ipad device uidevice


    【解决方案1】:

    从技术上讲,[UIDeviceHardware platform] 应该可以正常工作,您应该按原样将其发送到您的服务器。您还应该将 iOS 版本连同平台 id 一起发送,以免平台 id 在未来的操作系统中发生变化。

    因为这里使用的函数sysctlbyname 有据可查,所以我认为Apple 不能使用规则2.5 来对付你。但是,仍然存在规则编号 17.1:

    17.1 未经用户事先许可并为用户提供访问权限,应用程序不得传输有关用户的数据 有关如何以及在何处使用数据的信息

    设备平台是否与用户有关是有争议的。我的建议是你应该提交应用程序,假设你没有违反 17.1 并且永远不要提及这一点。审阅者很可能不知道您在幕后做什么。

    【讨论】:

    • 谢谢。我正在汇总我收集的数据,而不是将其绑定到用户,所以我认为这也不违反 17.1 规则。我也确信他们甚至不会注意到。
    【解决方案2】:

    Apple 在其示例代码中使用了这样的 API。要引用LargeImageDownsizing 示例项目,在文件LargeImageDownsizingViewController.m 的第83 行开始:

    可以选择适当的生成图像大小和图块大小, 但留给开发人员作为练习。请注意,该设备 类型/版本字符串(例如“iPhone2,1”可以在运行时确定 通过使用 sysctlbyname 函数:

    size_t size;
    sysctlbyname("hw.machine", NULL, &size, NULL, 0);
    char *machine = malloc(size);
    sysctlbyname("hw.machine", machine, &size, NULL, 0);
    NSString* _platform = [NSString stringWithCString:machine encoding:NSASCIIStringEncoding];
    free(machine);
    

    在我的情况下,对于 iPod touch 第 4 代,_platform 将是 iPod4,1

    此代码是您发布的两个 Github 示例的根目录。

    【讨论】:

    • 谢谢。现在我知道它是安全的,我将它包含在我的项目中并解决了问题。
    【解决方案3】:

    您提到的 UIDeviceHardware 已经足够好,但有点过时了。 你可以试试this 让它更像苹果风格,所以他们可能会更喜欢它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多