IOS Jailbreak Как перехватить смс / текстовые сообщения - PullRequest
12 голосов
/ 30 декабря 2011

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

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

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

Ответы [ 3 ]

10 голосов
/ 12 января 2012

Этот фрагмент кода должен перехватывать 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);
}
1 голос
/ 14 июня 2012

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

Итак, я взял обработчик уведомлений rajagp для kCTMessageReceivedNotification, а внутри него использовал размещенный здесь код, чтобы фактически получить содержимое текстового сообщения из базы данных SMS.

0 голосов
/ 16 февраля 2016

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

...