2011-12-30 4 views
12

Я сейчас пытаюсь написать приложение, которое перехватывает текстовые сообщения и реагирует в зависимости от содержимого этого сообщения. Я попытался подключиться к методу _receivedMessage:(struct __CKSMSRecord *)message replace:(BOOL)replace в классе CKSMSService, но это, похоже, вообще не вызвало.IOS Jailbreak Как перехватывать SMS/текстовые сообщения

Может кто-нибудь, пожалуйста, скажите мне, какую функцию/класс я должен подключить? Мне нужно перехватить текстовое сообщение, прежде чем оно будет отображаться и храниться в базе данных. Я на IOS 5.0.1.

Любая помощь действительно оценена.

+0

Если вы заинтересованы в этом вопросе, почему бы не поддержать предложение Area 51 для [сайта для обмена сайтами с использованием тюремного заключения] (http://area51.stackexchange.com/proposals/18154/ios-jailbreaking-development?referrer=EuWVi6IpN0_KzzEhC7I -Qw2) – rjstelling

ответ

10

Этот фрагмент кода должен перехватывать SMS-сообщения. Вы можете продлить его для других видов уведомлений. Будет работать и на iOS 5.0.1. Однако не работает с iMessages. Связь с рамкой CoreTelephony (есть куча частных заголовков, которые вы бы могу класс свалка)

#include <dlfcn.h> 

#define CORETELPATH "/System/Library/PrivateFrameworks/CoreTelephony.framework/CoreTelephony" 
id(*CTTelephonyCenterGetDefault)(); 

void (*CTTelephonyCenterAddObserver) (id,id,CFNotificationCallback,NSString*,void*,int); 


static void telephonyEventCallback(CFNotificationCenterRef center, void *observer, CFStringRef name, const void *object, CFDictionaryRef userInfo) 
{ 
    NSString *notifyname=(NSString *)name; 
    if ([notifyname isEqualToString:@"kCTMessageReceivedNotification"])//received SMS 
    { 
     NSLog(@" SMS Notification Received :kCTMessageReceivedNotification"); 
     // Do blocking here. 
    } 
} 

-(void) registerCallback { 

void *handle = dlopen(CORETELPATH, RTLD_LAZY); 
    CTTelephonyCenterGetDefault = dlsym(handle, "CTTelephonyCenterGetDefault"); 
    CTTelephonyCenterAddObserver = dlsym(handle,"CTTelephonyCenterAddObserver"); 
    dlclose(handle); 
    id ct = CTTelephonyCenterGetDefault(); 

    CTTelephonyCenterAddObserver(
           ct, 
           NULL, 
           telephonyEventCallback, 
           NULL, 
           NULL, 
           CFNotificationSuspensionBehaviorDeliverImmediately); 
} 
+0

Как вы видите приватные заголовки и класс-дамп? – brianestey

+0

Привет @rajagp, знаете ли вы, как блокировать сообщения после получения уведомления? – RVN

+0

Есть ли альтернатива этому. Я использую заголовочный файл Coretelephony.h. Могу ли я реализовать sms-уведомления с помощью этого заголовка. –

1

Хотя плакат уже принял rajagp's answer, я уверен, что он не делает то, что на самом деле задан вопрос , на iOS 5. Для iOS 5 я больше не вижу сообщение содержание, хотя я получаю уведомление о появлении нового сообщения.

Итак, что я сделал, это взять обработчик уведомлений rajagp для kCTMessageReceivedNotification и внутри него, use the code posted here to actually get the content of the text message, из базы данных SMS.

0

Это все еще работает на iOS 7, но я обнаружил, что вам нужна небольшая задержка после получения уведомления kCTMessageReceivedNotification. Кроме того, вы пропустите только что полученное SMS. Я использую задержку в 0,1 с, [self performSelector .. afterDelay: 0.1];