6

有谁知道是否可以使用私有框架直接发送 iMessage?

我尝试使用CTMessageCenterfromCoreTelephony但它会发送短信,即使我的手机可以发送 iMessages。

4

2 回答 2

2

我没有对此进行测试,但请查看此处发布的代码。如果您查看httpResponseForMethod:URI:,您会看到他/她发送消息的位置(似乎是支持iOS 5 或 iOS 4的硬编码):

CKSMSService *smsService = [CKSMSService sharedSMSService];

//id ct = CTTelephonyCenterGetDefault();
CKConversationList *conversationList = nil;

NSString *value =[[UIDevice currentDevice] systemVersion];          
if([value hasPrefix:@"5"])
{
    //CKMadridService *madridService = [CKMadridService sharedMadridService];
    //NSString *foo = [madridService _temporaryFileURLforGUID:@"A5F70DCD-F145-4D02-B308-B7EA6C248BB2"];

    NSLog(@"Sending SMS");
    conversationList = [CKConversationList sharedConversationList];
    CKSMSEntity *ckEntity = [smsService copyEntityForAddressString:Phone];
    CKConversation *conversation = [conversationList conversationForRecipients:[NSArray arrayWithObject:ckEntity] create:TRUE service:smsService];
    NSString *groupID = [conversation groupID];           
    CKSMSMessage *ckMsg = [smsService _newSMSMessageWithText:msg forConversation:conversation];
    [smsService sendMessage:ckMsg];
    [ckMsg release];     
} else {
    //4.0
    id ct = CTTelephonyCenterGetDefault();
    void* address = CKSMSAddressCreateWithString(pid); 

    int group = [grp intValue];         

    if (group <= 0) {
        group = CKSMSRecordCreateGroupWithMembers([NSArray arrayWithObject:address]);       
    }

    void *msg_to_send = _CKSMSRecordCreateWithGroupAndAssociation(NULL, address, msg, group, 0);    
    CKSMSRecordSend(ct, msg_to_send);

}

代码使用普通短信,但可以看到以下注释掉的代码:

//CKMadridService *madridService = [CKMadridService sharedMadridService];

“马德里”服务可能是可以发送 iMessages 的。 请参阅此处的私有标头

SMS 和 iMessage 私有 API 都在ChatKit.framework中。

于 2012-06-14T07:13:47.690 回答
-5

通过非越狱 iPhone 绝对无法访问 iMessage CoreTelephony API

于 2012-01-19T19:57:29.623 回答