0

我有 RhoMobile 应用程序,用户可以在其中将联系人添加到他们的移动设备。它适用于所有设备,包括 Android、iOS 5 及更低版本,但不适用于 iOS 6。还有其他人有这个问题吗?我相信 Apple 更改了 iOS 6 上的 PIM 实现,这可能是导致问题的原因。

我的代码:

def add_contact
    Rho::RhoContact.create! ({"first_name" => "John", "last_name" => "Doe"}) 
end

我在 build.yml 中启用了 pim 功能

任何帮助将不胜感激。

4

1 回答 1

0

从 iOS 6 开始,应用程序无法在未经用户许可的情况下访问用户的联系人。当我们执行 -> Rho::RhoContact.create!,RhoMobile 应用程序会尝试访问用户尚未授予的权限的通讯簿。此外,该应用程序不会自行请求许可。您需要从应用程序内强行触发许可请求。

你可以这样做: -

转到 Rhodes-3.4.3(我的 rhodes 版本是 3.4.2) -> 平台 -> iPhone -> 课程 -> 电话簿 -> Phonebook.m

在文本编辑器或 xCode 中打开它。

在页面顶部,定义以下内容:-

#define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v)  ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending)

完成后,找到函数->

void* openPhonebook()

找到线->

memset(phonebook, 0, sizeof(LocalPhonebook));

在此行下方,将存在的任何代码替换为 ->

if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"6.0")) {
    CFErrorRef myError = NULL;
    phonebook->_ab = ABAddressBookCreateWithOptions(NULL, &myError);
    ABAddressBookRequestAccessWithCompletion(phonebook->_ab, ^(bool granted, CFErrorRef error) {
        if (granted) {
            phonebook->_people = NULL;
            phonebook->_len = 0;
        } else {
            // Handle the error
        }
    });
}
else{
    // for iOS < 6
    phonebook->_ab = ABAddressBookCreate();
    if (phonebook->_ab) {
        phonebook->_people = NULL;
        phonebook->_len = 0;
    }
}

return phonebook;

在上面的代码中, phonebook->_ab 是我的 ABAddressBook 参考

现在你应该很高兴......希望这很有用......

于 2013-08-23T08:21:28.377 回答