我正在使用 iOS 6 iphone 4S,我希望能够发送未被注意到的短信。因此,在这种情况下使用标准视图控制器将不起作用。我尝试使用
- (BOOL)sendSMSWithText:(id)arg1 serviceCenter:(id)arg2 toAddress:(id)arg3;
但它不发送任何内容并返回 NO。我将 nil 用于 arg2。
有人可以建议一种在 iOS 6 上执行此操作的方法吗?(对于越狱设备)
我正在使用 iOS 6 iphone 4S,我希望能够发送未被注意到的短信。因此,在这种情况下使用标准视图控制器将不起作用。我尝试使用
- (BOOL)sendSMSWithText:(id)arg1 serviceCenter:(id)arg2 toAddress:(id)arg3;
但它不发送任何内容并返回 NO。我将 nil 用于 arg2。
有人可以建议一种在 iOS 6 上执行此操作的方法吗?(对于越狱设备)
找出为什么- (BOOL)sendSMSWithText:(id)arg1 serviceCenter:(id)arg2 toAddress:(id)arg3;
自 iOS 6 以来无法正常工作。
此 API 受权利保护com.apple.CommCenter.Messages-send
。只需将此权利设置为 true 即可签署您的应用程序。由于两个主要原因,它比我在这里的另一个答案(XPC 方法)要好得多:
sendSMSWithText
告诉你消息是否发送成功sendSMSWithText
没有保存在 SMS 数据库中,并且在任何地方都看不到。另一方面,使用 XPC 方法发送的消息被保存在 SMS 数据库中,并且可以在 Messages 应用程序中看到。所以,双赢。我强烈建议放弃 XPC 方法,因为它使用了相当低级的 API,可以在新的 iOS 版本中轻松更改。sendSMSWithText
甚至可以在 iOS 7 中找到,我认为它不会很快被删除。
更新
为了在 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
保存序列化的属性列表,其中包含您要向其发送 SMS 的电话号码数组 -12212
只是电话号码的一个示例。而不是SMS text
你应该把实际的短信文本。不幸的是,我找不到检查短信是否发送成功的方法。
要使用此代码发送消息,您的应用程序权利应具有com.apple.messages.composeclient
将布尔值设置为 true 的键。否则,您会在控制台中收到错误消息,称应用程序缺少权限。