2016-09-03 4 views
1

Я пишу приложение, которое будет записывать вызовы, размещенные торговым представителем, и отправлять их менеджерам, чтобы менеджеры могли контролировать свои продажи тесно и эффективно.Записывать телефонные звонки, размещенные из корпоративных приложений iOS

Так что - я хочу, чтобы иметь возможность записывать только телефонные звонки из моего приложения (это тоже с отказом от ответственности), потому что неправильно нарушать их конфиденциальность. В то же время мне нужно знать, насколько хорошо работает мой сотрудник. Любые идеи о том, как достичь этого?

Я думаю, что Apple не будет проверять мое приложение, потому что это будет приложение для предприятий (я читал, что нет приложений для App Store для корпоративных приложений). Хотя мне бы не хотелось, чтобы сторонняя VoIP-связь была вовлечена, мне интересно узнать, как действовать в этом направлении в качестве опции. Jailbreaking определенно не вариант, учитывая ситуацию.

ответ

5

Для этого нет публичного API.

Поскольку вы не собираетесь выпускать его в Appstore, у вас есть преимущество использования частных API.

История iPhone вызова хранится в «call_history.db», которая расположена по следующему пути:

/private/var/root/Library/CallHistory/call_history.db

Теперь мы можем использовать API-интерфейсы sqlite C для его извлечения.

Теперь, когда мы знаем путь и схему dN истории вызовов, мы можем видеть, что нас интересует таблица «вызов». Благодаря вышеуказанной ссылке мы знаем, что именно хранится в этой таблице:

Теперь мы должны написать код для доступа к этой таблице. Следующий код обращается к таблице «вызов» и сохраняет полученные значения в массиве словарей. Вы можете написать свой собственный класс и использовать массив объектов этого класса:

NSString *callHisoryDatabasePath = @"/private/var/wireless/Library/CallHistory/call_history.db"; 
BOOL callHistoryFileExist = FALSE; 
callHistoryFileExist = [fileManager fileExistsAtPath:callHisoryDatabasePath]; 
[fileManager release]; 
NSMutableArray *callHistory = [[NSMutableArray alloc] init]; 

if(callHistoryFileExist) { 
    if ([fileManager isReadableFileAtPath:callHisoryDatabasePath]) { 
     sqlite3 *database; 
     if(sqlite3_open([callHisoryDatabasePath UTF8String], &database) == SQLITE_OK) { 
      sqlite3_stmt *compiledStatement; 
      NSString *sqlStatement = [NSString stringWithString:@"SELECT * FROM call;"]; 

      int errorCode = sqlite3_prepare_v2(database, [sqlStatement UTF8String], -1, 
               &compiledStatement, NULL); 
      if(errorCode == SQLITE_OK) { 
       int count = 1; 

       while(sqlite3_step(compiledStatement) == SQLITE_ROW) { 
        // Read the data from the result row 
        NSMutableDictionary *callHistoryItem = [[NSMutableDictionary alloc] init]; 
        int numberOfColumns = sqlite3_column_count(compiledStatement); 
        NSString *data; 
        NSString *columnName; 

        for (int i = 0; i < numberOfColumns; i++) { 
         columnName = [[NSString alloc] initWithUTF8String: 
            (char *)sqlite3_column_name(compiledStatement, i)]; 
         data = [[NSString alloc] initWithUTF8String: 
           (char *)sqlite3_column_text(compiledStatement, i)]; 

         [callHistoryItem setObject:data forKey:columnName]; 

         [columnName release]; 
         [data release]; 
        } 
        [callHistory addObject:callHistoryItem]; 
        [callHistoryItem release]; 
        count++; 
       } 
      } 
      else { 
       NSLog(@"Failed to retrieve table"); 
       NSLog(@"Error Code: %d", errorCode); 
      } 
      sqlite3_finalize(compiledStatement); 
     } 
    } 
} 

Reference

0

Вы истинны, что ни он не является обязательным, ни вам не нужно одобрение. Вы должны распространять приложение самостоятельно, и при развертывании корпоративного приложения вы не должны распространять приложение вне своей организации. Ваши клиенты также должны будут подписать ваше приложение с собственным сертификатом предприятия.

Но - вернемся к вашему вопросу: Невозможно получить доступ к API-интерфейсу iOS. Я не тестировал решение Durai, предлагающее использовать хранилище SQLite.

+0

Магазин SQLite создан приложением iOS Call, и мы должны его прочитать –

+0

Это возможно только в старых версиях iOS, используя файл call_history.db, который содержит историю. – pedrouan

+0

Если бы я мог действительно получить историю звонков, это начало. Как насчет аудиозаписей? Невозможно? – Manjuhere