我正在使用iOS 6 iphone 4S,我希望能够发送未被注意的短信。 因此,在这种情况下使用标准视图控制器将不起作用。 我尝试使用
- (BOOL)sendSMSWithText:(id)arg1 serviceCenter:(id)arg2 toAddress:(id)arg3;
但它不发送任何内容并返回NO。我使用nil作为arg2。
有人可以建议在iOS 6上进行此操作吗?(对于越狱设备)
答案 0 :(得分:15)
找出自iOS 6以来- (BOOL)sendSMSWithText:(id)arg1 serviceCenter:(id)arg2 toAddress:(id)arg3;
无效的原因。
此API受权利com.apple.CommCenter.Messages-send
保护。只需将此权利设置为true即可签署您的应用。它比我的另一个答案(XPC方法)要好得多,原因有两个:
sendSMSWithText
告诉您邮件已成功发送sendSMSWithText
发送的邮件未保存在SMS数据库中,无法在任何地方看到。另一方面,使用XPC方法发送的消息正保存在SMS数据库中,可以在消息应用程序中看到。所以,赢了。我强烈建议删除XPC方法,因为它使用的是非常低级别的API,可以在新的iOS版本中轻松更改。即使在iOS 7中也可以找到sendSMSWithText
,我认为它不会很快被删除。
<强>更新强>
要在iOS 7及更高版本上使用此API,您需要添加另一个权限,并将bool值设置为true - com.apple.coretelephony.Identity.get
。
答案 1 :(得分:5)
直接来自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文本。不幸的是,我找不到检查SMS是否成功发送的方法。
要使用此代码发送消息,您的应用程序权利应具有com.apple.messages.composeclient
键,其布尔值设置为true。否则你会在控制台中收到错误,说应用程序缺少权利。