A1: Không, nó không phải ở đầu ứng dụng. Bạn có thể gọi registerForRemoteNotificationTypes từ bất cứ nơi nào trong mã.
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound)];
Bạn sẽ cần xử lý các phương thức đại biểu sau đây (trong đại biểu) được gọi khi đăng ký thành công/không thành công để thông báo đẩy.
// Delegation methods
- (void)application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)devToken {
const void *devTokenBytes = [devToken bytes];
self.registered = YES;
[self sendProviderDeviceToken:devTokenBytes]; // this will send token to your server's database
}
- (void)application:(UIApplication *)app didFailToRegisterForRemoteNotificationsWithError:(NSError *)err {
NSLog(@"Error in registration. Error: %@", err);
}
A2: Có, bạn có thể. Có hai tình huống có thể xảy ra. Nếu ứng dụng của bạn không chạy, bạn sẽ xử lý thông báo đẩy trong didFinishLaunchingWithOptions. Trong trường hợp này nếu người dùng đã chọn "mở" trong thông báo tin nhắn hoặc nhấp vào Biểu ngữ (tùy thuộc vào cài đặt của người dùng), ứng dụng của bạn sẽ tự động bắt đầu và bạn có thể xử lý thông số người dùng được chuyển trong thông báo đẩy.
/* Push notification received when app is not running */
NSDictionary *params = [[launchOptions objectForKey:@"UIApplicationLaunchOptionsRemoteNotificationKey"] objectForKey:@"appsInfo"];
if (params) {
// Use params and do your stuffs
}
Nếu ứng dụng của bạn đang chạy, đẩy thông báo sẽ được gửi đến application:didReceiveRemoteNotification:
phương pháp đại diện trong đó bạn có thể UIAlertView đơn giản hiện diện với thông điệp trong thông báo push và xử lý các đại biểu alertView OK/Cancel nút nhấp chuột theo cách thông thường.
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
NSDictionary *apsInfo = [userInfo objectForKey:@"apsinfo"]; // This appsInfo set by your server while sending push
NSString *alert = [apsInfo objectForKey:@"alert"];
UIApplicationState state = [application applicationState];
if (state == UIApplicationStateActive) {
application.applicationIconBadgeNumber = 0;
AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);
UIAlertView *alertview = [[UIAlertView alloc] initWithTitle:@"Push Notification"
message:alert
delegate:self
cancelButtonTitle:@"NO"
otherButtonTitles:@"YES"];
[alertview show];
[alertview release];
} else {
[self setTabs:contentsInfo];
}
}
- (void)alertView:(UIAlertView *)alertView willDismissWithButtonIndex:(NSInteger)buttonIndex {
if (buttonIndex != [alertView cancelButtonIndex]) {
// User pressed YES, do your stuffs
}
}
A3: Nếu người dùng đã từ chối chấp nhận thông báo đẩy từ ứng dụng của bạn sau đó didFailToRegisterForRemoteNotificationsWithError của nó và bạn vì thế bạn sẽ không nhận devToken của người dùng được yêu cầu để được vào máy chủ của bạn để gửi thông báo đẩy để người dùng đó. Nếu người dùng ban đầu chấp nhận nhưng sau này nếu anh ta thay đổi cài đặt để vô hiệu hóa thông báo đẩy của bạn thì máy chủ Apple sẽ không gửi thông báo đẩy của bạn cho người dùng đó. Trong trường hợp này UDID của người dùng sẽ xuất hiện trong dịch vụ Phản hồi và lý tưởng là máy chủ của bạn nên xóa UDID của người dùng đó khỏi cơ sở dữ liệu và ngừng gửi thông báo đẩy tới người dùng đó. Nếu bạn tiếp tục gửi thông báo đẩy không hợp lệ, máy chủ Apple có thể ngắt kết nối của bạn một cách im lặng và bạn sẽ không thể gửi bất kỳ thông báo đẩy nào.
Xem Apple Push Notification tài liệu để biết chi tiết về triển khai.
trong iOS 10 nếu bạn sử dụng khung 'UserNotifications' * thì bạn có thể tìm hiểu xem người dùng đã nhấp có/không sử dụng gọi lại không. Xem [ở đây] (http://useyourloaf.com/blog/local-notifications-with-ios-10/) – Honey