Sdílet prostřednictvím


Registrace aktuálního uživatele pro nabízená oznámení pomocí ASP.NET

Přehled

V tomto tématu se dozvíte, jak požádat o registraci nabízených oznámení ve službě Azure Notification Hubs, když registraci provádí ASP.NET webové rozhraní API. Toto téma rozšiřuje kurz Upozorňování uživatelů pomocí Notification Hubs. Pokud chcete vytvořit ověřenou mobilní službu, musíte už dokončit požadované kroky v tomto kurzu. Další informace o scénáři upozorňování uživatelů najdete v tématu Upozornění uživatelů pomocí Notification Hubs.

Aktualizace aplikace

  1. Do souboru MainStoryboard_iPhone.storyboard přidejte z knihovny objektů následující komponenty:

    • Popisek: "Push to User with Notification Hubs"

    • Popisek: InstallationId

    • Popisek: "Uživatel"

    • Textové pole: "Uživatel"

    • Popisek: Heslo

    • Textové pole: "Heslo"

    • Tlačítko: "Přihlásit se"

      V tomto okamžiku váš scénář vypadá takto:

      Snímek obrazovky aplikace MainStoryboard_iPhone.storyboard s přidanými komponentami

  2. V editoru asistenta vytvořte zásuvky pro všechny přepnulé ovládací prvky a volejte je, propojte textová pole s kontrolerem zobrazení (delegát) a vytvořte akci pro tlačítko přihlášení .

    Snímek obrazovky s editorem asistenta v aplikaci MainStoryboard_iPhone.storyboard

    Váš soubor BreakingNewsViewController.h by teď měl obsahovat následující kód:

    @property (weak, nonatomic) IBOutlet UILabel *installationId;
    @property (weak, nonatomic) IBOutlet UITextField *User;
    @property (weak, nonatomic) IBOutlet UITextField *Password;
    
    - (IBAction)login:(id)sender;
    
  3. Vytvořte třídu s názvem DeviceInfoa zkopírujte následující kód do oddílu rozhraní souboru DeviceInfo.h:

    @property (readonly, nonatomic) NSString* installationId;
    @property (nonatomic) NSData* deviceToken;
    
  4. Zkopírujte následující kód v části implementace souboru 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. V souboru PushToUserAppDelegate.h přidejte následující vlastnost singleton:

    @property (strong, nonatomic) DeviceInfo* deviceInfo;
    
  6. didFinishLaunchingWithOptions V metodě v PushToUserAppDelegate.m přidejte následující kód:

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

    První řádek inicializuje DeviceInfo singleton. Na druhém řádku se spustí registrace nabízených oznámení, která už existuje, pokud jste už dokončili kurz Začínáme se službou Notification Hubs .

  7. V souboru PushToUserAppDelegate.m implementujte metodu didRegisterForRemoteNotificationsWithDeviceToken do appDelegate a přidejte následující kód:

    self.deviceInfo.deviceToken = deviceToken;
    

    Tím se nastaví token zařízení pro požadavek.

    Poznámka

    V tomto okamžiku by v této metodě neměl být žádný jiný kód. Pokud už máte volání registerNativeWithDeviceToken metody přidané při dokončení kurzu Odesílání nabízených oznámení do aplikací pro iOS pomocí Azure Notification Hubs , musíte toto volání okomentovat nebo odebrat.

  8. PushToUserAppDelegate.m Do souboru přidejte následující metodu obslužné rutiny:

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

    Tato metoda zobrazí v uživatelském rozhraní upozornění, když vaše aplikace obdrží oznámení, když je spuštěná.

  9. PushToUserViewController.m Otevřete soubor a vraťte klávesnici v následující implementaci:

    - (BOOL)textFieldShouldReturn:(UITextField *)theTextField {
        if (theTextField == self.User || theTextField == self.Password) {
            [theTextField resignFirstResponder];
        }
        return YES;
    }
    
  10. viewDidLoad V metodě v PushToUserViewController.m souboru inicializujte installationId popisek následujícím způsobem:

    DeviceInfo* deviceInfo = [(PushToUserAppDelegate*)[[UIApplication sharedApplication]delegate] deviceInfo];
    Self.installationId.text = deviceInfo.installationId;
    
  11. Přidejte následující vlastnosti v rozhraní v PushToUserViewController.m:

    @property (readonly) NSOperationQueue* downloadQueue;
    - (NSString*)base64forData:(NSData*)theData;
    
  12. Pak přidejte následující implementaci:

    - (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. Do metody obslužné rutiny login vytvořené pomocí XCode zkopírujte následující kód:

    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);
        }
    }];
    

    Tato metoda získá ID instalace a kanál pro nabízená oznámení a odešle ho spolu s typem zařízení metodě ověřeného webového rozhraní API, která vytvoří registraci v Notification Hubs. Toto webové rozhraní API bylo definováno v části Oznamování uživatelům pomocí Notification Hubs.

Teď, když je klientská aplikace aktualizovaná, se vraťte k oznámení uživatelům pomocí Notification Hubs a aktualizujte mobilní službu tak, aby odesílala oznámení pomocí Notification Hubs.