Joh*_*ith 2 sms iphone-privateapi ios
我想知道当收到短信时是否可以收到短信广播。我还想检索整个正文和发件人信息。我想知道这是否可以通过私有框架而不越狱来实现。我不会出售该应用程序,它仅适用于我的个人手机,但我正在努力避免越狱猫和老鼠。
我是这样做的。无需越狱,只需私有 API。
核心电话框架:
extern CFStringRef const kCTMessageReceivedNotification;
CFNotificationCenterRef CTTelephonyCenterGetDefault();
void CTTelephonyCenterAddObserver(CFNotificationCenterRef ct, void* observer, CFNotificationCallback callBack, CFStringRef name, const void *object, CFNotificationSuspensionBehavior sb);
void CTTelephonyCenterRemoveObserver(CFNotificationCenterRef center, void *observer, CFStringRef name, const void *object);
Run Code Online (Sandbox Code Playgroud)
私有 IMDPersistence 框架:
int IMDMessageRecordGetMessagesSequenceNumber();
Run Code Online (Sandbox Code Playgroud)
私有 ChatKit 框架:可以在这里CKDBMessage
找到
CTTelephonyCenterAddObserver(CTTelephonyCenterGetDefault(),
NULL,
TelephonyObserver,
kCTMessageReceivedNotification,
NULL,
CFNotificationSuspensionBehaviorHold);
Run Code Online (Sandbox Code Playgroud)
从 iOS 8 开始,您无法传递NULL
通知名称参数来接收所有电话通知。您必须告诉它您想要观察哪个通知,就像达尔文通知中心一样。
void TelephonyObserver(CFNotificationCenterRef center, void *observer, CFStringRef name, const void *object, CFDictionaryRef userInfo)
{
if ([(__bridge NSString*)name isEqualToString:(__bridge NSString*)kCTMessageReceivedNotification])
{
SmsReceived();
}
}
Run Code Online (Sandbox Code Playgroud)
void SmsReceived()
{
int lastID = IMDMessageRecordGetMessagesSequenceNumber();
CKDBMessage* msg = [[CKDBMessage alloc] initWithRecordID:lastID];
}
Run Code Online (Sandbox Code Playgroud)
我们在这里做什么。在我们收到 SMS 已收到的通知后,我们将获取 SMS 数据库中的最后一行 ID ( lastID
)。然后使用该 ID 创建消息对象。msg
将包含所有消息内容。
使用CKDBMessage
并且initWithRecordID:
您可以访问任何短信数据库记录。如果没有找到行 IDinitWithRecordID:
将返回 nil。
适用于 iOS 7.x - 9.1。仅针对 SMS 消息进行了测试,但也应该适用于 MMS。评论中的用户在 iMessages 上测试成功。
iOS 8.3 更新
从 iOS 8.3 开始,如果没有越狱,您将无法收到kCTMessageReceivedNotification
通知。你需要权利
<key>com.apple.CommCenter.fine-grained</key>
<array>
<string>spi</string>
</array>
Run Code Online (Sandbox Code Playgroud)
iOS 11 更新
从 iOS 11 开始,您无法使用CKDBMessage
. Apple 在沙箱中添加了另一条规则,可能要求应用程序签署特定权利才能使用该 API。
归档时间: |
|
查看次数: |
3323 次 |
最近记录: |