热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

使用CTMessageCenter发送SMS(ios7)-SendingSMSusingCTMessageCenter(iOS7)

IamtryingtosendsmsprogrammaticallyusingprivateAPI.Myphoneisnotjailbroken.我正在尝试使用私有AP

I am trying to send sms programmatically using private API. My phone is not jailbroken.

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

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

This code always prints "Message not SENT". Can anyone help me ?

此代码总是打印“未发送的消息”。谁能帮帮我吗?

2 个解决方案

#1


2  

I guess, you have to write the telephone number in E.123 international notation. So add plus sign and country code. For a phone number is USA replace the leading 0 with +1:

我猜,你必须用E.123国际表示法写电话号码。加上+号和国家代码。对于一个电话号码是USA,用+1替换领先的0:

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

For a phone number is Sri Lanka use the appropriate country code +94.

一个电话号码是斯里兰卡使用适当的国家代码+94。

UPDATE

更新

I've tested old working iOS 5 code under iOS 7... sendSMSWithText:serviceCenter:toAddress: returns NO. The same while using the new method sendSMSWithText:serviceCenter:toAddress:withMoreToFollow:

我在ios7下测试了老的ios5代码……sendSMSWithText:serviceCenter:解决:没有回报。使用新方法sendSMSWithText:serviceCenter:toAddress:withMoreToFollow:

Panagiotis' suggestion seems correct :-/

Panagiotis的建议似乎是对的:-/

UPDATE 2

更新2

https://stackoverflow.com/a/20425853/2270880 gives the right answer.

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

Under iOS 7 the app needs two entitlements com.apple.CommCenter.Messages-send and com.apple.coretelephony.Identity.get. Adding additional entitlements via file appname.entitlements (and set in target's Build Settings > All > Code Signing > Code Signing Entitlements) give you the error

在ios7系统下,这款应用需要两个授权许可。Messages-send com.apple.coretelephony.Identity.get。通过文件appname添加额外的权利。权限(并在target的构建设置中设置>所有的>代码签名>代码签名权限)会给您带来错误

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

on non-jailbroken devices.

non-jailbroken设备。

#2


1  

I have been trying to do this on iOS 6.1 for way long and as I figured out eventually this method could not be used since iOS 6. Last time I could make this code execute successfully was on iOS 5 (there is a Peanut.app on the web working).

我在iOS 6.1上已经尝试了很长一段时间了,我发现这个方法在iOS 6之后就不能用了。上次我能让这个代码成功执行是在ios5上(有一个花生。应用程序在网上工作)。

What actually worked is what can be found here and discussed here as well with the following code block.

真正起作用的是可以在这里找到并在这里讨论的代码块。

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

Haven't tried to implement on non-jailbreak iOS though. I hope you can make it!

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

** EDIT

* *编辑

Let me correct myself! Your code does work on a jailbreak tweak using the imagent executable. Just couldn't execute it straight from an xCode app.

让我正确的自己!您的代码使用imagent可执行程序进行破解。只是无法直接从xCode应用中执行。


推荐阅读
  • 开机自启动的几种方式
    0x01快速自启动目录快速启动目录自启动方式源于Windows中的一个目录,这个目录一般叫启动或者Startup。位于该目录下的PE文件会在开机后进行自启动 ... [详细]
  • javax.mail.search.BodyTerm.matchPart()方法的使用及代码示例 ... [详细]
  • 本文详细介绍了在 CentOS 7 系统中配置 fstab 文件以实现开机自动挂载 NFS 共享目录的方法,并解决了常见的配置失败问题。 ... [详细]
  • 在JavaWeb开发中,文件上传是一个常见的需求。无论是通过表单还是其他方式上传文件,都必须使用POST请求。前端部分通常采用HTML表单来实现文件选择和提交功能。后端则利用Apache Commons FileUpload库来处理上传的文件,该库提供了强大的文件解析和存储能力,能够高效地处理各种文件类型。此外,为了提高系统的安全性和稳定性,还需要对上传文件的大小、格式等进行严格的校验和限制。 ... [详细]
  • 基于Net Core 3.0与Web API的前后端分离开发:Vue.js在前端的应用
    本文介绍了如何使用Net Core 3.0和Web API进行前后端分离开发,并重点探讨了Vue.js在前端的应用。后端采用MySQL数据库和EF Core框架进行数据操作,开发环境为Windows 10和Visual Studio 2019,MySQL服务器版本为8.0.16。文章详细描述了API项目的创建过程、启动步骤以及必要的插件安装,为开发者提供了一套完整的开发指南。 ... [详细]
  • 在处理大规模数据数组时,优化分页组件对于提高页面加载速度和用户体验至关重要。本文探讨了如何通过高效的分页策略,减少数据渲染的负担,提升应用性能。具体方法包括懒加载、虚拟滚动和数据预取等技术,这些技术能够显著降低内存占用和提升响应速度。通过实际案例分析,展示了这些优化措施的有效性和可行性。 ... [详细]
  • 本文介绍了如何在iOS平台上使用GLSL着色器将YV12格式的视频帧数据转换为RGB格式,并展示了转换后的图像效果。通过详细的技术实现步骤和代码示例,读者可以轻松掌握这一过程,适用于需要进行视频处理的应用开发。 ... [详细]
  • 本文探讨了 Java 中 Pair 类的历史与现状。虽然 Java 标准库中没有内置的 Pair 类,但社区和第三方库提供了多种实现方式,如 Apache Commons 的 Pair 类和 JavaFX 的 javafx.util.Pair 类。这些实现为需要处理成对数据的开发者提供了便利。此外,文章还讨论了为何标准库未包含 Pair 类的原因,以及在现代 Java 开发中使用 Pair 类的最佳实践。 ... [详细]
  • IOS Run loop详解
    为什么80%的码农都做不了架构师?转自http:blog.csdn.netztp800201articledetails9240913感谢作者分享Objecti ... [详细]
  • 在多线程并发环境中,普通变量的操作往往是线程不安全的。本文通过一个简单的例子,展示了如何使用 AtomicInteger 类及其核心的 CAS 无锁算法来保证线程安全。 ... [详细]
  • 在Delphi7下要制作系统托盘,只能制作一个比较简单的系统托盘,因为ShellAPI文件定义的TNotifyIconData结构体是比较早的版本。定义如下:1234 ... [详细]
  • 本文全面解析了 Python 中字符串处理的常用操作与技巧。首先介绍了如何通过 `s.strip()`, `s.lstrip()` 和 `s.rstrip()` 方法去除字符串中的空格和特殊符号。接着,详细讲解了字符串复制的方法,包括使用 `sStr1 = sStr2` 进行简单的赋值复制。此外,还探讨了字符串连接、分割、替换等高级操作,并提供了丰富的示例代码,帮助读者深入理解和掌握这些实用技巧。 ... [详细]
  • 深入解析 Android 中 EditText 的 getLayoutParams 方法及其代码应用实例 ... [详细]
  • 深入解析 Android TextView 中 getImeActionLabel() 方法的使用与代码示例 ... [详细]
  • 使用int而非const int声明初始化为0的整型数组 ... [详细]
author-avatar
可爱de小蜗牛
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有