0

ユーザーがモバイルデバイスに連絡先を追加できるRhoMobileアプリケーションがあります。Android、iOS 5以下を含むすべてのデバイスでうまく機能しますが、iOS6では機能しません。他にこの問題を抱えている人はいますか?AppleがiOS6での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 に答える