发送短信编程越狱设备上(Send programmatically SMS on jailbreak

2019-08-20 05:31发布

我使用的是iOS 6的iPhone 4S,我希望能够发送忽视短信。 因此,使用标准的视图控制器不会在这种情况下工作。 我试着使用

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

但它不发送任何东西,没有返回。 我用零的ARG2。

有人建议的方式来做到这一点在iOS 6?(用于越狱设备)

Answer 1:

找到了原因- (BOOL)sendSMSWithText:(id)arg1 serviceCenter:(id)arg2 toAddress:(id)arg3; 因为iOS 6中是行不通的。

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

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

所以,双赢。 我强烈建议下探XPC方法还因为它使用相当低级别的API,可以在新的iOS版本轻易改变。 sendSMSWithText甚至可以在iOS的7中找到,我不认为它会很快被丢弃的任何时间。

UPDATE

为了使用这个API在iOS 7及以上的,你需要添加设置为true bool值另一个权利- com.apple.coretelephony.Identity.get



Answer 2:

直接从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保存与电话号码的排列要向其发送您的短信序列化属性列表- 12212只是电话号码的例子。 取而代之的SMS text ,你应该把实际的短信。 不幸的是,我无法找到一个方法来检查SMS是否已成功发送。

要使用此代码应用程序的权利应该有发送短信com.apple.messages.composeclient设置为true布尔值的关键。 否则,你在控制台应用说法缺乏授权错误。



文章来源: Send programmatically SMS on jailbreak device