Hallo Fellow Programmierer,IOS Push-Benachrichtigungen zwischen den Geräten - GCDAsyncSocket
Ich bin versucht, Benutzern zu ermöglichen, Push-Benachrichtigungen an andere Benutzer zu senden (wie eine Freundesanfrage senden, etc.).
Das Endziel hier ist, dass meine iOS-App kontinuierlich einen bestimmten Hostnamen/Port-URL abhört, sobald sich ein Benutzer bei seinem Konto angemeldet hat (aka eine bestimmte Ansicht geladen hat). Mein Stack ist ein Express-Server, der mit einer MongoDB kommuniziert.
Lässt ein Benutzer sagen mit {account_id} angemeldet, wäre der Weg zu seinem Kundendaten sein. "http://72.89.157.153:3000/accounts/ {account_id}
ich meine App auf alle Anfragen an diese URL senden hören möchte ich bin Verwenden von GCDAsyncSocket-Bibliotheken, um mit der Ursache zu helfen.Wenn ich jedoch zu Testzwecken eine Verbindung zu http://72.89.157.153:3000/ herstelle, wird keine Delegate-Funktion aufgerufen.Ich habe viele Leute mit demselben Problem gesehen, aber ich kann keine Lösung erhalten, die ich gelesen habe.
Code:
SocketCo nnection.h
#ifndef SocketConnection_h
#define SocketConnection_h
#import "GCDAsyncSocket.h" // for TCP
@import CocoaAsyncSocket;
@interface SocketConnection : NSObject <GCDAsyncSocketDelegate>
/* GCDAsyncSocket */
@property (strong, nonatomic) GCDAsyncSocket *socket;
// Methods
+(SocketConnection *)sharedConnection;
@end
#endif /* SocketConnection_h */
SocketConnection.m
#import <Foundation/Foundation.h>
#import "SocketConnection.h"
@implementation SocketConnection
+(SocketConnection *)sharedConnection {
static dispatch_once_t once;
static SocketConnection *instance;
dispatch_once(&once, ^{
instance = [[SocketConnection alloc] init];
});
return instance;
}
-(id)init {
_socket = [[GCDAsyncSocket alloc] initWithDelegate:self delegateQueue:dispatch_get_main_queue()];
NSError *err = nil;
if (![_socket connectToHost:@"http://72.89.157.153" onPort:3000 error:&err]) {
printf("\nDid Not Return Okay: %s\n", [[err localizedDescription] UTF8String]);
} else {
printf("\nReturned Okay\n"); // This is printed
}
return self;
}
/* ASNYC DELEGATES */
/* I am expecting this method to be called when connectToHost: is called in init.. */
- (void)socket:(GCDAsyncSocket *)sender didConnectToHost:(NSString *)host port:(UInt16)port {
printf("I'm connected! Host:%s\n", [host UTF8String]);
}
- (void)socket:(GCDAsyncSocket *)sock didWriteDataWithTag:(long)tag {
printf("I have written That was easy.\n");
}
- (void)socket:(GCDAsyncSocket *)sender didReadData:(NSData *)data withTag:(long)tag {
printf("I have read That was easy.\n");
dispatch_async(dispatch_get_main_queue(), ^{
@autoreleasepool {
[_socket readDataWithTimeout:-1 tag:1];
}
});
}
@end
Hier ist der Ort, in dem Viewcontroller, wo ich eine Instanz von SocketConnection schaffen ...
-(void)viewDidAppear:(BOOL)animated {
/* Socket connector */
SocketConnection *s = [SocketConnection sharedConnection];
printf("port: %hu\n" ,s.socket.connectedPort); // prints 0 right now
}
Wenn Dies ist nicht der beste Weg, um mein Ziel zu erreichen. Bitte weisen Sie mich in die richtige Richtung (Link Lesungen, andere Frameworks, Bibliotheken etc.) Fragen bitte lass es mich wissen.
Vielen Dank für die Hilfe.