Delen via


De huidige gebruiker registreren voor pushmeldingen met behulp van ASP.NET

Overzicht

In dit onderwerp wordt beschreven hoe u registratie van pushmeldingen kunt aanvragen bij Azure Notification Hubs wanneer de registratie wordt uitgevoerd door ASP.NET Web API. In dit onderwerp wordt de zelfstudie Gebruikers waarschuwen met Notification Hubs uitgebreid. U moet de vereiste stappen in die zelfstudie al hebben voltooid om de geverifieerde mobiele service te maken. Zie Gebruikers waarschuwen met Notification Hubs voor meer informatie over het scenario gebruikers waarschuwen.

Uw app bijwerken

  1. Voeg in uw MainStoryboard_iPhone.storyboard de volgende onderdelen uit de objectbibliotheek toe:

    • Label: 'Pushen naar gebruiker met Notification Hubs'

    • Label: "InstallationId"

    • Label: "Gebruiker"

    • Tekstveld: 'Gebruiker'

    • Label: 'Wachtwoord'

    • Tekstveld: 'Wachtwoord'

    • Knop: "Aanmelden"

      Op dit moment ziet uw storyboard er als volgt uit:

      Schermopname van de app MainStoryboard_iPhone.storyboard met de onderdelen toegevoegd.

  2. Maak in de assistent-editor stopcontacten voor alle geschakelde besturingselementen en roep deze aan, verbind de tekstvelden met de weergavecontroller (gemachtigde) en maak een actie voor de aanmeldingsknop .

    Schermafbeelding van de assistent-editor in de app MainStoryboard_iPhone.storyboard

    Het bestand BreakingNewsViewController.h moet nu de volgende code bevatten:

    @property (weak, nonatomic) IBOutlet UILabel *installationId;
    @property (weak, nonatomic) IBOutlet UITextField *User;
    @property (weak, nonatomic) IBOutlet UITextField *Password;
    
    - (IBAction)login:(id)sender;
    
  3. Maak een klasse met de naam DeviceInfoen kopieer de volgende code naar de interfacesectie van het bestand DeviceInfo.h:

    @property (readonly, nonatomic) NSString* installationId;
    @property (nonatomic) NSData* deviceToken;
    
  4. Kopieer de volgende code in de implementatiesectie van het bestand DeviceInfo.m:

    @synthesize installationId = _installationId;
    
    - (id)init {
        if (!(self = [super init]))
            return nil;
    
        NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
        _installationId = [defaults stringForKey:@"PushToUserInstallationId"];
        if(!_installationId) {
            CFUUIDRef newUUID = CFUUIDCreate(kCFAllocatorDefault);
            _installationId = (__bridge_transfer NSString *)CFUUIDCreateString(kCFAllocatorDefault, newUUID);
            CFRelease(newUUID);
    
            //store the install ID so we don't generate a new one next time
            [defaults setObject:_installationId forKey:@"PushToUserInstallationId"];
            [defaults synchronize];
        }
    
        return self;
    }
    
    - (NSString*)getDeviceTokenInHex {
        const unsigned *tokenBytes = [[self 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])];
        return hexToken;
    }
    
  5. Voeg in PushToUserAppDelegate.h de volgende eigenschap singleton toe:

    @property (strong, nonatomic) DeviceInfo* deviceInfo;
    
  6. Voeg in de didFinishLaunchingWithOptions methode in PushToUserAppDelegate.m de volgende code toe:

    self.deviceInfo = [[DeviceInfo alloc] init];
    
    [[UIApplication sharedApplication] registerForRemoteNotificationTypes: UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound];
    

    De eerste regel initialiseert de DeviceInfo singleton. Met de tweede regel wordt de registratie voor pushmeldingen gestart. Deze is al aanwezig als u de zelfstudie Aan de slag met Notification Hubs al hebt voltooid.

  7. Implementeer in PushToUserAppDelegate.m de methode didRegisterForRemoteNotificationsWithDeviceToken in uw AppDelegate en voeg de volgende code toe:

    self.deviceInfo.deviceToken = deviceToken;
    

    Hiermee stelt u het apparaattoken voor de aanvraag in.

    Notitie

    Op dit moment mag deze methode geen andere code bevatten. Als u al een aanroep hebt van de registerNativeWithDeviceToken methode die is toegevoegd toen u de zelfstudie Pushmeldingen verzenden naar iOS-apps met Behulp van Azure Notification Hubs hebt voltooid, moet u een opmerking plaatsen of die aanroep verwijderen.

  8. Voeg in het PushToUserAppDelegate.m bestand de volgende handlermethode toe:

    * (void) application:(UIApplication *) application didReceiveRemoteNotification:(NSDictionary *)userInfo {
       NSLog(@"%@", userInfo);
       UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Notification" message:
                             [userInfo objectForKey:@"inAppMessage"] delegate:nil cancelButtonTitle:
                             @"OK" otherButtonTitles:nil, nil];
       [alert show];
    }
    

    Met deze methode wordt een waarschuwing weergegeven in de gebruikersinterface wanneer uw app meldingen ontvangt terwijl deze wordt uitgevoerd.

  9. Open het PushToUserViewController.m bestand en retourneer het toetsenbord in de volgende implementatie:

    - (BOOL)textFieldShouldReturn:(UITextField *)theTextField {
        if (theTextField == self.User || theTextField == self.Password) {
            [theTextField resignFirstResponder];
        }
        return YES;
    }
    
  10. Initialiseer het viewDidLoad label als volgt in de methode in PushToUserViewController.m het installationId bestand:

    DeviceInfo* deviceInfo = [(PushToUserAppDelegate*)[[UIApplication sharedApplication]delegate] deviceInfo];
    Self.installationId.text = deviceInfo.installationId;
    
  11. Voeg de volgende eigenschappen toe in de interface in PushToUserViewController.m:

    @property (readonly) NSOperationQueue* downloadQueue;
    - (NSString*)base64forData:(NSData*)theData;
    
  12. Voeg vervolgens de volgende implementatie toe:

    - (NSOperationQueue *)downloadQueue {
        if (!_downloadQueue) {
            _downloadQueue = [[NSOperationQueue alloc] init];
            _downloadQueue.name = @"Download Queue";
            _downloadQueue.maxConcurrentOperationCount = 1;
        }
        return _downloadQueue;
    }
    
    // base64 encoding
    - (NSString*)base64forData:(NSData*)theData
    {
        const uint8_t* input = (const uint8_t*)[theData bytes];
        NSInteger length = [theData length];
    
        static char table[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
    
        NSMutableData* data = [NSMutableData dataWithLength:((length + 2) / 3) * 4];
        uint8_t* output = (uint8_t*)data.mutableBytes;
    
        NSInteger i;
        for (i=0; i < length; i += 3) {
            NSInteger value = 0;
            NSInteger j;
            for (j = i; j < (i + 3); j++) {
                value <<= 8;
    
                if (j < length) {
                    value |= (0xFF & input[j]);
                }
            }
    
            NSInteger theIndex = (i / 3) * 4;
            output[theIndex + 0] =                    table[(value >> 18) & 0x3F];
            output[theIndex + 1] =                    table[(value >> 12) & 0x3F];
            output[theIndex + 2] = (i + 1) < length ? table[(value >> 6)  & 0x3F] : '=';
            output[theIndex + 3] = (i + 2) < length ? table[(value >> 0)  & 0x3F] : '=';
        }
    
        return [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];
    }
    
  13. Kopieer de volgende code naar de login handlermethode die door XCode is gemaakt:

    DeviceInfo* deviceInfo = [(PushToUserAppDelegate*)[[UIApplication sharedApplication]delegate] deviceInfo];
    
    // build JSON
    NSString* json = [NSString stringWithFormat:@"{\"platform\":\"ios\", \"instId\":\"%@\", \"deviceToken\":\"%@\"}", deviceInfo.installationId, [deviceInfo getDeviceTokenInHex]];
    
    // build auth string
    NSString* authString = [NSString stringWithFormat:@"%@:%@", self.User.text, self.Password.text];
    
    NSMutableURLRequest* request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://nhnotifyuser.azurewebsites.net/api/register"]];
    [request setHTTPMethod:@"POST"];
    [request setHTTPBody:[json dataUsingEncoding:NSUTF8StringEncoding]];
    [request addValue:[@([json lengthOfBytesUsingEncoding:NSUTF8StringEncoding]) description] forHTTPHeaderField:@"Content-Length"];
    [request addValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
    [request addValue:[NSString stringWithFormat:@"Basic %@",[self base64forData:[authString dataUsingEncoding:NSUTF8StringEncoding]]] forHTTPHeaderField:@"Authorization"];
    
    // connect with POST
    [NSURLConnection sendAsynchronousRequest:request queue:[self downloadQueue] completionHandler:^(NSURLResponse* response, NSData* data, NSError* error) {
        // add UIAlert depending on response.
        if (error != nil) {
            NSHTTPURLResponse* httpResponse = (NSHTTPURLResponse*)response;
            if ([httpResponse statusCode] == 200) {
                UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Back-end registration" message:@"Registration successful" delegate:nil cancelButtonTitle: @"OK" otherButtonTitles:nil, nil];
                [alert show];
            } else {
                NSLog(@"status: %ld", (long)[httpResponse statusCode]);
            }
        } else {
            NSLog(@"error: %@", error);
        }
    }];
    

    Deze methode haalt zowel een installatie-id als een kanaal voor pushmeldingen op en verzendt deze, samen met het apparaattype, naar de geverifieerde web-API-methode waarmee een registratie in Notification Hubs wordt gemaakt. Deze web-API is gedefinieerd in Gebruikers waarschuwen met Notification Hubs.

Nu de client-app is bijgewerkt, gaat u terug naar gebruikers waarschuwen met Notification Hubs en werkt u de mobiele service bij om meldingen te verzenden met behulp van Notification Hubs.