2016-09-03 9 views
1

営業担当者がコールを録音して管理者に送信するアプリを作成しているため、管理者は販売を密接かつ効率的に監視できます。iOSエンタープライズアプリから電話をかけて録音する

私は、自分のプライバシーを侵害するのは適切でないため、私のアプリからの電話だけを記録することができます(免責事項も付いています)。同時に、私は従業員がどのくらいうまく行っているかを知る必要があります。どのようにこれを達成するための任意のアイデア?

エンタープライズアプリケーションであるため、アップルは私のアプリケーションをチェックしないと思います(エンタープライズアプリケーションのApp Storeレビューはありません)。サードパーティのVoIPが関与したくないとは思いますが、私はオプションとしてその方向に進む方法を知りたいと考えています。 Jailbreakingは、状況を考えると選択肢ではありません。

答えて

5

これを行う公開APIはありません。

アプリストアでリリースしないので、プライベートAPIを使用する利点があります。

iPhoneコール履歴は、次のパスに配置されている「call_history.db」に格納されている:

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

これで、sqlite C APIを使用して抽出することができます。

呼び出し履歴データベースのパスとスキーマがわかったので、私たちは "呼び出し"テーブルに興味があることがわかります。上記のリンクのおかげで、このテーブルには正確に何が格納されているのかわかります:

これでアクセスするためのコードを書く必要があります。次のコードは "call"テーブルにアクセスし、取得した値を辞書の配列に格納します。独自のクラスを作成し、そのクラスのオブジェクトの配列を使用することができます

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

あなたは真であるが、どちらも、それは必須ではないことも、あなたは承認を必要としません。 自分でアプリを配布する必要があります。また、エンタープライズアプリをデプロイするときは、組織外にアプリを配布しないでください。また、顧客は独自の企業証明書でアプリに署名する必要があります。

しかし、あなたの質問に戻りましょう:iOS APIを呼び出すには、何らかの形でにアクセスすることはできません。 DuraiのソリューションはSQLiteストアを使用することを推奨していません。

+0

SQLite StoreはiOS Callアプリで作成されており、これを読む必要があります –

+0

古いiOSバージョンではhistoryを含むcall_history.dbファイルを使用することによってのみ可能です。 – pedrouan

+0

私は実際に通話履歴を得ることができれば、それはスタートです。オーディオレコーディングはどうですか?方法はありませんか? – Manjuhere

関連する問題