4

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

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

此代码始终打印“消息未发送”。谁能帮我 ?

4

2 回答 2

2

我想,你必须用 E.123 国际符号写电话号码。所以添加加号和国家代码。对于电话号码是美国,将前导 0 替换为 +1:

[[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(并在目标的 Build Settings > All > Code Signing > Code Signing Entitlements 中设置)会给您错误

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

在非越狱设备上。

于 2014-04-02T18:33:43.830 回答
1

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

实际起作用的是可以在此处找到并在此处使用以下代码块进行讨论的内容。

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 应用程序执行它。

于 2013-11-01T18:50:06.333 回答