Получение контактов с iphone с помощью Sencha Touch 2.4.1

Я пытаюсь получить контакты с iphone4s (ios 8.1.2), используя следующий фрагмент кода.

 if (Ext.os.deviceType == 'Phone'){
        var contactsConfig = {            
            success: function( contacts){
                Ext.Msg.alert('Contacts?', contacts.length, Ext.emptyFn);
            },

            failure: function(context){
                 Ext.Msg.alert('Failure', 'It did not work.', Ext.emptyFn);
           },
            scope: this,                                    
            includeImages: false
        };
        Ext.device.Contacts.getContacts(contactsConfig);         
    }

У моего phonegap config.xml есть разрешение на чтение контактов

 <feature name="Contacts">
    <param name="ios-package" value="CDVContacts" />
</feature>

Но я всегда получаю контакты, жестко закодированные в Ext.device.contacts.Abstract

У кого-нибудь получилось заставить контакты работать на sencha touch 2.4.x? Или даже более старые версии?

Любая помощь приветствуется.


person Nikhil S    schedule 22.01.2015    source источник


Ответы (1)


Я смог решить проблему после множества взломов.

Шаг 1: Phonegap может читать контакты iOS.
Шаг 2: Вызов Ext.device.contacts.getContacts (). Документация по Sencha Touch 2.4 неверна .
Шаг 3. Передача правильного параметра функциям навигатора. Также не работают Ext.browser.is.Cordova или .Sencha. Поэтому замените их.
Шаг 4. Для работы функций навигатора необходим Cordova.js.

  1. Убедитесь, что в проекте phonegap config.xml в разных местах (например, / www, //) имеет следующее

     <feature name="Contacts">
    <param name="ios-package" value="CDVContacts" />
    

  2. Calling get contacts() the correct way

var opts = new ContactFindOptions();
opts.filter = "";
opts.multiple = true;
var contactsConfig = {
  options: opts,
  fields: ["name", "phoneNumbers"],
  success: function(contacts) {
    Ext.Msg.alert('Simple contacts', contacts.length, Ext.emptyFn);

  },

  failure: function(context) {
    Ext.Msg.alert('Failure', 'It did not work.', Ext.emptyFn);
  },
  scope: this,
  includeImages: false
};

Ext.device.Contacts.getContacts(contactsConfig);

  1. Внутри вашего проекта sencha перейдите в touch / src / device и измените Contacts.js и contacts / Cordova.js соответственно.

Ext.define('Ext.device.Contacts', {
  singleton: true,

  requires: [
    'Ext.device.Communicator',
    'Ext.device.contacts.Sencha',
    'Ext.device.contacts.Cordova'
  ],

  constructor: function() {

    return Ext.create('Ext.device.contacts.Cordova');
  }
});

Ext.define('Ext.device.contacts.Cordova', {
  alternateClassName: 'Ext.device.contacts.PhoneGap',
  extend: 'Ext.device.contacts.Abstract',

  getContacts: function(config) {
    if (!config) {
      Ext.Logger.warn('Ext.device.Contacts#getContacts: You must specify a `config` object.');
      return false;
    }

    if (!config.success) {
      Ext.Logger.warn('Ext.device.Contacts#getContacts: You must specify a `success` method.');
      return false;
    }

    if (!config.fields) {
      config.fields = ["*"];
    }

    if (!Ext.isArray(config.fields)) {
      config.fields = [config.fields];
    }

    if (Ext.isEmpty(config.multiple)) {
      config.multiple = true;
    }

    navigator.contacts.find(config.fields, config.success, config.failure, config.options);
  }
});

  1. Включите cordova.js в index.html

<script type="text/javascript" charset="utf-8" src="cordova.js"></script>

person Nikhil S    schedule 22.01.2015