4 Stimmen

Gerätetoken in Push-Benachrichtigung

Ich möchte nur bestimmte Benutzer per Push-Benachrichtigung erreichen.

Aus dem, was ich in den Apple-Dokumenten gelesen habe. Der Code zur Registrierung für Push-Benachrichtigungen lautet wie folgt:

- (void)applicationDidFinishLaunching:(UIApplication *)app {
   // andere Einrichtungsaufgaben hier....
    [[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound)];
}

// Delegationsmethoden
- (void)application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)devToken {
    const void *devTokenBytes = [devToken bytes];
    self.registered = YES;
    [self sendProviderDeviceToken:devTokenBytes]; // benutzerdefinierte Methode
}

- (void)application:(UIApplication *)app didFailToRegisterForRemoteNotificationsWithError:(NSError *)err {
    NSLog(@"Fehler bei der Registrierung. Fehler: %@", err);
}

In der Methode appdidRegisterForRemoteNotif.. sehe ich nur, dass devToken-Bytes erstellt und an den Server gesendet werden.. aber wie kann ich erkennen, welcher Geräte-Token zu welchem Benutzer gehört. Wenn also mein Gerät den Namen Shubhank's iPhone trägt, wie kann ich die Information senden, dass mein iPhone dieses ist und dies mein Geräte-Token ist.

6voto

Manish Ahuja Punkte 4499

Im Allgemeinen aktualisieren Sie nicht den APNs-Token auf dem Server in der Delegatenmethode selbst. Sie speichern ihn und aktualisieren ihn später, wenn der Benutzer identifiziert ist.

Sie können es auf diese Weise tun:

- (void)application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)devToken {

const unsigned *tokenBytes = [deviceToken bytes];
NSString *hexToken = [NSString stringWithFormat:@"%08x%08x%08x%08x%08x%08x%08x%08x",
                      ntohl(tokenBytes[0]), ntohl(tokenBytes[1]), ntohl(tokenBytes[2]),
                      ntohl(tokenBytes[3]), ntohl(tokenBytes[4]), ntohl(tokenBytes[5]),
                      ntohl(tokenBytes[6]), ntohl(tokenBytes[7])];
[[MyModel sharedModel] setApnsToken:hexToken];

}

damit haben Sie den APNs-Token im Model-Objekt (MyModel) gespeichert. Und später, wenn Sie Ihren Benutzer identifiziert haben (durch Anmeldung/Registrierung oder welche Methode auch immer)

können Sie diese Methode aufrufen

[self sendProvidedDeviceToken: [[MyModel sharedModel] apnsToken] forUserWithId: userId];  //Benutzerdefinierte Methode

Auf diese Weise haben Sie den Gerätetoken mit dem Benutzer verknüpft. Hoffentlich hilft dies!

2voto

Johan Karlsson Punkte 1125

Sie müssen den Gerätenamen senden, wenn Sie sich in Ihrer benutzerdefinierten Methode registrieren. Der Code sollte ungefähr so aussehen. Sie könnten alle Informationen senden, die für Ihren Kontext geeignet sind, z. B. einen Benutzernamen, wenn die Anwendung einen solchen verwendet. Es liegt an Ihnen zu entscheiden, welche Informationen Sie an Ihren Server senden, um eine Verbindung zwischen dem Token und dem Gerät herzustellen.

// Delegationsmethoden
- (void)application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)devToken {
    const void *devTokenBytes = [devToken bytes];
    self.registered = YES;
    [self sendProviderDeviceToken:devTokenBytes deviceName:[[UIDevice currentDevice] name]]; // benutzerdefinierte Methode
}

1voto

lxt Punkte 31030

Es liegt an Ihnen, alle erforderlichen Informationen an Ihren eigenen Push-Service zu senden.

Aber ein wichtiger Punkt: Das Push-Token ist nicht das Gerätetoken (UDID). Push-Tokens sind eindeutig für jede App, die sie anfordert, und können sich ändern. Wenn Sie zusätzlich den Gerätenamen erhalten möchten, können Sie [[UIDevice currentDevice] name] aufrufen und an das System senden, das Sie zur Speicherung Ihrer Push-Tokens verwenden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X