IOS私有API

IOS私有API的了解

IOS的API分為四種:
Published API(公開的API)
(或者
Documented API

還有兩類:私有
API

Private API
和未公開
API

UnPublished API(
或者
Undocumented API)

私有API
是指放在
PrivateFrameworks
框架中的
API
,未公開的
API
是指雖然放在
Frameworks
框架中,但是卻沒有在蘋果的官方文檔中有使用說明、代碼介紹等記錄的
API

按蘋果的說法,未公開的API
是還不夠成熟,可能還會變動的
API
,等完全成型了后會變成公開的
API
,但是目前不對其提供承諾,就是系統版本升級后可能會失效。而私有
API
是蘋果明確不能使用的
API
。雖然兩者有所區別,但是在具體使用方法上是類似的。

私有API會面臨審核通不過然后不能上線,但是也有使用私有API通過審核的比如谷歌的“Google Voice”,所以具體審核的詳情不得而知。

示例一:
使用私有API——CoreTelephony獲取本機號碼
步驟如下:1)導入CoreTelephony這個private framework2)在xxx.m中加入紅字部分:#import "xxx.h"extern NSString *CTSettingCopyMyPhoneNumber();
@implementation+(NSString *)myNumber{return CTSettingCopyMyPhoneNumber();}
@end3)在其它地方調用NSLog(@"myNumber=%@",[xxx myNumber]);即是本機號碼
另外機子的唯一標識碼等一些信息 可以用[UIDevice currentDevice] 的uniqueIdentifier,name等屬性來獲取

其他資料:
call blocking on iPhone4
//using private API//CoreTelephony framework is needed
extern NSString* const kCTSMSMessageReceivedNotification;extern NSString* const kCTSMSMessageReplaceReceivedNotification;extern NSString* const kCTSIMSupportSIMStatusNotInserted;extern NSString* const kCTSIMSupportSIMStatusReady;
typedef struct __CTCall CTCall;extern NSString CTCallCopyAddress(void, CTCall );
void
CTSMSMessageSend(id server,id msg);typedef struct __CTSMSMessage CTSMSMessage;NSString CTSMSMessageCopyAddress(void , CTSMSMessage );NSString CTSMSMessageCopyText(void , CTSMSMessage );
int CTSMSMessageGetRecordIdentifier(void * msg);NSString * CTSIMSupportGetSIMStatus();NSString * CTSIMSupportCopyMobileSubscriberIdentity();
id CTSMSMessageCreate(void
unknow,NSString
number,NSString
text);void * CTSMSMessageCreateReply(void
unknow,void * forwardTo,NSString
text);
id CTTelephonyCenterGetDefault(void);void CTTelephonyCenterAddObserver(id,id,CFNotificationCallback,NSString
,void,int);void CTTelephonyCenterRemoveObserver(id,id,NSString,void*);int CTSMSMessageGetUnreadCount(void);
static void callback(CFNotificationCenterRef center, void *observer, CFStringRef name, const void *object, CFDictionaryRef userInfo){NSString *notifyname=(NSString *)name;if ([notifyname isEqualToString:@"kCTCallStatusChangeNotification"])//phone call{NSDictionary info = (NSDictionary)userInfo;
NSString *state=[[info objectForKey:@"kCTCallStatus"] stringValue];if ([state isEqualToString:@"5"])//disconnectNSLog(@”unanswered:%@”,state);
}else if ([notifyname isEqualToString:@"kCTCallIdentificationChangeNotification"]){// CTCallCenter *center = [[CTCallCenter alloc] init];// center.callEventHandler = ^(CTCall *call) {// NSLog(@”call:%@”, [call description]);// };
NSDictionary *info = (NSDictionary *)userInfo;CTCall *call = (CTCall *)[info objectForKey:@"kCTCall"];NSString *caller = CTCallCopyAddress(NULL, call);NSLog(@”電話號碼:%@”,caller);//CTCallDisconnect(call);
}else if ([notifyname isEqualToString:@"kCTRegistrationDataStatusChangedNotification"]){
}else if ([notifyname isEqualToString:@"kCTSMSMessageReceivedNotification"]){//api expiredif ([[(NSDictionary *)userInfo allKeys]containsObject:@”kCTSMSMessage”]) // SMS Message{CTSMSMessage *message = (CTSMSMessage *)[(NSDictionary *)userInfo objectForKey:@"kCTSMSMessage"];NSString *address = CTSMSMessageCopyAddress(NULL, message);NSString *text = CTSMSMessageCopyText(NULL, message);//NSArray *lines = [text componentsSeparatedByString:@"\n"];
//printf(” %s %d\n”, [address cString], [lines count]);//printf(” %s\n”, [text cString]);fflush(stdout);
}}else if ([notifyname isEqualToString:@"kCTMessageReceivedNotification"])//received SMS{
NSDictionary *info = (NSDictionary *)userInfo;CFNumberRef msgID = (CFNumberRef)[info objectForKey:@"kCTMessageIdKey"];int result;CFNumberGetValue((CFNumberRef)msgID, kCFNumberSInt32Type, &result);
}else if ([notifyname isEqualToString:@"kCTIndicatorsSignalStrengthNotification"])//signal{
}else if ([notifyname isEqualToString:@"kCTRegistrationStatusChangedNotification"])//network registration status{
}else if ([notifyname isEqualToString:@"kCTRegistrationDataStatusChangedNotification"]){}else if ([notifyname isEqualToString:@"kCTRegistrationCellChangedNotification"]){}else if ([notifyname isEqualToString:@"kCTIndicatorRadioTransmitNotification"]){}//int unread=CTSMSMessageGetUnreadCount();//if (unread>0)//NSLog(@”unread SMS:%d”,unread);
NSLog(@”name:%@-detail:%@”,notifyname,userInfo);
}
static void signalHandler(int sigraised){printf(“\nInterrupted.\n”);exit(0);}
//—————–
id ct = CTTelephonyCenterGetDefault();CTTelephonyCenterAddObserver(ct, NULL, callback, NULL, NULL, CFNotificationSuspensionBehaviorHold);// Handle Interruptssig_t oldHandler = signal(SIGINT, signalHandler);if (oldHandler == SIG_ERR){printf(“Could not establish new signal handler”);exit(1);}// Run loop lets me catch notificationsprintf(“Starting run loop and watching for notification.\n”);//CFRunLoopRun();

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容