2016-06-06 10 views
4

Ich konnte nicht verstehen, wie ich eine Nachricht vom iOS-Gerät an ein anderes iOS-Gerät senden kann und den Unterschied zwischen Firebase-Benachrichtigungen und Google Cloud Messaging verstehen.Firebase Google Cloud Messaging von Gerät zu Gerät

Firebase Benachrichtigungen Sagen Sie vom Server können Sie eine Nachricht an Geräte senden.

Google Cloud Messaging: sendet Nachrichten vom Server an Geräte (Downstream) oder Gerät an Server (Upstream) !!

Beispiel Upstream:

[[FIRMessaging message]sendMessage:(nonnull NSDictionary *)message 
           to:(nonnull NSString *)receiver 
        withMessageID:(nonnull NSString *)messageID 
         timeToLive:(int64_t)ttl; 

Was ist, wenn ich brauche eine Push-Nachricht von Gerät zu Gerät senden! Bedeutet es, nachdem das Gerät eine Nachricht an den Server sendet, muss ich den Firebase-Server so programmieren, dass Push an den Client gesendet wird? Es ist wirklich verwirrend!

+0

Sie haben den Fluss korrekt, um Gerät an Gerät zu senden. Senden Sie Upstream an Ihren Server, dann sendet der Server Downstream an andere Geräte. –

Antwort

1

Nein, Sie können dies nicht auf iOS mit Firebase tun, was Sie tun sollten, ist ein Dienst auf Ihrer Firebase anrufen, die eine Benachrichtigung an das andere Gerät senden wird. APNS und GCM unterscheiden sich in Bezug auf die Serverkonfiguration ein wenig.

Für GCM benötigen Sie nur den API-Schlüssel, den Sie in den POST-Aufruf an https://android.googleapis.com/gcm/send hinzufügen, der an jedem beliebigen Server, mobilen Gerät usw. ausgeführt werden kann. Sie benötigen lediglich das Zielgeräte-Token und den API-Schlüssel.

APNS funktioniert anders Sie müssen das SSL-Zertifikat anhängen, das Sie auf dem Apple-Entwicklerportal erstellen, um sich zu authentifizieren und eine Push-Benachrichtigung an ein Gerät zu senden. Ich bin mir nicht sicher, wie Sie dies auf einem iOS-Gerät erreichen können.

Dieser Thread verdeutlicht den Unterschied zwischen GCM und Firebase,

Real-time Push notifications with Firebase

https://firebase.google.com/support/faq/#gcm-not

Firebase und GCM sind verschieden, aber sie können verwendet werden, um die gleichen Ziele zu erreichen. Hoffe es hilft dir.

0

Ich glaube nicht, Firebase ist derzeit ausgestattet, um dieses Szenario zu behandeln. Sie benötigen etwas Sever Side-Code, um damit umzugehen. Entweder man könnte Hosting erhalten und wie ein PHP-Endpunkt machen, was verwendet wird, kann die

[[FIRMessaging message]sendMessage:(nonnull NSDictionary *)message 
           to:(nonnull NSString *)receiver 
        withMessageID:(nonnull NSString *)messageID 
         timeToLive:(int64_t)ttl; 

Code zu integrieren und damit es funktioniert, oder Sie brauchen, um einen anderen Dienst zu finden, die als Backend dienen kann.

https://techcrunch.com/2016/02/02/batch-now-integrates-with-firebase-to-create-a-parse-alternative/

Diese Batch.com Unternehmen scheint die beste Lösung zu sein, die ich bisher gefunden habe. Ich war in der Lage, ein Benutzergerät senden eine Json-Payload zu einem Endpunkt auf ihrem Server, der dann angepasste Push-Benachrichtigungen an bestimmte Zielgeräte sendet. Es scheint, als wäre Batch eine Push-Notification-Firma, und es scheint, als ob der kostenlose Basisplan gut genug ist, um das zu bewältigen, was Sie brauchen, silmar, wie Parse funktioniert.

Hier ist der eigentliche Code, den ich für das Senden der Push-Benachrichtigungen Objective C geschrieben hat. (Es gibt auch ein Swift 2 und Swift 3 Beispiel, das Sie von Batch herunterladen können.com)

NSURL *theURL = [NSURL URLWithString:[NSString stringWithFormat:@"https://api.batch.com/1.1/(your API code here)/transactional/send"]]; 
NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:theURL cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:30.0f]; 

[theRequest setValue:@"(your other API key here" forHTTPHeaderField:@"X-Authorization"]; 

NSDictionary *messageDict = [[NSDictionary alloc]initWithObjectsAndKeys:@"Hey This is a Push!", @"title", @"But it's a friendly push. Like the kind of push friends do to each other.",@"body", nil]; 
NSArray *recipientsArray = [[NSArray alloc]initWithArray:someMutableArrayThatHasUsersFirebaseTokens]; 
NSDictionary *recipientsDict = [[NSDictionary alloc]initWithObjectsAndKeys:recipientsArray, @"custom_ids", nil]; 

NSDictionary *gistDict = @{@"group_id":@"just some name you make up for this pushes category that doesn't matter",@"recipients":recipientsDict,@"message":messageDict, @"sandbox":@YES}; 

NSError *jsonError; 

NSData *jsonData = [NSJSONSerialization dataWithJSONObject:gistDict options:NSJSONWritingPrettyPrinted error:&jsonError]; 

[theRequest setHTTPMethod:@"POST"]; 
[theRequest setHTTPBody:jsonData]; 

NSOperationQueue *queue1 = [[NSOperationQueue alloc] init]; 
[NSURLConnection sendAsynchronousRequest:theRequest queue:queue1 completionHandler:^(NSURLResponse *response, NSData *POSTReply, NSError *error){ 
    if ([POSTReply length] >0 && error == nil){ 
     dispatch_async(dispatch_get_main_queue(), ^{ 
      NSString *theReply = [[NSString alloc] initWithBytes:[POSTReply bytes] length:[POSTReply length] encoding:NSASCIIStringEncoding]; 
      NSLog(@"BATCH PUSH FINISHED:::%@", theReply); 
     }); 
    }else { 
     NSLog(@"BATCH PUSH ERROR!!!:::%@", error); 
    } 
}]; 

Batch war ziemlich einfach mit Cocoa Pods zu installieren.

habe ich auch diesen Code es zum Laufen zu bringen:

In AppDelegate:

@import Batch 

In didFinishLaunching:

[Batch startWithAPIKey:@"(your api key)"]; // dev 
[BatchPush registerForRemoteNotifications]; 

dann später in AppDelegate:

- (void)tokenRefreshNotification:(NSNotification *)notification { 
    // Note that this callback will be fired everytime a new token is generated, including the first 
    // time. So if you need to retrieve the token as soon as it is available this is where that 
    // should be done. 
    NSString *refreshedToken = [[FIRInstanceID instanceID] token]; 
    NSLog(@"InstanceID token: %@", refreshedToken); 

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
    [defaults setObject:refreshedToken forKey:@"pushKey"]; 
    [defaults synchronize]; 


    BatchUserDataEditor *editor = [BatchUser editor]; 
    [editor setIdentifier:refreshedToken]; // Set to `nil` if you want to remove the identifier. 
    [editor save]; 


    [self connectToFcm]; 

} 

So wie Sie es tun, abgesehen von den Setup- und Installationsarbeiten, die auf der Website von Batch.com erklärt werden.

Sobald Sie Ihr Token von Feuerbasis zu erhalten, registrieren Sie im Grunde auf Batch mit

BatchUserDataEditor *editor = [BatchUser editor]; 
[editor setIdentifier:refreshedToken]; 
[editor save]; 

in App Delegierter. Wenn Sie möchten, dass Ihr Benutzer Gerät1 einen Push an ein anderes Gerät2 sendet, vorausgesetzt, Sie haben die benutzerdefinierte ID von Gerät1 irgendwie an device2 gesendet, können Sie diese benutzerdefinierte ID verwenden, um die Push-Benachrichtigungs-Payload an die API von Batch.com zu senden, und Batch verarbeitet den Server Side-Zeug zu Apple APN und Ihre Push-Benachrichtigungen erscheinen auf device2.

Verwandte Themen