ABGetMe 1.0.0

ABGetMe 1.0.0

测试已测试
Lang语言 Obj-CObjective C
许可证 MIT
发布上次发布2015年3月

Cédric Luthi 维护。



ABGetMe 1.0.0

  • Cédric Luthi

关于

与 Mac 地址簿 API 不同,iOS 地址簿 API 不包含 ABGetMe 函数。ABGetMe 通过尝试从联系人设置中读取 我的信息 来绕过这种限制。

Contacts Settings

如果找不到 我的信息,那么 ABGetMe 会尝试将配置的电子邮件账户地址与地址簿中的记录匹配,从而找到 的记录。

如果仍然找不到 的记录,那么 ABGetMe 最后会尝试从设备名称中提取设备所有者的全名,以便找到 的记录。这种技术由 John Feminella 在 Quora 上对他关于 Square 如何知道我在他们的应用程序注册过程中输入的名字 的答案中进行了说明。

要求

  • ABGetMe 需要 iOS 4.0 或更高版本。
  • ABGetMe 可以编译带有或没有自动引用计数(ARC)。

使用方法

  1. ABGetMe.hABGetMe.m 拷贝到您的 Xcode 项目中
  2. 使用 ABGetMe() 函数,并且别忘了检查结果是否不是 NULL

    ABAddressBookRef addressBook = ABAddressBookCreate();
    ABRecordRef me = ABGetMe(addressBook);
    if (me) {
        // do something with "me"
    }   
    CFRelease(addressBook);
    

限制

ABGetMe 由于使用了未经文档化的 API,违反了 iPhone 开发者许可协议第 3.3.1 条,所以不符合 App Store 的法规要求。但从技术上讲,它是符合 App Store 的法规要求的,因为它将能够通过 App Store 的验证。此外,即使未来未经文档化的 API 发生变化,它也不会崩溃。

  • 从联系人设置中读取 我的信息 使用了未经文档化的 API。
  • 读取配置的电子邮件账户地址使用了未经文档化的 API。
  • 读取设备名称是一个公共 API。

您可以通过将文件的顶部 ABGETME_ENABLE_PRIVATE_APIS 设置为 0 而不是 1 来禁用私人 API。请注意,禁用私人 API 将显著降低找到 的记录的可能性。禁用私人 API 后,找到 的记录的唯一方法(即匹配设备名称)仅在设备所有者从未更改默认设备名称时才有效。