Mendaftarkan pengguna saat ini untuk pemberitahuan push dengan ASP.NET
Gambaran Umum
Topik ini menunjukkan cara meminta pendaftaran pemberitahuan push dengan Azure Notification Hubs saat pendaftaran dilakukan oleh ASP.NET Web API. Topik ini melengkapi tutorial Memberi tahu pengguna dengan Notification Hubs. Selesaikan terlebih dahulu langkah-langkah yang diperlukan dalam tutorial tersebut untuk membuat layanan seluler terautentikasi. Untuk informasi selengkapnya tentang skenario beri tahu pengguna, lihat Memberi tahu pengguna dengan Notification Hubs.
Memperbarui aplikasi
Di papan MainStoryboard_iPhone.storyboard, tambahkan komponen berikut dari pustaka objek:
Label: "Dorong ke Pengguna dengan Notification Hubs"
Label: "InstallationId"
Label: "Pengguna"
Bidang Teks: "Pengguna"
Label: "Kata Sandi"
Bidang Teks: "Kata Sandi"
Tombol: "Login"
Pada titik ini, papan cerita Anda terlihat seperti berikut ini:
Di editor bantuan, buat outlet untuk semua kontrol yang dialihkan dan panggil outlet tersebut, sambungkan bidang teks dengan Pengontrol Tampilan (delegasi), dan buat Tindakan untuk tombol masuk.
File BreakingNewsViewController.h sekarang berisi kode berikut:
@property (weak, nonatomic) IBOutlet UILabel *installationId; @property (weak, nonatomic) IBOutlet UITextField *User; @property (weak, nonatomic) IBOutlet UITextField *Password; - (IBAction)login:(id)sender;
Buat nama kelas
DeviceInfo
, dan salin kode berikut ke bagian antarmuka file DeviceInfo.h:@property (readonly, nonatomic) NSString* installationId; @property (nonatomic) NSData* deviceToken;
Salin kode berikut di bagian implementasi file 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; }
Di PushToUserAppDelegate.h, tambahkan database tunggal properti berikut:
@property (strong, nonatomic) DeviceInfo* deviceInfo;
Dalam metode
didFinishLaunchingWithOptions
di PushToUserAppDelegate.m, tambahkan kode berikut:self.deviceInfo = [[DeviceInfo alloc] init]; [[UIApplication sharedApplication] registerForRemoteNotificationTypes: UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound];
Baris pertama akan menginisialisasi database tunggal
DeviceInfo
. Baris kedua memulai pendaftaran untuk pemberitahuan push, yang sudah ada jika Anda telah menyelesaikan tutorial Mulai menggunakan Notification Hubs.Di PushToUserAppDelegate.m, terapkan metode
didRegisterForRemoteNotificationsWithDeviceToken
di AppDelegate Anda dan tambahkan kode berikut:self.deviceInfo.deviceToken = deviceToken;
Kode ini akan mengatur token perangkat untuk permintaan.
Catatan
Pada titik ini, seharusnya tidak ada kode lain dalam metode ini. Jika sudah memiliki panggilan ke metode
registerNativeWithDeviceToken
yang ditambahkan saat menyelesaikan tutorial Mengirimkan pemberitahuan push ke aplikasi iOS menggunakan tutorial Azure Notification Hubs, Anda harus mengomentari atau menghapus panggilan tersebut.Dalam file
PushToUserAppDelegate.m
, tambahkan metode handler berikut:* (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]; }
Metode ini menampilkan pemberitahuan di UI saat aplikasi Anda menerima pemberitahuan ketika sedang berjalan.
Buka file
PushToUserViewController.m
, dan kembalikan keyboard dalam implementasi berikut:- (BOOL)textFieldShouldReturn:(UITextField *)theTextField { if (theTextField == self.User || theTextField == self.Password) { [theTextField resignFirstResponder]; } return YES; }
Dalam metode
viewDidLoad
di filePushToUserViewController.m
, inisialisasi labelinstallationId
sebagai berikut:DeviceInfo* deviceInfo = [(PushToUserAppDelegate*)[[UIApplication sharedApplication]delegate] deviceInfo]; Self.installationId.text = deviceInfo.installationId;
Tambahkan properti berikut dalam antarmuka di
PushToUserViewController.m
:@property (readonly) NSOperationQueue* downloadQueue; - (NSString*)base64forData:(NSData*)theData;
Kemudian, tambahkan implementasi berikut:
- (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]; }
Salin kode berikut ke dalam metode handler
login
yang dibuat oleh XCode: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); } }];
Metode ini mendapatkan ID penginstalan dan saluran untuk pemberitahuan push dan mengirimkannya, beserta jenis perangkat, ke metode Web API terautentikasi yang membuat pendaftaran di Notification Hubs. Web API ini didefinisikan dalam Memberi tahu pengguna dengan Notification Hubs.
Setelah aplikasi klien diperbarui, kembali ke Memberi tahu pengguna dengan Notification Hubs dan perbarui layanan seluler untuk mengirim pemberitahuan dengan menggunakan Notification Hubs.
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk