2011-12-30 7 views
12

Attualmente sto provando a scrivere un'applicazione che intercetta messaggi di testo e reagisce a seconda del contenuto di quel messaggio. Ho provato ad agganciare il metodo _receivedMessage:(struct __CKSMSRecord *)message replace:(BOOL)replace nella classe CKSMSService, ma questo non viene richiamato affatto.Jailbreak IOS Come intercettare SMS/Messaggi di testo

Qualcuno potrebbe dirmi per quale funzione/classe devo collegarmi? Devo intercettare il messaggio di testo prima che venga visualizzato e memorizzato nel database. Sono su IOS 5.0.1.

Qualsiasi aiuto è veramente apprezzato.

+0

Se il vostro interessato a questa domanda perché non sostenere la proposta Area 51 di [site Stack Cambio carcere di rottura] (http://area51.stackexchange.com/proposals/18154/ios-jailbreaking-development?referrer=EuWVi6IpN0_KzzEhC7I -Qw2) – rjstelling

risposta

10

Questo snippet di codice deve intercettare messaggi SMS. È possibile estenderlo per altri tipi di notifiche. Funzionerà anche su iOS 5.0.1. Tuttavia, non funziona con iMessage. Collegamento con la struttura CoreTelephony (ci sono mucchio di intestazioni private lì che hai posso classe-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

Come vedi le intestazioni private e le class-dump? – brianestey

+0

Ciao @rajagp, sai come bloccare i messaggi dopo che la notifica è stata ricevuta? – RVN

+0

C'è qualche alternativa per farlo. Sto usando il file di intestazione Coretelephony.h. Posso implementare le notifiche sms usando questa intestazione. –

1

Anche se il manifesto già accettato rajagp's answer, sono abbastanza sicuro che non fa quello che in realtà la questione ha chiesto , su iOS 5. Per iOS 5, non visualizzo più il messaggio contenuto, sebbene venga notificato che è presente un nuovo messaggio.

Quindi, quello che ho fatto è prendere il gestore di notifica di rajagp per kCTMessageReceivedNotification e al suo interno, use the code posted here to actually get the content of the text message, dal database SMS.

0

Questo funziona ancora su iOS 7, ma ho scoperto che è necessario un leggero ritardo dopo aver ricevuto la notifica kCTMessageReceivedNotification. Altrimenti ti mancheranno gli SMS appena ricevuti. Io uso un ritardo di 0.1 sec, con un [self performSelector .. afterDelay: 0.1];