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.
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. –