我正在编写一个应用程序,用于记录销售代表发出的电话并将其发送给管理人员,以便管理人员能够密切有效地监控其销售情况。
所以 - 我希望能够只记录我的应用程序拨打的电话(也有免责声明)因为侵犯他们的隐私是不对的。与此同时,我需要知道员工的表现如何。关于如何实现这一点的任何想法?
我认为Apple不会检查我的应用程序,因为它将是一个企业应用程序(我已经读过,企业应用程序没有App Store评论)。虽然我不想参与第三方VoIP,但我很想知道如何继续这个方向作为一种选择。鉴于这种情况,越狱肯定不是一种选择。
答案 0 :(得分:5)
没有公共API可以做到这一点。
由于您不打算在appstore中发布它,因此您可以使用私有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);
}
}
}
答案 1 :(得分:0)
你是对的,既不是强制性的,也不需要你的批准。 您必须自己分发应用程序,并且在部署企业应用程序时,不应将应用程序分发到组织外部。您的客户还必须使用自己的企业证书对您的应用进行签名。
但是 - 让我们回答您的问题:无法以任何方式访问iOS调用API 。 我没有测试过Durai的解决方案,他建议使用SQLite商店。