tại saoRegisterForRemoteNotificationsWithDeviceToken không được gọi


89

Tôi đang tạo một ứng dụng mà tôi muốn triển khai dịch vụ thông báo đẩy của apple. Tôi đang làm theo hướng dẫn từng bước được đưa ra trong hướng dẫn này .

Tuy nhiên, các phương thức không được gọi. Tôi không biết điều gì đang gây ra vấn đề. Ai giúp tôi với?

    - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { 
        //NSString * token = [[NSString alloc] initWithData:deviceTokenencoding:NSUTF8StringEncoding];
        NSString *str = [NSString stringWithFormat:@"Device Token=%@",deviceToken];
        NSLog(@"Device Token:%@",str);

        //NSLog(@"Device token is called");
        //const void *devTokenBytes = [deviceToken bytes];
        //NSLog(@"Device Token");
    }

    - (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)err { 
        NSString *str = [NSString stringWithFormat: @"Error: %@", err];
        NSLog(@"Error:%@",str);    
    }

không cần thêm bất kỳ mã nào khác, chỉ cần kiểm tra nó liên kết stackoverflow.com/a/39849892/3269536
jenish

Câu trả lời:


74

Tôi đã gặp vấn đề tương tự: gọi điện registerForRemoteNotificationTypes: gọi không phải application:didRegisterForRemoteNotificationsWithDeviceToken:và cũng khôngapplication:didFailToRegisterForRemoteNotificationsWithError:

Cuối cùng tôi đã giải quyết được vấn đề này với sự trợ giúp của ghi chú kỹ thuật của Apple TN2265 .

Đây là những gì tôi đã làm:

Trước hết, tôi đã kiểm tra kỹ xem tôi có thực sự đăng ký chính xác cho Thông báo đẩy hay không , bao gồm việc xác minh hồ sơ cấp phép của tôi cho khóa "aps-environment" và việc thiết kế mã của chính tệp .app. Tôi đã thiết lập tất cả một cách chính xác.

Sau đó, tôi phải gỡ lỗi thông báo trạng thái Thông báo đẩy trong bảng điều khiển (bạn cần cài đặt cấu hình cấp phép PersistonConnectionLogging.mobileconfig trên thiết bị của mình và khởi động lại nó. Xem TN2265 trong "Quan sát thông báo trạng thái đẩy"). Tôi nhận thấy rằng quy trình apns bắt đầu hẹn giờ và tính toán ngày kích hoạt tối thiểu, điều này khiến tôi nghi ngờ rằng thông báo xác nhận đăng ký Thông báo đẩy, thường được trình bày tại thời điểm này, được APNS hỗ trợ, như được chỉ ra trong TN2265:

Đặt lại Cảnh báo quyền thông báo đẩy trên iOS

Lần đầu tiên một ứng dụng hỗ trợ đẩy đăng ký nhận thông báo đẩy, iOS sẽ hỏi người dùng xem họ có muốn nhận thông báo cho ứng dụng đó hay không. Khi người dùng đã trả lời cảnh báo này, nó sẽ không hiển thị lại trừ khi thiết bị được khôi phục hoặc ứng dụng đã được gỡ cài đặt trong ít nhất một ngày.

Nếu bạn muốn mô phỏng lần chạy ứng dụng đầu tiên của mình, bạn có thể gỡ cài đặt ứng dụng trong một ngày. Bạn có thể đạt được điều sau mà không thực sự phải đợi một ngày bằng cách đặt đồng hồ hệ thống tiến lên một ngày hoặc hơn, tắt hoàn toàn thiết bị, sau đó bật lại thiết bị.

Vì vậy, tôi đã xóa ứng dụng khỏi thiết bị, sau đó thay đổi thủ công ngày của iPhone trong Cài đặt, khởi động lại thiết bị và cài đặt lại ứng dụng.

Lần tiếp theo mã của tôi được gọi registerForRemoteNotificationTypes, nó đã nhận được các cuộc gọi lại như mong đợi.

Điều này giải quyết vấn đề cho tôi. Hy vọng nó giúp.


1
Điểm mấu chốt đối với tôi là tôi đang sử dụng chứng chỉ phát triển cũ hơn trên một máy khác. Chuyển chứng chỉ mới nhất từ ​​máy tính xách tay phát triển chính đã khắc phục sự cố này.
Markus Rautopuro

3
Sau khi bật Thông báo đẩy là cần thiết để tạo lại các cấu hình cấp phép.
Tony

3
Chào! mặc dù đây là một bài viết cũ nhưng tôi phát hiện ra rằng đôi khi nó sẽ được sửa khi bạn Tắt và Bật tất cả cài đặt Thông báo của ứng dụng. Bởi vì lần trước tôi nhớ didRegisterForRemoteNotificationsWithDeviceToken đã được gọi rồi đột nhiên nó không được. Hy vọng nó giúp.
otakuProgrammer,

1
Tôi chỉ có này để làm việc bằng cách thêm một bước thiết lập lại: 1. Xóa ứng dụng 2. Reset Device 3. Chuyển hồ 1+ ngày 4. Reset Device LẠI 5. Bây giờ cài đặt và nó sẽ nhắc nhở người thông báo cảnh báo push
etayluz

Điều quan trọng là phải đảm bảo rằng bạn không có nhiều bản sao "hợp lệ" của cùng một hồ sơ cấp phép phát triển, trong Xcode hoặc trên chính thiết bị. Có lẽ bạn đã tạo chứng chỉ APN mới và tạo lại hồ sơ cấp phép của mình sau khi chứng chỉ trước đó hết hạn. Hồ sơ phát triển cũ vẫn có giá trị như một hồ sơ phát triển, nhưng sẽ không đủ để kích hoạt APN. Bạn sẽ thấy một lỗi điển hình về "không có quyền aps hợp lệ blah blah".
jaredsinclair,

66

Trong iOS 8, một số phương pháp không được dùng nữa. Làm theo các bước bên dưới để tương thích với iOS 8

1. Đăng ký thông báo

if([[UIDevice currentDevice] systemVersion].floatValue >= 8.0)
{
    UIUserNotificationSettings* notificationSettings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound categories:nil];
    [[UIApplication sharedApplication] registerUserNotificationSettings:notificationSettings];    
}
else
{
    [[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeSound|UIRemoteNotificationTypeBadge)];
}

2. Thêm 2 phương pháp mới

- (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings
{
    //register to receive notifications
    [application registerForRemoteNotifications];
}

//For interactive notification only
- (void)application:(UIApplication *)application handleActionWithIdentifier:(NSString *)identifier forRemoteNotification:(NSDictionary *)userInfo completionHandler:(void(^)())completionHandler
{
    //handle the actions
    if ([identifier isEqualToString:@"declineAction"]){
    }
    else if ([identifier isEqualToString:@"answerAction"]){
    }
}

Lưu ý: hai phương thức mới ở trên là bắt buộc trong iOS 8 ngoài didRegisterForRemoteNotificationsWithDeviceTokendidReceiveRemoteNotification.. Phương thức ủy quyền khác sẽ không được gọi.

Xem: Thông báo từ xa iOS 8


1
Hai phương pháp mới đó có nên sử dụng trong Appdelegate.m không?
Ethan Parker

- (void) application: (UIApplication *) application didRegisterUserNotificationSettings: (UIUserNotificationSettings *) notificationSettings {// đăng ký nhận thông báo [application registerForRemoteNotifications]; } Thêm phần sau rất nguy hiểm, nó đã làm hỏng điện thoại của tôi và tôi thậm chí không thể khôi phục cài đặt gốc cho nó vào thời điểm này.
John

Đây có lẽ là câu trả lời bạn đang tìm kiếm nếu bạn đang kết thúc ở đây. Thật kỳ lạ, hôm nay đại biểu đã được gọi sớm hơn mà không cần tôi thêm một trong các phương thức này. Bây giờ có vẻ như tôi cần cả hai.
Sẽ

ứng dụng của tôi gặp sự cố với dòng này[application registerForRemoteNotifications];
smithyy 19/09/15

26

Trong iOS 8 , ngoài việc yêu cầu quyền truy cập thông báo đẩy theo cách khác, bạn cũng cần đăng ký theo cách khác.

Yêu cầu quyền truy cập:

if ([application respondsToSelector:@selector(registerUserNotificationSettings:)]) {
    // iOS 8
    UIUserNotificationSettings* settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound categories:nil];
    [[UIApplication sharedApplication] registerUserNotificationSettings:settings];
} else {
    // iOS 7 or iOS 6
    [[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)];
}

Xử lý thiết bị đã đăng ký:

// New in iOS 8
- (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings {
    [application registerForRemoteNotifications];
}

// iOS 7 or iOS 6
- (void)application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
    NSString *token = [[deviceToken description] stringByTrimmingCharactersInSet: [NSCharacterSet characterSetWithCharactersInString:@"<>"]];
    token = [token stringByReplacingOccurrencesOfString:@" " withString:@""];
    // Send token to server
}

Cực kỳ hữu ích. Tôi không thể tìm ra lý do tại sao thông báo của tôi bị hỏng.
GoldenJoe

4
Làm cách nào để nhận mã thông báo trong iOS 8?
Yossi

@Yossi nó được lưu trữ trong biến "mã thông báo" trongapplication:didRegisterForRemoteNotificationsWithDeviceToken:
Kyle Clegg

ứng dụng của tôi gặp sự cố với dòng này [application registerForRemoteNotifications];
smithyy

13

Lưu ý rằng thông báo từ xa không được hỗ trợ trong trình mô phỏng. Do đó, nếu bạn chạy ứng dụng của mình trong trình mô phỏng, didRegisterForRemoteNotificationsWithDeviceTokensẽ không được gọi.


@hochl: Tôi đã cập nhật câu trả lời của mình để nó trả lời cụ thể hơn cho câu hỏi.
Eric

1
Lưu ý rằng didFailToRegisterForRemoteNotificationsWithError cũng sẽ không được gọi. Trên thực tế, không có thông báo nào được gọi nếu bạn tắt thông báo đẩy cho ứng dụng của mình trong Cài đặt (cho dù trên thiết bị hay trình mô phỏng). Apple dường như không coi đây là một lỗi stackoverflow.com/questions/9199935/…
Zack Morris

12

Đảm bảo bạn gọi trong mã của mình (cập nhật theo các loại thông báo được hỗ trợ)

[[UIApplication sharedApplication] registerForRemoteNotificationTypes: UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeSound];

và cấu hình cấp phép được bật APNS. Bạn có thể cần tải xuống lại hồ sơ cấp phép sau khi ban hành APNS. Nếu bạn gặp khó khăn và gặp lỗi, thì có thể bạn nên tạo Entitlements.plist và thêm khóa "aps-environment" với giá trị "phát triển" hoặc "sản xuất" tùy thuộc vào loại bản dựng (thông thường cặp khóa-giá trị này là có trong hồ sơ cung cấp, nhưng đôi khi Xcode gây rối với chúng).


Lưu ý: "và cấu hình cấp phép được bật APNS." Nhấp vào trên cùng của bạn Cây dự án> Khả năng> Thông báo đẩy sẽ được đặt thành BẬT.
trevorgrayson

6

Nếu các cấu hình cấp phép được sử dụng trước đây để Bật và Định cấu hình dịch vụ Thông báo đẩy của Apple, bạn sẽ cần tải lại các cấu hình cấp phép một lần nữa.

Xóa hồ sơ cấp phép khỏi Xcode Organizer và khỏi iPhone / iPad. Đi tới Settings -> General -> Profiles -> [Your provisioning] -> Remove.

Cài đặt các cấu hình cấp phép đã tải xuống mới. Sau đó làm sạch và chạy dự án từ XCode. Bây giờ didRegisterForRemoteNotificationsWithDeviceTokennên được gọi.


Nó làm việc cho tôi. chỉ cần chọn chứng nhận và cấp phép đã đăng ký APN cho ứng dụng.
lee

Tôi đã xóa tất cả hồ sơ cấp phép khỏi iphone (ios9) và sau đó sau khi nhận được Mã thông báo thiết bị. Dành bốn giờ để sửa lỗi này (mặc dù tôi học được rất nhiều). Cảm ơn
Shobhakar Tiwari

3

Tôi đã mắc lỗi và bỏ qua một chi tiết triển khai dẫn tôi đến đây. Tôi cố gắng để có được ưa thích và yêu cầu người dùng cho thông báo đẩy sau này trong quá trình nhập môn ứng dụng, vì vậy tôi đã tôi registerForRemoteNotificationTypes, didRegisterForRemoteNotificationsWithDeviceTokendidFailToRegisterForRemoteNotificationsWithError tất cả trong một UIView tùy chỉnh.

KHẮC PHỤC: cần didRegisterForRemoteNotificationsWithDeviceTokendidFailToRegisterForRemoteNotificationsWithErrorcó trong UIApplicationDelegate(YourAppDelegate.m ) để được kích hoạt.

Bây giờ có vẻ rõ ràng, heh.


Có, các phương pháp cần phải có AppDelegate. Không thể tin được rằng tôi đã lãng phí vài giờ qua của mình cho câu trả lời đơn giản này
Even Cheng

3

Đảm bảo rằng kết nối internet của bạn đang bật. Điều này khiến tôi mất hàng giờ để nhận thông báo công việc vì kết nối internet.


3

Nếu bạn đã thêm push vào ID ứng dụng hiện có, hãy đảm bảo bạn tạo lại hồ sơ cấp phép của mình. Nếu bạn không, hồ sơ sẽ không biết về việc bạn bật ID ứng dụng.


3

Hãy thử nó làm việc cho tôi,

Bước đầu tiên

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

Trong phương pháp trên, thêm mã bên dưới

 UIApplication *application = [UIApplication sharedApplication];
 if ([application respondsToSelector:@selector(registerUserNotificationSettings:)]) {
UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeBadge
                                                                                     |UIUserNotificationTypeSound
                                                                                     |UIUserNotificationTypeAlert) categories:nil];
[application registerUserNotificationSettings:settings];
 } 
 else {
      UIRemoteNotificationType myTypes = UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeSound;
[application registerForRemoteNotificationTypes:myTypes];
     }

Bước thứ hai

Thêm mã bên dưới Chức năng

 #ifdef __IPHONE_8_0
   - (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings
   {
  //register to receive notifications
  [application registerForRemoteNotifications];
  }

 - (void)application:(UIApplication *)application handleActionWithIdentifier:(NSString *)identifier forRemoteNotification:(NSDictionary *)userInfo completionHandler:(void(^)())completionHandler
  {
    //handle the actions
    if ([identifier isEqualToString:@"declineAction"]){
    }
   else if ([identifier isEqualToString:@"answerAction"]){
   }
}
 #endif

Bạn sẽ nhận được Mã thông báo thiết bị trong chức năng bên dưới

 - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken 

để biết câu trả lời chi tiết, vui lòng tham khảo này

Hy vọng điều này sẽ giúp ích cho một số người.


2
-​(BOOL)application:(UIApplication​*)application​ didFinishLaunchingWithOptions:(NSDictionary​*)launchOptions​{​​​​ ​​​​ ​​​​//​Override​point​for​customization​after​application​launch.
​​​​//​Add​the​view​controller’s​view​to​the​window​and​display. ​​​​[window​addSubview:viewController.view]; ​​​​[window​makeKeyAndVisible];
NSLog(@”Registering for push notifications...”);
 [[UIApplication sharedApplication]
registerForRemoteNotificationTypes: (UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge |
UIRemoteNotificationTypeSound)]; 
​​​​returnYES;
}


- (void)application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
}
NSString *str = [NSString stringWithFormat:@”Device Token=%@”,deviceToken];
NSLog(@”%@”, str);


- (void)application:(UIApplication *)app didFailToRegisterForRemoteNotificationsWithError:(NSError *)err {
NSString *str = [NSString stringWithFormat: @”Error: %@”, err]; NSLog(@”%@”, str);
}


- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
}
for (id key in userInfo) { NSLog(@”key: %@, value: %@”, key, [userInfo objectForKey:key]);
}

2

Yêu cầu tối thiểu để nhận mã thông báo thiết bị:

Không cần phải định cấu hình id ứng dụng, cấp phép hoặc chứng chỉ, v.v. do đó, không có bộ ký mã nào được đặt để nhận phương thức ủy quyền doRegisterForRemoteNotificationsWithDeviceToken được gọi.

Tôi vừa tạo một dự án iOS mới trong Xcode 7 cho một lần xem với cài đặt mặc định và cung cấp một id gói ngẫu nhiên như com.mycompany.pushtest không được định cấu hình trong cổng nhà phát triển của Apple.

Với mã sau, tôi đang nhận được mã thông báo thiết bị của mình trong phương pháp didRegisterForRemoteNotificationsWithDeviceToken trên iPad của tôi có truy cập Internet vào WIFI. Thiết bị của tôi đã được đính kèm và tôi chỉ đang chạy ứng dụng trực tiếp từ xcode và xem các giá trị trong bảng điều khiển của xcode.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions   

{  
    if ([application respondsToSelector:@selector(registerUserNotificationSettings:)])  
    {  
        UIUserNotificationType userNotificationTypes = (UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound);  
        UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:userNotificationTypes categories:nil];  
        [application registerUserNotificationSettings:settings];  
        [application registerForRemoteNotifications];  
    }  
    else  
    {  
        // Register for Push Notifications, if running iOS version < 8  
        [application registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeSound)];  
    }  
    return YES;  
}  


- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {
    NSLog(@"Error: %@", error.description);
}

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
    NSLog(@"didRegisterForRemoteNotificationsWithDeviceToken: %@", deviceToken);
}

- (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings {
    NSLog(@"NotificationSettings: %@", notificationSettings);
}

1

Tôi có một điểm ở đây, hiện tại tôi cũng gặp phải vấn đề này, tôi đã làm mọi thứ theo tài liệu hướng dẫn nhưng phương thức ủy quyền không gọi được.Cuối cùng tôi thấy một bài đăng nói rằng sự cố với mạng, sau đó tôi đã thay đổi mạng và nó hoạt động tốt. Vì vậy, hãy quan tâm đến mạng vì ít mạng có thể chặn APNS.


1

Sau khi lãng phí 3 giờ khó chịu nhất, đây là các bước để khắc phục sự cố:

  1. Xóa ứng dụng

  2. Đặt lại thiết bị

  3. Chạy lại

Nó chỉ hoạt động


0

Điều này đã xảy ra với tôi, bởi vì tôi đã thiết lập lại và xóa tất cả dữ liệu trên điện thoại (muốn điện thoại của nhà phát triển sử dụng). Điều này đã ngăn không cho APN kết nối sau khi thiết lập lại điện thoại.

Tôi đã thử tất cả mọi thứ, nhưng điều duy nhất khắc phục được nó là thiết lập điện thoại hoạt động với nhà cung cấp dịch vụ dưới thẻ SIM mới.

Liên kết này cung cấp thêm gợi ý về những gì có thể đang diễn ra: https://developer.apple.com/library/ios/technotes/tn2265/_index.html

Nó nói rằng APN cố gắng kết nối ưu tiên qua nhà cung cấp dịch vụ / tháp thay vì wifi. Có thể vấn đề cũng là một cái gì đó đang xảy ra với bộ định tuyến chặn cổng 5223 trên mạng wifi, nhưng tôi nghi ngờ điều đó vì nó hoạt động tốt vào ngày hôm trước trước khi thiết lập lại toàn cầu xảy ra.


0

Đối với tôi, những gì đã giải quyết đó là chuyển đến cài đặt xây dựng và trong phần ký mã, chọn thủ công danh tính ký mã và hồ sơ cấp phép. Rõ ràng cài đặt tự động không chọn đúng và do đó ứng dụng không được ủy quyền đúng cách.


0

nếu tắt thông báo đẩy của ứng dụng,

appdidRegisterForRemoteNotificationsWithDeviceToken sẽ không bao giờ được gọi


0

Ngoài ra, đừng quên kiểm tra trạng thái hệ thống tại Apple https://developer.apple.com/system-status/ .

Tôi đã thử tất cả các giải pháp được đăng ở trên nhưng cuối cùng thì lỗi là do dịch vụ APNS bị lỗi! Ngày hôm sau tất cả đã hoạt động trở lại như mong đợi.

Ngoài ra, bạn có lỗi đánh máy trong phương thức gọi lại của mình:

- (void)application:(UIApplication *)appdidRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken

Như Rupesh đã chỉ ra tên phương thức chính xác là:

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken

Đó có thể là lý do tại sao bạn không bao giờ nhận được mã thông báo trong trường hợp của mình!


Thực ra tên phương pháp là không chính xác, nó phải là - (void) ứng dụng: (UIApplication *) ứng dụng didRegisterForRemoteNotificationsWithDeviceToken: (NSData *) deviceToken Có một không gian giữa các thông số
Rupesh

Cảm ơn, đã cập nhật câu trả lời để bao gồm bình luận của bạn. Khá chắc chắn đây là giải pháp cho vấn đề OP nhưng chúng ta có thể không bao giờ tìm ra!
Brett

0

Bạn cần gọi phương thức registerForNotifications từ didFinishLaunchingWithOptions.

 func registerForNotifications(){

        if #available(iOS 10.0, *) {

            let center = UNUserNotificationCenter.current()
            center.delegate = self
            center.requestAuthorization(options:[.alert,.sound,.badge]) { (granted, error) in
                if granted{
                    UIApplication.shared.registerForRemoteNotifications()
                }else{

                    print("Notification permission denied.")

                }
            }

        } else {

            // For iOS 9 and Below
            let type: UIUserNotificationType = [.alert,.sound,.badge];
            let setting = UIUserNotificationSettings(types: type, categories: nil);
            UIApplication.shared.registerUserNotificationSettings(setting);
            UIApplication.shared.registerForRemoteNotifications()
        }
    }

 func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {

        let token = String(format: "%@", deviceToken as CVarArg).trimmingCharacters(in: CharacterSet(charactersIn: "<>")).replacingOccurrences(of: " ", with: "")
        print(token)

    }


extension AppDelegate : UNUserNotificationCenterDelegate{

    @available(iOS 10.0, *)

    func userNotificationCenter(_ center: UNUserNotificationCenter,  willPresent notification: UNNotification, withCompletionHandler   completionHandler: @escaping (_ options:   UNNotificationPresentationOptions) -> Void) {
        print("Handle push from foreground”)

        let info = ((notification.request.content.userInfo as NSDictionary).value(forKey: "aps") as! NSDictionary)
        if let type = info.value(forKey: "type") as? Int{
            if type == 0 {  

         // notification received ,Handle your notification here

            }
        }
    }

    @available(iOS 10.0, *)

    func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {

        print("Handle push from background or closed")

        let info = ((response.notification.request.content.userInfo as NSDictionary).value(forKey: "aps") as! NSDictionary)
        if let type = info.value(forKey: "type") as? Int{
            if type == 0 {   

            // notification received ,Handle your notification here
            }
        }
    }
}

0

Tôi đã gặp một vấn đề khác, trong đó các lệnh gọi lại thông báo đẩy của tôi bị thư viện bên thứ 3 chiếm đoạt, mà tôi đã đưa vào, cụ thể là Firebase. Các thư viện này sử dụng các phương thức gọi lại thông báo đẩy để nhận các lệnh gọi lại.

Hy vọng điều này sẽ giúp ai đó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.