Плагин Cordova Contacts: контактные данные дублируются, а не перезаписывают контактные данные.

1

У меня есть функция в моем приложении, которая проверяет контакты пользователей, используя плагин контактов cordova с онлайн-базой данных пользователей. Если у любого из контактов на устройстве пользователя есть учетные записи, данные из учетной записи обновляются на устройстве.

Функция работает с такими вещами, как имя и дата рождения, но электронные письма и телефонные номера не перезаписывают существующие контактные данные, вместо этого они создают новую запись для них.

Изображение 174551

Этот конкретный пользователь должен иметь только 1 адрес электронной почты и 1 номер телефона.

Ответ JSON и сохранение

var contacts = json.contacts;
for(var x = 0; x < contacts.length; x++){
    var user = contacts[x];
    //console.log(user);
    //get old contact by id
    //Set the options for finding conact
    var options = new ContactFindOptions();
    options.filter   = user.id; //name that you want to search
    options.multiple = false;
    var fields = ["id","displayName"];
    navigator.contacts.find(fields, function(c){
        c = c[0];
        var dob = user.iceTV.dob.split(':');
        c.displayName = user.iceTV.f_name + " " + user.iceTV.l_name;
        c.nickname = user.iceTV.f_name + " " + user.iceTV.l_name;
        c.birthday = new Date(dob[2], dob[1] - 1, dob[0]);
        c.name.givenName = user.iceTV.f_name;
        c.name.familyName = user.iceTV.l_name;
        c.name.formatted = user.iceTV.f_name + " " + user.iceTV.l_name;
        if(c.emails == null){
            c.emails = [];
        }
        for(var a = 0; a < user.emails; a++){
            c.emails[a] = { value : user.emails[a] };
        }
        if(c.phoneNumbers == null){
            c.phoneNumbers = [];
        }
        c.phoneNumbers[0] = {type : 'mobile', value: user.iceTV.number};
        if(user.pp == null){
            c.photos = null;
        } else {
            contacts.photos[0] = {
                pref : false,
                type : 'url',
                value : user.iceTV.pp
            };
        }
        c.save(function(saveSuccess) {
            console.log('User updated' ,c);
        }, function(saveError){
            console.log("Error when updating");
        });
    }, function (e){
        makeToast("Error = " + e.code);
    }, options);
}
Теги:
cordova
cordova-plugins
contacts

1 ответ

0

У меня была такая же проблема, и я исправил ее, добавив id к номерам телефонов. Для вашего примера кода строка, которую вы должны изменить, будет выглядеть так:

c.phoneNumbers[0] = {type : 'mobile', value: user.iceTV.number, id: 0}; 

Но: Это только фиксирует дублирование. Когда вы удаляете номер телефона в базе данных, он не будет удален в контакте. Подробнее см. мой вопрос здесь.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню