使用CTMessageCenter发送短信(iOS 7)

时间:2013-10-04 07:01:59

标签: ios objective-c sms

我正在尝试使用私有API以编程方式发送短信。我的手机没有越狱。

BOOL success =  [[CTMessageCenter sharedMessageCenter] sendSMSWithText:@"test 1234..." serviceCenter:nil toAddress:@"0777888888"];
if(success){
    NSLog(@"Message SENT");
}else{
    NSLog(@"Message not SENT");
} 

此代码始终显示“Message not SENT”。任何人都可以帮助我吗?

2 个答案:

答案 0 :(得分:2)

我想,你必须用E.123国际表示法写下电话号码。 所以添加加号和国家代码。对于电话号码,美国用+1代替前导0:

[[CTMessageCenter sharedMessageCenter] sendSMSWithText:@"test 1234..." serviceCenter:nil toAddress:@"+1777888888"];

对于电话号码,斯里兰卡使用适当的国家代码+94。

<强>更新

我在iOS 7下测试过旧的iOS 5代码... sendSMSWithText:serviceCenter:toAddress:返回NO。 使用新方法sendSMSWithText:serviceCenter:toAddress:withMoreToFollow:

时也是如此

Panagiotis的建议似乎是正确的: - /

更新2

https://stackoverflow.com/a/20425853/2270880给出了正确的答案。

在iOS 7下,该应用需要两个权利com.apple.CommCenter.Messages-sendcom.apple.coretelephony.Identity.get。通过文件appname.entitlements添加其他权利(并在目标的构建设置&gt;所有&gt;代码签名&gt;代码签名权利中设置)为您提供错误

The entitlements specified in your application’s Code Signing Entitlements file do not match those specified in your provisioning profile.
(0xE8008016).

在非越狱设备上。

答案 1 :(得分:1)

我一直试图在iOS 6.1上这样做很长时间,因为我发现自从iOS 6以来最终无法使用此方法。上次我可以使这个代码成功执行是在iOS 5上(有一个花生.app在网络上工作)。

实际工作的内容是here和讨论here以及以下代码块。

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);

虽然没有尝试在非越狱iOS上实现。我希望你能成功!

**编辑

让我纠正自己!您的代码可以使用imagent可执行文件进行越狱调整。只是无法直接从xCode应用程序执行它。