WhyRegisterForRemoteNotificationsWithDeviceToken को नहीं कहा जाता है


88

मैं एक एप्लिकेशन बना रहा हूं जिसमें मैं ऐप्पल पुश नोटिफिकेशन सेवा को लागू करना चाहता हूं। मैं इस ट्यूटोरियल में दिए गए चरण-दर-चरण निर्देशों का पालन कर रहा हूं ।

लेकिन फिर भी, तरीकों को नहीं कहा जाता है। मुझे नहीं पता कि समस्या क्या है। क्या कोई मेरी मदद कर सकता है?

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

किसी अन्य कोड को जोड़ने की आवश्यकता नहीं है, बस इसे लिंक करें stackoverflow.com/a/39849892/3269536
jenish

जवाबों:


73

मैं एक ही मुद्दा था: कॉल registerForRemoteNotificationTypes:लागू न application:didRegisterForRemoteNotificationsWithDeviceToken:है और न हीapplication:didFailToRegisterForRemoteNotificationsWithError:

मैंने अंततः Apple के तकनीकी नोट TN2265 की मदद से इस मुद्दे को हल किया ।

यह जो मैंने किया है:

सबसे पहले, मैंने डबल-चेक किया कि मैं वास्तव में पुश नोटिफिकेशन के लिए सही तरीके से पंजीकरण कर रहा हूं , जिसमें "अप्स-एनवायरनमेंट" कुंजी के लिए मेरी प्रोविजनिंग प्रोफाइल को सत्यापित करना और .app फाइल को खुद कोड करना है। मैं यह सब सही ढंग से स्थापित किया था।

फिर मुझे कंसोल में पुश नोटिफिकेशन स्टेटस मैसेज को डीबग करना था (आपको अपने डिवाइस पर PersistentConnectionLogging.mobileconfig प्रोविजनिंग प्रोफाइल इंस्टॉल करना होगा और इसे रिबूट करना होगा। " ऑब्सट्रक्टिंग पुश स्टेटस मैसेज" के तहत TN2265 देखें )। मैंने देखा कि एपन्स प्रक्रिया एक टाइमर शुरू करती है और एक न्यूनतम आग की तारीख की गणना करती है, जिससे मुझे संदेह हुआ कि पुश-अधिसूचना पंजीकरण पुष्टि संदेश, जिसे सामान्य रूप से इस बिंदु पर प्रस्तुत किया गया है, APNS द्वारा प्रभावित है, जैसा कि TN2265 में संकेत दिया गया है:

IOS पर पुश नोटिफिकेशन अनुमतियाँ अलर्ट को रीसेट करना

पुश सूचनाओं के लिए पहली बार एक पुश-सक्षम ऐप पंजीकृत होता है, iOS उपयोगकर्ता से पूछता है कि क्या वे उस ऐप के लिए सूचनाएं प्राप्त करना चाहते हैं। एक बार जब उपयोगकर्ता ने इस अलर्ट पर प्रतिक्रिया दी है तो इसे फिर से प्रस्तुत नहीं किया जाता है जब तक कि डिवाइस को बहाल नहीं किया जाता है या ऐप को कम से कम एक दिन के लिए अनइंस्टॉल किया गया है।

यदि आप अपने ऐप के पहली बार चलने का अनुकरण करना चाहते हैं, तो आप ऐप को एक दिन के लिए अनइंस्टॉल कर सकते हैं। आप डिवाइस को पूरी तरह से बंद करके, फिर डिवाइस को चालू करके एक दिन या उससे अधिक समय तक सिस्टम क्लॉक सेट करके वास्तव में एक दिन इंतजार किए बिना बाद को प्राप्त कर सकते हैं।

इसलिए, मैंने डिवाइस से ऐप को हटा दिया, फिर सेटिंग्स में iPhone की तारीख को मैन्युअल रूप से बदल दिया, डिवाइस को रिबूट किया, और ऐप को फिर से इंस्टॉल किया।

अगली बार जब मेरे कोड ने कॉल किया registerForRemoteNotificationTypes, तो उसे उम्मीद के मुताबिक कॉलबैक मिले।

इससे मेरे लिए समस्या हल हो गई। आशा करता हूँ की ये काम करेगा।


1
मेरे लिए महत्वपूर्ण बिंदु यह था कि मैं एक अन्य मशीन पर एक पुराने विकास प्रमाणपत्र का उपयोग कर रहा था। मुख्य विकास लैपटॉप से ​​नवीनतम प्रमाण पत्र को स्थानांतरित करना इस मुद्दे को निर्धारित करता है।
मार्कस राउतोपुरो

3
सक्षम करने के बाद पुश सूचनाएं फिर से प्रोविजनिंग प्रोफाइल बनाने के लिए आवश्यक है।
टोनी

3
नमस्ते! हालाँकि यह एक पुरानी पोस्ट है, मुझे पता चला कि कभी-कभी यह ठीक हो जाएगा जब आप ऐप की सभी अधिसूचना सेटिंग्स को बंद और चालू कर देंगे। क्योंकि पिछली बार जब मुझे याद आया कि doRegisterForRemoteNotificationsWithDeviceToken को बुलाया गया था, तब अचानक ऐसा नहीं था। आशा करता हूँ की ये काम करेगा।
otakuProgrammer

1
मुझे केवल एक और रीसेट चरण जोड़कर काम करने के लिए मिला: 1. एप्लिकेशन हटाएं 2. डिवाइस रीसेट करें। 1+ दिन अग्रेषित करें। 4 डिवाइस रीसेट करें। अब इंस्टॉल करें और इसे पुश नोटिफिकेशन अलर्ट को शीघ्र करना चाहिए
etayluz

यह सुनिश्चित करना भी महत्वपूर्ण है कि आपके पास एक ही विकास प्रावधान प्रोफ़ाइल की एकाधिक "मान्य" प्रतियां नहीं हैं, या तो Xcode में या डिवाइस पर ही। शायद आपने एक नया APN प्रमाणपत्र बनाया है और पिछले प्रमाणपत्र की समय सीमा समाप्त होने के बाद अपनी प्रोविज़निंग प्रोफ़ाइल को फिर से बनाया है। पुरानी विकास प्रोफ़ाइल अभी भी विकास प्रोफ़ाइल के रूप में मान्य है, लेकिन यह APN को सक्षम करने के लिए पर्याप्त नहीं होगा। आपको "कोई मान्य अप्स-एंटाइटेलमेंट ब्ला ब्ला" के बारे में एक सामान्य त्रुटि दिखाई देगी।
जेरडिन्क्लेयर

66

IOS 8 में, कुछ तरीकों को हटा दिया गया है। IOS 8 संगतता के लिए नीचे दिए गए चरणों का पालन करें

1. रजिस्टर अधिसूचना

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. नए 2 तरीके जोड़ें

- (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"]){
    }
}

नोट: ऊपर दो नए तरीकों की आवश्यकता है iOS 8 में इसके अलावा didRegisterForRemoteNotificationsWithDeviceTokenऔर didReceiveRemoteNotification.. अन्य डेलीगेट विधि को लागू नहीं किया जाएगा।

देखें: रिमोट नोटिफिकेशन iOS 8


1
क्या उन दो नए तरीकों को Appdelegate.m में जाना चाहिए?
एथन पार्कर

- (शून्य) आवेदन: (UIApplication *) आवेदन किया गया। } निम्नलिखित को जोड़ना खतरनाक है, इसने मेरे फोन को क्रैश कर दिया है और मैं इस बिंदु पर भी इसे रीसेट करने में असमर्थ हूं।
जॉन

यह संभवत: वह उत्तर है जिसकी आप तलाश कर रहे हैं यदि आप यहां समाप्त कर रहे हैं। अजीब तरह से, प्रतिनिधि को आज पहले बुलाया गया था, मेरे बिना इनमें से एक तरीका जोड़ा गया था। अब ऐसा लगता है कि मुझे उन दोनों की जरूरत है।
विल

इस लाइन के साथ मेरा ऐप क्रैश हो गया है[application registerForRemoteNotifications];
smithyy

26

में iOS 8 , अलग ढंग से पुश अधिसूचना पहुंचने के लिए अनुरोध करने के अलावा, आप भी अलग ढंग से पंजीकृत होना होगा।

पहुँचने का अनुरोध करें:

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

पंजीकृत डिवाइस संभालें:

// 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
}

बेहद मददगार। मैं यह पता नहीं लगा सका कि मेरी सूचनाएं क्यों टूटीं।
गोल्डनजॉय

4
आईओएस 8 में मुझे टोकन कैसे मिल सकता है?
योसी

@ योसी इसे "टोकन" वैरिएबल में संग्रहीत किया गया हैapplication:didRegisterForRemoteNotificationsWithDeviceToken:
काइल क्लेग

इस लाइन के साथ मेरा ऐप क्रैश हो गया है [एप्लीकेशन रजिस्टरफ़ोरमोटनोटेशन];
स्मिथी

13

ध्यान रखें कि सिम्युलेटर में दूरस्थ सूचनाओं का समर्थन नहीं किया जाता है। इसलिए, यदि आप सिम्युलेटर में अपना ऐप चलाते हैं, तो didRegisterForRemoteNotificationsWithDeviceTokenउसे कॉल नहीं किया जाएगा।


@होच: मैंने अपना उत्तर अपडेट किया ताकि यह विशेष रूप से प्रश्न का उत्तर दे।
एरिक

1
ध्यान दें कि FailToRegisterForRemoteNotificationsWithError को कॉल नहीं किया जाएगा। वास्तव में, न तो अधिसूचना को बुलाया जाता है यदि आप सेटिंग में अपने एप्लिकेशन के लिए पुश सूचनाओं को अक्षम करते हैं (चाहे डिवाइस या सिम्युलेटर पर)। Apple इसे एक त्रुटि stackoverflow.com/questions/9199935/… के
Zack Morris

12

सुनिश्चित करें कि आप अपने कोड में कॉल करते हैं (समर्थित अधिसूचना प्रकार के अनुसार अपडेट करें)

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

और प्रावधान प्रोफ़ाइल APNS सक्षम है। APNS को सक्षम करने के बाद आपको प्रोविजनिंग प्रोफाइल को फिर से डाउनलोड करना पड़ सकता है। यदि आपको परेशानी है और आपको त्रुटियां हैं, तो हो सकता है कि आप एक Entitlements.plist बनाएं और मूल्य "विकास" या "उत्पादन" के साथ कुंजी "अप्स-एनवायरनमेंट" को जोड़ दें, यह उस तरह के बिल्ड पर निर्भर करता है (सामान्य रूप से यह की-वैल्यू पेयर है) प्रोविज़निंग प्रोफाइल में निहित है, लेकिन कभी-कभी Xcode उनके साथ गड़बड़ करता है)।


नोट: "और प्रावधान प्रोफ़ाइल APNS सक्षम है।" आप के शीर्ष पर क्लिक करें प्रोजेक्ट ट्री> क्षमताएं> पुश सूचनाएं चालू होनी चाहिए।
trevorgrayson

6

यदि एप्पल पुश अधिसूचना सेवा को सक्षम और कॉन्फ़िगर करने से पहले प्रोविजनिंग प्रोफाइल का उपयोग किया जाता है, तो आपको प्रोविजनिंग प्रोफाइल को फिर से डाउनलोड करना होगा।

Xcode ऑर्गनाइज़र और iPhone / iPad से प्रोविज़निंग प्रोफाइल हटाएं। के पास जाओ Settings -> General -> Profiles -> [Your provisioning] -> Remove

नए डाउनलोड किए गए प्रोविज़निंग प्रोफाइल को स्थापित करें। फिर XCode से प्रोजेक्ट को क्लीन और रन करें। अब didRegisterForRemoteNotificationsWithDeviceTokenबुलाया जाना चाहिए।


यह मेरे लिए काम करता है। सिर्फ सर्टिफिकेशन और प्रोविजनिंग को चुना जिसने ऐप के लिए APN रजिस्टर किया था।
ली

मैंने iphone (ios9) से सभी प्रोविज़निंग प्रोफाइल को डिलीट कर दिया और फिर डिवाइस टोकन प्राप्त होने के बाद इसे ठीक करने के लिए चार घंटे का समय दिया (हालाँकि मैं बहुत कुछ सीखता हूँ)। धन्यवाद
Shobhakar तिवारी

3

मैंने एक गलती की और एक कार्यान्वयन विवरण को अनदेखा कर दिया जो मुझे यहां ले गया। मैंने फैंसी पाने और उपयोगकर्ता से पुश नोटिफिकेशन के लिए आवेदन ऑनबोर्डिंग प्रक्रिया में बाद में पूछने की कोशिश की, इसलिए मेरे पास registerForRemoteNotificationTypes, didRegisterForRemoteNotificationsWithDeviceTokenऔर didFailToRegisterForRemoteNotificationsWithErrorसभी एक कस्टम UIView में थे।

ठीक: didRegisterForRemoteNotificationsWithDeviceTokenऔर didFailToRegisterForRemoteNotificationsWithErrorमें होने की जरूरत UIApplicationDelegate( YourAppDelegate.m) शुरू किया जा करने के लिए।

अब स्पष्ट लगता है, हे।


हाँ विधियाँ जरूरत है AppDelegate। विश्वास नहीं कर सकता कि मैंने इस सरल उत्तर पर अपने पिछले कुछ घंटों को बर्बाद कर दिया
यहां तक ​​कि चेंग

3

सुनिश्चित करें कि आपका इंटरनेट कनेक्शन चालू है। इंटरनेट कनेक्शन के कारण मुझे कार्य सूचनाएँ प्राप्त करने में घंटों लग गए।


3

यदि आपने मौजूदा ऐप आईडी में पुश जोड़ा है, तो सुनिश्चित करें कि आपने अपने प्रोविज़निंग प्रोफाइल को फिर से तैयार किया है। यदि आप नहीं करते हैं, तो प्रोफ़ाइल को ऐप आईडी पर आपके सक्षम करने के बारे में पता नहीं चलेगा।


3

यह मेरे लिए काम करने की कोशिश करो,

पहला कदम

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

उपरोक्त विधि में नीचे कोड जोड़ें

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

दूसरा कदम

कोड फ़ंक्शन के नीचे जोड़ें

 #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

आपको निचे के फंक्शन में डिवाइस टोकन मिलेगा

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

विस्तार उत्तर के लिए देखें यह

उम्मीद है कि यह किसी एक के लिए मदद है।


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

डिवाइस टोकन प्राप्त करने के लिए न्यूनतम आवश्यकता:

ऐप आईडी, प्रोविजनिंग या प्रमाण पत्र आदि को कॉन्फ़िगर करने की आवश्यकता नहीं है, इस प्रकार कोई कोड हस्ताक्षर करने के लिए सेट नहीं है प्रतिनिधि विधि didRegisterForRemoteNotificationsWithDeviceToken कहा जाता है।

मैंने सिर्फ डिफ़ॉल्ट सेटिंग्स के साथ एकल दृश्य के लिए Xcode 7 में एक नया iOS प्रोजेक्ट बनाया और com.mycompany.pushtest जैसी एक यादृच्छिक बंडल आईडी दी, जो ऐप्पल देव पोर्टल में कॉन्फ़िगर नहीं की गई है।

निम्नलिखित कोड के साथ, मैं अपने डिवाइस टोकन को वाईफाई पर इंटरनेट एक्सेस के साथ अपने iPad पर didRegisterForRemoteNotificationsWithDeviceToken विधि में प्राप्त कर रहा हूं । मेरा उपकरण संलग्न है और मैं सिर्फ ऐप को सीधे xcode से चला रहा हूं और 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

मेरे पास इस पर एक बिंदु है। वर्तमान में मैं भी इस समस्या का सामना करता हूं। मैंने प्रलेखन के अनुसार सब कुछ किया है, लेकिन प्रतिनिधि पद्धति कॉल नहीं कर रही थी। आम तौर पर मैंने एक पोस्ट को यह कहते हुए देखा कि नेटवर्क के साथ समस्या है। तब मैंने नेटवर्क बदल दिया है और यह ठीक काम करता है। इसलिए नेटवर्क का भी ध्यान रखें क्योंकि कुछ नेटवर्क APNS को ब्लॉक कर सकते हैं।


1

सबसे अधिक कष्टप्रद 3h को बर्बाद करने के बाद, इस मुद्दे को हल करने के लिए चरण हैं:

  1. ऐप को डिलीट करें

  2. डिवाइस को रीसेट करें

  3. दोबारा दौडो

यह सिर्फ काम किया


0

यह मेरे साथ हुआ, क्योंकि मैंने फोन पर सभी डेटा को रीसेट और हटा दिया था (एक देव फोन का उपयोग करना चाहता था)। इसने APN को फिर से फोन सेट करने के बाद कनेक्ट होने से रोक दिया।

मैंने सभी प्रकार की चीजों की कोशिश की, लेकिन केवल एक चीज जिसने इसे तय किया वह एक नए सिम कार्ड के तहत एक वाहक के साथ काम करने के लिए फोन सेट कर रहा था।

यह लिंक इस बात की ओर अधिक संकेत देता है कि क्या चल रहा है: https://developer.apple.com/library/ios/technotes/tn2265/_index.html

यह कहता है कि APN तरजीह के विपरीत वाहक / टावरों के माध्यम से अधिमानतः कनेक्ट करने का प्रयास करता है। शायद मुद्दा यह भी था कि वाईफाई नेटवर्क पर राउटर ब्लॉकिंग पोर्ट 5223 के साथ कुछ चल रहा था, लेकिन मुझे संदेह है क्योंकि यह वैश्विक रीसेट होने से पहले वाले दिन ठीक काम करता था।


0

मेरे लिए यह क्या हल किया गया था निर्माण सेटिंग्स और कोड हस्ताक्षर अनुभाग के तहत, मैन्युअल रूप से कोड हस्ताक्षर पहचान और प्रावधान प्रोफाइल का चयन। जाहिरा तौर पर स्वचालित सेटिंग सही नहीं उठा रही थी और इसलिए ऐप ठीक से अधिकृत नहीं था।


0

यदि एप्लिकेशन का पुश संदेश बंद हो जाता है,

appdidRegisterForRemoteNotificationsWithDeviceToken कभी नहीं कहा जाएगा


0

इसके अलावा, Apple की स्थिति की जांच करना न भूलें Apple https://developer.apple.com/system-status/

मैंने ऊपर पोस्ट किए गए सभी समाधानों की कोशिश की, लेकिन अंत में गलती यह थी कि APNS सेवा नीचे थी! अगले दिन सभी फिर से उम्मीद के मुताबिक काम कर रहे थे।

इसके अलावा, आपके पास कॉलबैक विधि में एक टाइपो है:

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

रूपेश ने बताया कि सही विधि नाम है:

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

शायद इसीलिए आपको अपने मामले में कभी टोकन नहीं मिला!


वास्तव में विधि का नाम गलत है, यह होना चाहिए - (शून्य) आवेदन: (UIApplication *) आवेदन didRegisterForRemoteNotificationsWithDeviceToken: (NSData *) डिवाइसटोकन मापदंडों के बीच एक स्थान है
Rupesh

धन्यवाद, अपनी टिप्पणी शामिल करने के लिए उत्तर को अपडेट कर दिया है। बहुत यकीन है कि यह ओपी समस्या का समाधान है, लेकिन हम कभी पता नहीं लगा सकते हैं!
ब्रेट

0

आपको didFinishLaunchingWithOptions से registerForNotifications विधि को कॉल करने की आवश्यकता है।

 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

मेरे पास एक अलग मुद्दा था जिसमें मेरे पुश नोटिफिकेशन कॉलबैक को 3 पार्टी लाइब्रेरी द्वारा अपहृत किया जा रहा था, जिसे मैंने शामिल किया था, अर्थात् फायरबेस। इन पुस्तकालयों कॉलबैक प्राप्त करने के लिए अधिसूचना कॉलबैक विधियों को ज़ोर से मारना।

आशा है कि यह किसी की मदद करता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.