Square的CardCase应用程序如何自动从地址簿中填充用户的详细信息?

Gen*_*ich 21 square abaddressbook ios

Square的新名片盒iOS应用程序具有"创建帐户"功能.点击它,它会显示一个表格PREPOPULATED与用户在地址簿中的条目.

这怎么可能?谁知道?我认为这是不可能的,以这种方式获取用户的信息.这不是iOS 5.0的东西,afaict.

Nik*_*rns 56

我能想到的唯一解决方案是使用设备名称,然后在地址簿中搜索匹配项.这假设有人会使用特定的命名约定.例如,我使用'Nik的iPhone'作为我的设备名称.我也是唯一的Nik在我的地址簿,所以我的方案是很好的作品之前使用文本作为所有者的名称.

它利用了Erica Sadun,ABContactHelper为ABAddressBook提供的非常方便的包装器.我已经离开了枚举代码,而不是在0处使用数组索引,因为可能会返回少量匹配,因此您可以展开以向用户提供选择"他们的"详细信息的选项.虽然不完全匹配方形案例解决方案效果很好.恕我直言.

NSString *firstname;
NSString *lastname;

NSString *ownerName = [[UIDevice currentDevice] name];

NSRange t = [ownerName rangeOfString:@"'s"];
if (t.location != NSNotFound) {
    ownerName = [ownerName substringToIndex:t.location];
} 

NSArray *matches = [ABContactsHelper contactsMatchingName:ownerName];
if(matches.count == 1){ 
    for (ABContact *contact in matches){
        firstname = [contact firstname];
        lastname = [contact lastname];

    }
}
Run Code Online (Sandbox Code Playgroud)

  • 我可以确认这似乎是他们如何做到的.如果将设备名称更改为通讯簿中不存在的名称,则Card Case将显示从设备名称派生的新名称. (5认同)

Jos*_*nce 23

由于需要应用程序要求访问通讯簿权限的更改此方法不再有效.Nik Burns的回答很有效,但需要访问地址簿.

我下载了Square Wallet(原始问题中是Square Card Case引用的继承者),它不再预先填写注册表单.Path也用于设备名称地址簿技巧,但它也不再预先填充注册表单.

使用上述方法,您仍然可以 请求联系人访问预先填充注册表单,但它会失去所需的"魔术"体验.

  • 这是该问题的新"正确答案". (4认同)