2012-03-19 75 views
1

我正在编写一个应用程序,它可以从运营商测试不同的SMSC(短消息服务中心)。因此我需要更改iPhone用于发送短信的SMSC。有没有办法做到这一点?iOS以编程方式更改SMSC

Android提供了一个以SMSC作为参数的sendMessage方法,在iOS中有没有相当于?我不在乎它是否使用私有API调用,因为我不会释放我的应用程序(仅用于内部测试目的)。任何帮助表示感谢,谢谢。

+0

对于替代它可能是用于改变SMSC iPhone使用的,而不是直接发送通过不同的SMSC的代码。 – Nexus2k 2012-03-23 16:19:56

+0

另一种选择是在后台调用** 5005 * 7672 * SMSCNUMBER#,在私有API中是否有这样的事情? – Nexus2k 2012-03-26 14:15:14

回答

7

该解决方案适用于非越狱手机,但它不会进入应用商店。 它使用私有API,它非常类似于您的Android的sendMessage描述。

您必须将您的项目链接到CoreTelephony框架(现在公开),并创建如下所述的标头。还有一些例子也包括在内。

CTMessageCenter.h:

#import <Foundation/Foundation.h> 

@interface CTMessageCenter : NSObject 
{ 
} 

+ (id)sharedMessageCenter; 
- (id)init; 
- (id)sendSMS:(id)fp8; 
- (id)sendMMSFromData:(id)fp8 messageId:(unsigned int)fp12; 
- (id)sendMMS:(id)fp8; 
- (id)send:(id)fp8; 
- (id)incomingMessageWithId:(unsigned int)fp8 telephonyCenter:(struct __CTTelephonyCenter *)fp12 isDeferred:(BOOL)fp16; 
- (int)incomingMessageCount; 
- (id)allIncomingMessages; 
- (void)acknowledgeIncomingMessageWithId:(unsigned int)fp8; 
- (void)acknowledgeOutgoingMessageWithId:(unsigned int)fp8; 
- (id)incomingMessageWithId:(unsigned int)fp8; 
- (id)deferredMessageWithId:(unsigned int)fp8; 
- (id)statusOfOutgoingMessages; 
- (id)encodeMessage:(id)fp8; 
- (id)decodeMessage:(id)fp8; 
- (BOOL)isMmsEnabled; 
- (BOOL)isMmsConfigured; 
- (BOOL)sendSMSWithText:(id)fp8 serviceCenter:(id)fp12 toAddress:(id)fp16; 

@end 

例子:

#import "CTMessageCenter.h" 

BOOL success = [[CTMessageCenter sharedMessageCenter] sendSMSWithText:@"test" serviceCenter:serviceCenterNumberAsString toAddress:numberAsString]; 
+0

原始海报提到他正在使用该应用程序供个人使用,并且不打算提交给应用程序商店。这就是说,你的回答在回答他的问题上并不是很有建设性。 – brandonbocklund 2012-03-19 22:00:47

+0

@brandonbocklund你甚至读过答案吗?这是一种非批准的方式。我的问题是越狱的方式,而这正是他所要求的。 – fbernardo 2012-03-20 00:27:03

+0

@fbernardo感谢您的快速回复。只需要被开发人员程序接受,以便我可以在手机上进行测试。将回报。 – Nexus2k 2012-03-20 10:42:16

2

您需要使用AT命令到SIM卡上更新SMSC。

在iOS上,您可以使用Private Framework SKTelephonyController。

AT命令获取SIM卡上的当前SMSC: AT + CSCA?

写入SIM卡: AT + CSCA =“1xxxxxxxxxx”,145

+0

Nexus2k表示私有框架API不起作用,所以我只是提供了另一种解决方案。 – mikewen 2013-06-17 19:34:52