2016-06-06 2 views
4

Je ne pouvais pas comprendre comment puis-je envoyer un message à partir d'un appareil iOS à un autre appareil iOS, et en essayant de comprendre la différence entre les notifications Firebase et Google Cloud Messaging.Firebase Google Cloud messagerie de périphérique à périphérique

Firebase Notifications dit du serveur, vous pouvez envoyer un message aux périphériques.

Google Cloud Messaging: il envoie des messages du serveur aux périphériques (en aval) ou périphérique au serveur (en amont) !!

Exemple d'amont:

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

Qu'en est-il si je dois envoyer un message push d'un appareil à! Cela signifie-t-il que, après que le périphérique envoie un message au serveur, je dois programmer le serveur Firebase pour envoyer le push au client? c'est vraiment déroutant!

+0

Vous avez raison concernant le flux à envoyer Device to Device. Envoyer en amont à votre serveur puis le serveur envoie en aval à l'autre périphérique. –

Répondre

1

Non, vous ne pouvez pas faire cela sur iOS en utilisant firebase, ce que vous devez faire est d'appeler un service sur votre firebase qui enverra une notification à l'autre périphérique. APNS et GCM sont un peu différents en termes de configuration du serveur. Pour GCM, vous avez juste besoin que la clé API soit ajoutée dans l'appel POST que vous effectuez à https://android.googleapis.com/gcm/send, ce qui peut être fait n'importe où serveur, appareil mobile, etc. Tout ce dont vous avez besoin est le jeton de périphérique cible et la clé API. APNS fonctionne différemment. Vous devez joindre le certificat SSL du serveur que vous créez sur le portail des développeurs Apple pour vous authentifier et envoyer une notification push à un périphérique. Je ne suis pas sûr comment vous pourriez réaliser ceci sur un appareil d'iOS.

Ce fil clarifie la différence réelle entre GCM et Firebase,

Real-time Push notifications with Firebase

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

Firebase et GCM sont différents, mais ils peuvent être utilisés pour atteindre les mêmes objectifs. J'espère que cela vous aide.

0

Je ne pense pas que Firebase soit actuellement équipé pour gérer ce scénario. Vous avez besoin d'un code secondaire pour le gérer. Soit vous pouvez obtenir d'hébergement et de faire comme un point final php ce qui peut utilisé pour incorporer le code

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

et le faire fonctionner, ou vous avez besoin de trouver un autre service qui peut servir de back-end.

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

Cette société Batch.com semble être la meilleure solution que je l'ai trouvé à ce jour. J'ai pu faire en sorte qu'un périphérique d'utilisateur envoie une charge utile json à un noeud final sur son serveur, puis envoie des notifications push personnalisées à des périphériques spécifiques ciblés. Il semble que Batch soit spécifiquement une société Push Notification, et il semble que le plan de base gratuit est assez bon pour gérer ce dont vous aurez besoin, silimar à comment Parse a travaillé.

Voici le code que j'ai écrit pour envoyer les notifications push Objectif C. (Il y a aussi un exemple Swift 2 et Swift 3 que vous pouvez télécharger depuis Batch.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 était assez facile à installer avec Cocoa Pods.

J'ai aussi utilisé ce code pour le faire fonctionner:

Dans délégué app:

@import Batch 

En didFinishLaunching:

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

plus tard dans délégué app:

- (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]; 

} 

Donc, c'est comme ça que vous le faites, en plus de la configuration et de l'installation qui sont toutes expliquées sur le site Batch.com.

Une fois que vous obtenez votre jeton de firebase, vous vous inscrivez essentiellement sur Lot avec

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

dans Délégué App. Ensuite, lorsque vous voulez que vos utilisateurs device1 envoient un Push à un autre périphérique2, en supposant que vous ayez envoyé l'ID personnalisé de device1 à device2, vous pouvez utiliser cet ID personnalisé pour envoyer la charge de notification push à l'API de Batch.com et Batch traitera le serveur trucs secondaires à Apple APN et vos notifications Push apparaissent sur device2.