IOS私有API

作者: winlee | 来源:发表于2016-07-27 23:39 被阅读446次

    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();

    相关文章

      网友评论

        本文标题:IOS私有API

        本文链接:https://www.haomeiwen.com/subject/fjbwjttx.html