Подтвердить что ты не робот

IOS Jailbreak Как перехватывать SMS/текстовые сообщения

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

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

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

4b9b3361

Ответ 1

Этот фрагмент кода должен перехватывать 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);
}

Ответ 2

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

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

Ответ 3

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