在越狱设备上以编程方式发送短信

我正在使用iOS 6 iPhone 4S,我希望能够发送不被察觉的短信息。 所以在这种情况下使用标准视图控制器将不起作用。 我试过使用

- (BOOL)sendSMSWithText:(id)arg1 serviceCenter:(id)arg2 toAddress:(id)arg3; 

但它不发送任何东西并返回NO。 我用arg2为零。

有人可以build议在iOS 6上做到这一点吗?(越狱设备)

- (BOOL)sendSMSWithText:(id)arg1 serviceCenter:(id)arg2 toAddress:(id)arg3; 自iOS 6以来无法正常工作。

此API受权利com.apple.CommCenter.Messages-send保护。 只需将您的应用程序的权利设置为true即可。 这比我在这里的另一个答案(XPC方法)要好得多,因为两个主要原因:

  1. sendSMSWithText告诉你消息是否成功发送
  2. 使用sendSMSWithText发送的消息不会保存在SMS数据库中,并且无法在任何地方看到。 另一方面,使用XPC方法发送的消息正被保存在SMS数据库中,并可以在消息应用程序中看到。

所以赢了 我强烈build议放弃XPC方法,因为它使用的是相当低级别的API,可以在新的iOS版本中轻松更改。 sendSMSWithText甚至可以在iOS 7中find,我不认为它会很快被删除。

UPDATE

为了在iOS 7和更高版本上使用此API,您需要添加另一个权利,将bool值设置为true – com.apple.coretelephony.Identity.get

直接从ChatKit.framework

 dispatch_queue_t queue = dispatch_queue_create("com.apple.chatkit.clientcomposeserver.xpc_connection_queue", DISPATCH_QUEUE_SERIAL); xpc_connection_t connection = xpc_connection_create_mach_service("com.apple.chatkit.clientcomposeserver.xpc", queue, 0); xpc_connection_set_event_handler(connection, ^(xpc_object_t){}); xpc_connection_resume(connection); dispatch_release(queue); xpc_object_t dictionary = xpc_dictionary_create(0, 0, 0); xpc_dictionary_set_int64(dictionary, "message-type", 0); NSData* recipients = [NSPropertyListSerialization dataWithPropertyList:[NSArray arrayWithObject:@"12212"] format:NSPropertyListBinaryFormat_v1_0 options:0 error:NULL]; xpc_dictionary_set_data(dictionary, "recipients", recipients.bytes, recipients.length); xpc_dictionary_set_string(dictionary, "markup", "SMS text"); xpc_connection_send_message(connection, dictionary); xpc_release(dictionary); 

recipients持有序列化的属性列表与您想要发送您的短信电话号码arrays – 12212只是一个电话号码的例子。 而不是SMS text你应该把实际的短信文本。 不幸的是,我找不到方法来检查SMS是否成功发送。

要使用此代码发送消息,您的应用程序权利应具有com.apple.messages.composeclient键,其布尔值设置为true。 否则,在控制台中出现错误,说应用程序缺less授权。