Rhomobile的PIM联系人

时间:2013-01-02 22:07:08

标签: rhomobile rhodes

我有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功能

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

从iOS 6起,应用无法在未经许可的情况下访问用户的联系人。当我们执行 - >卢:: 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-&gt; _ab是我的ABAddressBook参考

现在你应该好好去...希望这很有用......