2011-12-30 18 views
12

Actualmente estoy tratando de escribir una aplicación que intercepta mensajes de texto y reacciona dependiendo del contenido de ese mensaje. Intenté conectarme al método _receivedMessage:(struct __CKSMSRecord *)message replace:(BOOL)replace en la clase CKSMSService, pero parece que esto no se llama.IOS Jailbreak Cómo interceptar mensajes de texto/SMS

¿Podría alguien decirme por favor qué función/clase tengo que enganchar? Necesito interceptar el mensaje de texto antes de que se muestre y almacene en la base de datos. Estoy en IOS 5.0.1.

Cualquier ayuda es realmente apreciada.

+0

Si estás interesado en esta pregunta por qué no apoyar la propuesta del Área 51 para un [instalaciones de pila Cambio de cárcel para romper] (http://area51.stackexchange.com/proposals/18154/ios-jailbreaking-development?referrer=EuWVi6IpN0_KzzEhC7I -Qw2) – rjstelling

Respuesta

10

Este fragmento de código debe interceptar mensajes SMS: puede ampliarlo para otros tipos de notificaciones. Funcionará en iOS 5.0.1 también. Sin embargo, no funciona con iMessages. Enlace con el marco CoreTelephony (hay montón de cabeceras privadas hay que habíamos puedo clase-dump)

#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

¿Cómo ves los encabezados privados y volcados de clase? – brianestey

+0

Hola @rajagp, ¿sabes cómo bloquear los mensajes después de recibir la notificación? – RVN

+0

¿Hay alguna alternativa para hacer eso? Estoy usando el archivo de encabezado Coretelephony.h. ¿Puedo implementar notificaciones de SMS utilizando este encabezado? –

1

Aunque el cartel ya aceptó rajagp's answer, estoy bastante seguro de que no hace lo que la cuestión de hecho pidió , en iOS 5. Para iOS 5, ya no veo el mensaje contenido, aunque me notifican que hay un mensaje nuevo.

Por lo tanto, lo que he hecho es tomar controlador de notificación de rajagp para kCTMessageReceivedNotification, y en su interior, use the code posted here to actually get the content of the text message, a partir de la base de datos de SMS.

0

Esto todavía funciona en iOS 7, pero encontré que necesita un ligero retraso después de recibir la notificación kCTMessageReceivedNotification. De lo contrario, perderá los SMS recién recibidos. Uso un retraso de 0.1 segundos, con un [self performSelector .. afterDelay: 0.1];

Cuestiones relacionadas