【问题标题】:PIM Contacts in RhomobileRhomobile 中的 PIM 联系人
【发布时间】:2013-01-02 22:07:07
【问题描述】:

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

任何帮助将不胜感激。

【问题讨论】:

    标签: rhomobile rhodes


    【解决方案1】:

    从 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 参考

    现在你应该可以开始了...希望这很有用...

    【讨论】:

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