Je suis en train de mettre en œuvre le mode d'arrière-plan pour l'application VoIP en utilisant les nouveaux mécanismes fournis par l'iPhone OS 4.xiPhone OS 4.x - sockets TCP fond ne répondent pas
Toujours sans succès ... reste d'application silencieux en mode d'arrière-plan lorsque certaines données arrivent du serveur via le socket TCP.
Selon la documentation, les suivants deux choses doivent être faites:
- Ajouter
voip
valeur pourRequired background modes
dansInfo.plst
fichier - Set propriété
kCFStreamNetworkServiceType
deCFReadStreamRef
objet àkCFStreamNetworkServiceTypeVoIP
valeur
I utilise un socket BSD créé de manière externe pour instancier CFReadStreamRef
avec la fonction CFStreamCreatePairWithSocket
. La poignée du socket est correcte - vérifiée avec quelques tests. Donc j'obtiens un objet CFReadStreamRef
correct, que je configurerai et ouvrirai plus tard.
Voici le morceau de code:
CFSocketNativeHandle socket = (CFSocketNativeHandle)socketHandle;
CFStreamCreatePairWithSocket(kCFAllocatorDefault, socket, &sipSocketReadStream, nil);
CFReadStreamSetProperty(sipSocketReadStream, kCFStreamNetworkServiceType, kCFStreamNetworkServiceTypeVoIP);
NSInputStream *inputStream = (NSInputStream*)sipSocketReadStream;
[inputStream setDelegate:self];
[inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
CFReadStreamOpen(sipSocketReadStream);
S'il vous plaît noter - mon délégué pour NSInputStream
reçoit avec succès l'événement Stream Opened
. Mais tous les autres événements ne sont tout simplement pas venus - je m'attendais à recevoir un événement lorsqu'un certain trafic TCP a commencé à arriver.