iOS私有API的了解

iOS的API分为四种:

PublishedAPI(公开的API)(或者Documented API

还有两类:私有APIPrivateAPI和未公开APIUnPublished API(或者UndocumentedAPI)

私有API是指放在PrivateFrameworks框架中的API,未公开的API是指虽然放在Frameworks框架中,但是却没有在苹果的官方文档中有使用说明、代码介绍等记录的API

按苹果的说法,未公开的API是还不够成熟,可能还会变动的API,等完全成型了后会变成公开的API,但是目前不对其提供承诺,就是系统版本升级后可能会失效。而私有API是苹果明确不能使用的API。虽然两者有所区别,但是在具体使用方法上是类似的。

私有API会面临审核通不过然后不能上线,但是也有使用私有API通过审核的比如谷歌的“GoogleVoice”,所以具体审核的详情不得而知。

 

示例一:

使用私有API——CoreTelephony获取本机号码

步骤如下:
1)导入CoreTelephony这个private framework
2)在xxx.m中加入红字部分:

[objc]  view plain  copy
 
  1. #import "xxx.h"  
  2.   
  3. extern NSString*CTSettingCopyMyPhoneNumber();  
  4.   
  5.   
  6. @implementation  
  7. +(NSString *)myNumber{  
  8. <span style="white-space:pre">    </span>return CTSettingCopyMyPhoneNumber();  
  9. }  
  10. @end  


3)在其它地方调用NSLog(@"myNumber=%@",[xxxmyNumber]);即是本机号码

另外机子的唯一标识码等一些信息可以用[UIDevice currentDevice]的uniqueIdentifier,name等属性来获取

 

其他资料:

callblocking on iPhone4

[objc]  view plain  copy
 
  1. //using private API  
  2. //CoreTelephony framework is needed  
  3. extern NSString* const kCTSMSMessageReceivedNotification;  
  4. extern NSString* constkCTSMSMessageReplaceReceivedNotification;  
  5. extern NSString* const kCTSIMSupportSIMStatusNotInserted;  
  6. extern NSString* const kCTSIMSupportSIMStatusReady;  
  7. typedef struct __CTCall CTCall;  
  8. extern NSString *CTCallCopyAddress(void*, CTCall *);  
  9. void* CTSMSMessageSend(id server,id msg);  
  10. typedef struct __CTSMSMessage CTSMSMessage;  
  11. NSString *CTSMSMessageCopyAddress(voidvoid *, CTSMSMessage *);  
  12. NSString *CTSMSMessageCopyText(voidvoid *, CTSMSMessage *);  
  13. int CTSMSMessageGetRecordIdentifier(voidvoid * msg);  
  14. NSString * CTSIMSupportGetSIMStatus();  
  15. NSString * CTSIMSupportCopyMobileSubscriberIdentity();  
  16. id CTSMSMessageCreate(void* unknow,NSString* number,NSString*text);  
  17. voidvoid * CTSMSMessageCreateReply(void* unknow,voidvoid *forwardTo,NSString* text);  
  18. id CTTelephonyCenterGetDefault(void);  
  19. voidCTTelephonyCenterAddObserver(id,id,CFNotificationCallback,NSString*,void*,int);  
  20. void CTTelephonyCenterRemoveObserver(id,id,NSString*,void*);  
  21. int CTSMSMessageGetUnreadCount(void);  
  22. static void callback(CFNotificationCenterRef center, void*observer, CFStringRef name, const voidvoid *object, CFDictionaryRefuserInfo)  
  23. {  
  24. NSString *notifyname=(NSString *)name;  
  25. if ([notifynameisEqualToString:@"kCTCallStatusChangeNotification"])//phonecall  
  26. {  
  27. NSDictionary *info = (NSDictionary*)userInfo;  
  28. NSString *state=[[info objectForKey:@"kCTCallStatus"]stringValue];  
  29. if ([state isEqualToString:@"5"])//disconnect  
  30. NSLog(@”unanswered:%@”,state);  
  31. }  
  32. else if ([notifynameisEqualToString:@"kCTCallIdentificationChangeNotification"])  
  33. {  
  34. // CTCallCenter *center = [[CTCallCenter alloc] init];  
  35. // center.callEventHandler = ^(CTCall *call) {  
  36. // NSLog(@”call:%@”, [call description]);  
  37. // };  
  38. NSDictionary *info = (NSDictionary *)userInfo;  
  39. CTCall *call = (CTCall *)[info objectForKey:@"kCTCall"];  
  40. NSString *caller = CTCallCopyAddress(NULL, call);  
  41. NSLog(@”电话号码:%@”,caller);  
  42. //CTCallDisconnect(call);  
  43. }  
  44. else if ([notifynameisEqualToString:@"kCTRegistrationDataStatusChangedNotification"])  
  45. {  
  46. }  
  47. else if ([notifynameisEqualToString:@"kCTSMSMessageReceivedNotification"])  
  48. {//api expired  
  49. if ([[(NSDictionary *)userInfo allKeys]  
  50. containsObject:@”kCTSMSMessage”]) // SMS Message  
  51. {  
  52. CTSMSMessage *message = (CTSMSMessage *)  
  53. [(NSDictionary *)userInfo objectForKey:@"kCTSMSMessage"];  
  54. NSString *address = CTSMSMessageCopyAddress(NULL, message);  
  55. NSString *text = CTSMSMessageCopyText(NULL, message);  
  56. //NSArray *lines = [text componentsSeparatedByString:@"\n"];  
  57. //printf(” %s %d\n”, [address cString], [lines count]);  
  58. //printf(” %s\n”, [text cString]);  
  59. fflush(stdout);  
  60. }  
  61. }  
  62. else if ([notifynameisEqualToString:@"kCTMessageReceivedNotification"])//receivedSMS  
  63. {  
  64. NSDictionary *info = (NSDictionary *)userInfo;  
  65. CFNumberRef msgID = (CFNumberRef)[infoobjectForKey:@"kCTMessageIdKey"];  
  66. int result;  
  67. CFNumberGetValue((CFNumberRef)msgID, kCFNumberSInt32Type,&result);  
  68.   
  69. }  
  70. else if ([notifynameisEqualToString:@"kCTIndicatorsSignalStrengthNotification"])//signal  
  71. {  
  72. }  
  73. else if ([notifynameisEqualToString:@"kCTRegistrationStatusChangedNotification"])//networkregistration status  
  74. {  
  75. }  
  76. else if ([notifynameisEqualToString:@"kCTRegistrationDataStatusChangedNotification"])  
  77. {  
  78.   
  79. }  
  80. else if ([notifynameisEqualToString:@"kCTRegistrationCellChangedNotification"])  
  81. {  
  82.   
  83. }  
  84. else if ([notifynameisEqualToString:@"kCTIndicatorRadioTransmitNotification"])  
  85. {  
  86.   
  87. }  
  88. //int unread=CTSMSMessageGetUnreadCount();  
  89. //if (unread>0)  
  90. //NSLog(@”unread SMS:%d”,unread);  
  91. NSLog(@”name:%@-detail:%@”,notifyname,userInfo);  
  92. }  
  93. static void signalHandler(int sigraised)  
  94. {  
  95. printf(“\nInterrupted.\n”);  
  96. exit(0);  
  97. }  
  98. //—————–  
  99. id ct = CTTelephonyCenterGetDefault();  
  100. CTTelephonyCenterAddObserver(ct, NULL, callback, NULLNULL,CFNotificationSuspensionBehaviorHold);  
  101. // Handle Interrupts  
  102. sig_t oldHandler = signal(SIGINT, signalHandler);  
  103. if (oldHandler == SIG_ERR)  
  104. {  
  105. printf(“Could not establish new signal handler”);  
  106. exit(1);  
  107. }  
  108. // Run loop lets me catch notifications  
  109. printf(“Starting run loop and watching for notification.\n”);  
  110. //CFRunLoopRun();  

你可能感兴趣的:(iOS私有API的了解)