কেন রেজিস্টার ফররেমোটনোটিকেশনসডভাইস টোকেন নামে ডাকা হয় না


89

আমি একটি অ্যাপ্লিকেশন তৈরি করছি যাতে আমি অ্যাপল পুশ বিজ্ঞপ্তি পরিষেবাটি প্রয়োগ করতে চাই। আমি এই টিউটোরিয়ালে প্রদত্ত ধাপে ধাপে নির্দেশাবলী অনুসরণ করছি ।

কিন্তু তবুও, পদ্ধতিগুলি বলা হয় না। আমি জানি না কী কারণে সমস্যা হচ্ছে। আমাকে কি কেউ সাহায্য করতে পারবেন?

    - (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

উত্তর:


74

আমার একই সমস্যা ছিল: কলিংয়েও অনুরোধ registerForRemoteNotificationTypes:করা হয়নি application:didRegisterForRemoteNotificationsWithDeviceToken:এবং নাওapplication:didFailToRegisterForRemoteNotificationsWithError:

অ্যাপলের প্রযুক্তিগত নোট টিএন 2265 এর সাহায্যে অবশেষে আমি এই সমস্যাটি সমাধান করেছি

এটি আমিই করেছি:

প্রথমত, আমি ডাবল চেক করা যে আমি যথার্থই পুশ বিজ্ঞপ্তির জন্য সঠিকভাবে নিবন্ধনের "এপিএস-পরিবেশ" কী জন্য আমার প্রভিশনিং প্রফাইল যাচাই এবং .app ফাইল নিজেই codesigning সহ। আমি এটি সব সঠিকভাবে সেট আপ ছিল।

তারপরে আমাকে কনসোলে পুশ বিজ্ঞপ্তি স্থিতি বার্তাগুলি ডিবাগ করতে হয়েছিল (আপনার ডিভাইসে পার্সেন্টিস্ট কনসেকশনলগিং.মোবাইল কনফিগ প্রভিশন প্রোফাইল ইনস্টল করতে হবে এবং এটি পুনরায় বুট করতে হবে "" পুশ স্থিতি বার্তাগুলি পর্যবেক্ষণ "এর অধীনে টিএন 2265 দেখুন )। আমি লক্ষ্য করেছি যে অ্যাপস প্রক্রিয়াটি একটি টাইমার শুরু করে এবং ন্যূনতম আগুনের তারিখ গণনা করে, যা আমাকে সন্দেহ করেছিল যে পুশ-বিজ্ঞপ্তি নিবন্ধকরণ নিশ্চিতকরণ বার্তা, যা সাধারণত এই সময়ে উপস্থাপিত হয়, টিএন 2265 তে নির্দেশিত হিসাবে, এপিএনএস দ্বারা দমন করা হয়:

আইওএসে পুশ বিজ্ঞপ্তি অনুমতি সতর্কতা পুনরায় সেট করা

প্রথমবার যখন কোনও পুশ-সক্ষম সক্ষম অ্যাপটি পুশ বিজ্ঞপ্তিগুলির জন্য নিবন্ধভুক্ত করে, আইওএস ব্যবহারকারীরা যদি সেই অ্যাপ্লিকেশনটির জন্য বিজ্ঞপ্তি পেতে চান তবে তাদের জিজ্ঞাসা করে। ব্যবহারকারী একবার এই সতর্কতার জবাব দেওয়ার পরে ডিভাইসটি পুনরুদ্ধার করা না হওয়া বা অ্যাপ্লিকেশনটি কমপক্ষে এক দিনের জন্য আনইনস্টল না করা হলে তা আর উপস্থাপন করা হবে না।

আপনি যদি নিজের অ্যাপ্লিকেশনটির প্রথমবারের মতো অনুকরণ করতে চান তবে আপনি অ্যাপটিকে এক দিনের জন্য আনইনস্টল ছেড়ে যেতে পারেন। আপনি আরও একদিন বা তার বেশি দিন সিস্টেমের ঘড়ির সামনে সেট করে, ডিভাইসটিকে পুরোপুরি বন্ধ করে, এবং ডিভাইসটি আবার চালু করে না করে আপনি পরবর্তীটি অর্জন করতে পারেন।

সুতরাং, আমি ডিভাইসটি থেকে অ্যাপটি সরিয়েছি, তারপরে সেটিংসে ম্যানুয়ালি আইফোনের তারিখটি পরিবর্তন করেছি, ডিভাইসটি পুনরায় বুট করেছিলাম এবং অ্যাপটি পুনরায় ইনস্টল করেছি।

পরের বার আমার কোডটি কল করার সময় registerForRemoteNotificationTypesএটি প্রত্যাশার সাথে কলব্যাক পেয়েছিল।

এটি আমার জন্য সমস্যাটি সমাধান করেছে। আশা করি এটা সাহায্য করবে.


4
আমার মূল কথাটি ছিল আমি অন্য মেশিনে একটি পুরানো বিকাশ শংসাপত্র ব্যবহার করছিলাম। মূল বিকাশের ল্যাপটপ থেকে নতুন শংসাপত্র স্থানান্তর করা এই সমস্যাটিকে স্থির করে।
মার্কাস রাউতোপুরো

4
সক্ষম করার পরে পুশ নোটিফিকেশনগুলি আবার প্রভিজিং প্রোফাইল তৈরি করতে প্রয়োজনীয়।
টনি

4
ওহে! যদিও এটি একটি পুরানো পোস্ট, আমি জানতে পেরেছিলাম যে আপনি যখন অ্যাপ্লিকেশনটির সমস্ত বিজ্ঞপ্তি সেটিংস বন্ধ করেন এবং চালু করেন তখন কখনও কখনও এটি স্থির হয়ে যায়। কারণ শেষবারের মতো আমি মনে করি, রেজিস্টার ফরমোট নোটিকেশনস উইথডভাইসটোকেন তখন ডাকা হয়েছিল তখন হঠাৎ করে তা হয় নি। আশা করি এটা সাহায্য করবে.
ওতাকু প্রোগ্রামার

4
আমি শুধুমাত্র অন্য রিসেট পদক্ষেপ যোগ করে কাজ এই পেয়েছিলাম: 1. মুছে ফেলুন অ্যাপ্লিকেশন 2. রিসেট ডিভাইস 3. ফরোয়ার্ড ঘড়ি 1+ দিন 4. রিসেট ডিভাইস আবার 5. এখন ইনস্টল এবং এটি ধাক্কা বিজ্ঞপ্তি সতর্কতা সূচিত করা উচিত
etayluz

এক্সকোডে বা ডিভাইসে নিজেই একই বিকাশকারী প্রোফাইলের একাধিক "বৈধ" কপি আপনার কাছে নেই তা নিশ্চিত করে নেওয়াও গুরুত্বপূর্ণ important সম্ভবত আপনি একটি নতুন এপিএন শংসাপত্র তৈরি করেছেন এবং পূর্ববর্তী শংসাপত্রটির মেয়াদ শেষ হওয়ার পরে আপনার প্রভিশন প্রোফাইলটি পুনরায় তৈরি করেছেন। পুরানো বিকাশ প্রোফাইলটি এখনও ডেভলপমেন্ট প্রোফাইল হিসাবে বৈধ, তবে এটি এপিএন সক্ষম করতে পর্যাপ্ত হবে না। আপনি "বৈধ অ্যাপস-এনটাইটেলমেন্ট ব্লাহ ব্লাহ" সম্পর্কে একটি সাধারণ ত্রুটি দেখতে পাবেন।
jaredsinclair

66

আইওএস 8-তে, কয়েকটি পদ্ধতি অবচয় করা হয়েছে। আইওএস 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"]){
    }
}

দ্রষ্টব্য: উপরে আইওএস 8-তে দুটি নতুন পদ্ধতির প্রয়োজন didRegisterForRemoteNotificationsWithDeviceTokenএবং didReceiveRemoteNotification.. ছাড়াও অন্যান্য প্রতিনিধি পদ্ধতিও চাওয়া হবে না।

দেখুন: দূরবর্তী বিজ্ঞপ্তি আইওএস 8


4
এই দুটি নতুন পদ্ধতিটি অ্যাপেলেগেট.এম এ যাওয়া উচিত?
ইথান পার্কার

- (অকার্যকর) অ্যাপ্লিকেশন: (ইউআইএআইপ্লিকেশন *) অ্যাপ্লিকেশনডইজিস্টারউজারনোটিকেশনসেটেটিংস: (ইউআইইউসারনোটিকেশনসেটিংস *) বিজ্ঞপ্তিসেটিংস {// বিজ্ঞপ্তিগুলি পেতে নিবন্ধন করুন [অ্যাপ্লিকেশন রেজিস্ট্রেশনরেমোটনোটিকেশন]; Following নিম্নলিখিতটি যুক্ত করা বিপজ্জনক, এটি আমার ফোনটি ক্র্যাশ করেছে এবং আমি এই মুহুর্তে এটিকে কারখানার পুনরায় সেট করতেও অক্ষম।
জন

আপনি যদি এখানেই শেষ করেন তবে সম্ভবত আপনি এই উত্তরটি খুঁজছেন। অদ্ভুতভাবে, আমাকে এই পদ্ধতির একটি যুক্ত না করেই ডেলিগেটকে আজকের আগে ডাকা হয়েছিল। এখন মনে হচ্ছে আমার দুজনেরই দরকার।
উইল

আমার অ্যাপ্লিকেশনটি এই লাইনের সাথে ক্র্যাশ হয়েছে[application registerForRemoteNotifications];
স্মিথি

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হবে না।


@ হচল: আমি আমার উত্তর আপডেট করেছি যাতে এটি আরও নির্দিষ্ট করে প্রশ্নের উত্তর দেয়।
এরিক

4
নোট করুন যে ডিফল্ট ট্যুরিজিস্টারফরমেটনোটিকেশনস উইথএরআর এর সাথে আর কল হবে না। প্রকৃতপক্ষে, আপনি সেটিংসে আপনার অ্যাপ্লিকেশনের জন্য পুশ বিজ্ঞপ্তিগুলি অক্ষম করলে (ডিভাইস বা সিমুলেটারে থাকাকালীন) কোনও বিজ্ঞপ্তিই কল করা হয় না। অ্যাপল এটিকে একটি ত্রুটি হিসাবে বিবেচনা করছে বলে মনে হচ্ছে না stackoverflow.com/questions/9199935/…
জ্যাক মরিস

12

আপনার কোডটিতে কল করেছেন তা নিশ্চিত করুন (সমর্থিত বিজ্ঞপ্তির ধরণ অনুযায়ী আপডেট করুন)

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

এবং প্রভিশন প্রোফাইলটি এপিএনএস সক্ষম। আপনাকে এপিএনএস সক্ষম করার পরে প্রভিশন প্রোফাইলটি পুনরায় ডাউনলোড করতে হবে। যদি আপনার সমস্যা হয় এবং আপনি ত্রুটিগুলি পান, তবে সম্ভবত আপনার কোনও এনটাইটেলমেন্টস.প্লাইটি তৈরি করা উচিত এবং "বিকাশ" বা "উত্পাদনের" মান সহ কী "অ্যাপস-এনভায়রনমেন্ট" যুক্ত করা উচিত যা নির্মাণের ধরণের উপর নির্ভর করে (সাধারণত এই কী-মানটির জুটি হয়) প্রভিশন প্রোফাইলে অন্তর্ভুক্ত রয়েছে তবে কখনও কখনও তাদের সাথে এক্সকোড জগাখিচুড়ি করে)।


দ্রষ্টব্য: "এবং প্রভিশন প্রোফাইলটি এপিএনএস সক্ষম করা আছে।" আপনার প্রজেক্ট ট্রি উপরে> ক্লিকযোগ্যতা> পুশ বিজ্ঞপ্তিগুলি চালু করতে হবে।
ট্র্যাভোরগ্রায়সন

6

অ্যাপল পুশ নোটিফিকেশন পরিষেবাটি সক্ষম ও কনফিগার করার আগে যদি প্রভিশনিং প্রোফাইলগুলি ব্যবহার করা হয় তবে আপনাকে আবার প্রভিশিং প্রোফাইলগুলি পুনরায় ডাউনলোড করতে হবে।

এক্সকোড সংগঠক এবং আইফোন / আইপ্যাড থেকে প্রভিশন প্রোফাইল মুছুন। যাও Settings -> General -> Profiles -> [Your provisioning] -> Remove

নতুন ডাউনলোড হওয়া প্রভিশন প্রোফাইলগুলি ইনস্টল করুন। তারপরে এক্সকোড থেকে প্রকল্পটি পরিষ্কার এবং পরিচালনা করুন run এখন didRegisterForRemoteNotificationsWithDeviceTokenবলা উচিত।


এটা আমার জন্য কাজ করে। অ্যাপ্লিকেশনটির জন্য এপিএন নিবন্ধিত করে কেবল শংসাপত্র এবং প্রভিশন বেছে নিয়েছে।
লী

আমি আইফোন (ios9) এবং তারপরে ডিভাইস টোকেন পাওয়ার পরে সমস্ত প্রভিশন প্রোফাইল মুছে ফেলেছি .এটি ঠিক করতে চার ঘন্টা সময় ব্যয় করুন (যদিও আমি অনেক কিছু শিখি)। ধন্যবাদ
শোভাকর তিওয়ারি

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

ডিভাইস টোকন পাওয়ার জন্য ন্যূনতম প্রয়োজনীয়তা:

অ্যাপ আইডি, প্রভিশন বা শংসাপত্র ইত্যাদি কনফিগার করার দরকার নেই এইভাবে প্রতিনিধি পদ্ধতিটি পেতে কোনও কোড সাইনিং সেট করে নিবন্ধনকারীর জন্য রেমোটনোটিকেশনসডভাইসটোকেন কল করা হয়।

আমি কেবলমাত্র ডিফল্ট সেটিংসের সাথে একক দর্শনের জন্য এক্সকোড 7 এ একটি নতুন আইওএস প্রকল্প তৈরি করেছি এবং com.mycompany.pushtest এর মতো একটি এলোমেলো বান্ডেল আইডি দিয়েছি যা অ্যাপল দেব পোর্টালে কনফিগার করা নেই।

নীচের কোডটি সহ, আমি আমার আইপ্যাডে ডায়িগ্রিস্টার ফরমোটনোটিকেশনসডথ ডেভিসটোকেন পদ্ধতিতে আমার ওয়াইফাইতে ইন্টারনেট অ্যাক্সেস সহ টোকন পাচ্ছি । আমার ডিভাইসটি সংযুক্ত এবং আমি কেবল এক্সকোড থেকে অ্যাপ্লিকেশনটি চালিয়ে যাচ্ছি এবং এক্সকোডের কনসোলের মানগুলি দেখছি।

- (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

আমার এই বিষয়ে একটি বক্তব্য আছে।আলিভাবে আমিও এই সমস্যার মুখোমুখি হয়েছি। ডকুমেন্টেশন অনুসারে আমি সব কিছু করেছি কিন্তু ডেলিগেট পদ্ধতি কল করছিল না।ফিনালি আমি একটি পোস্ট দেখেছি যে সমস্যাটি নেটওয়ার্কের সাথে রয়েছে। তখন আমি নেটওয়ার্ক পরিবর্তন করেছি এবং এটি ঠিকঠাক কাজ করে। সুতরাং নেটওয়ার্ক সম্পর্কেও যত্ন নিন কারণ কয়েকটি নেটওয়ার্কই এপিএনএসকে ব্লক করতে পারে।


1

সর্বাধিক বিরক্তিকর 3 ঘন্টা নষ্ট করার পরে, সমস্যাটি সমাধানের পদক্ষেপ এখানে দেওয়া হল:

  1. অ্যাপটি মুছুন

  2. ডিভাইসটি পুনরায় সেট করুন

  3. আবার দৌড়াও

এটা ঠিক কাজ করে


0

আমার সাথে এটি ঘটেছে, কারণ আমি ফোনের সমস্ত ডেটা রিসেট করে মুছে ফেলেছি (কোনও ডেভ ফোন ব্যবহার করতে চেয়েছিল)। এটি আবার ফোন সেট আপ করার পরে এপিএনকে সংযোগ স্থাপন করতে বাধা দিয়েছে।

আমি সব ধরণের জিনিস চেষ্টা করেছিলাম, তবে কেবলমাত্র এটিই স্থির করেছিল যে ফোনটি একটি নতুন সিম কার্ডের অধীনে ক্যারিয়ারের সাথে কাজ করার জন্য সেট আপ করা হয়েছিল।

এই লিঙ্কটি যা চলছিল তা সম্পর্কে আরও ইঙ্গিত দেয়: https://developer.apple.com/library/ios/technotes/tn2265/_index.html

এটিতে বলা হয়েছে যে এপিএন ওয়াইফাইয়ের বিপরীতে ক্যারিয়ার / টাওয়ারগুলির মাধ্যমে পছন্দসই সংযোগ দেওয়ার চেষ্টা করে। ওয়াইফাই নেটওয়ার্কে রাউটার ব্লকিং পোর্ট ৫২২২৩ নিয়ে এই সমস্যাটিও ছিল কিছু হতে পারে তবে আমি সন্দেহ করি কারণ এটি বিশ্বব্যাপী পুনরায় সেট হওয়ার আগের দিন ঠিকঠাক হয়েছিল।


0

আমার পক্ষে কী সমাধান হয়েছে সেটি বিল্ড সেটিংসে এবং কোড সাইনিং বিভাগের অধীনে ম্যানুয়ালি কোড সাইনিং পরিচয় নির্বাচন করে এবং প্রোফাইল প্রভিশনিংয়ে যাচ্ছিল। দৃশ্যত স্বয়ংক্রিয়ভাবে সেটিংটি সঠিকভাবে বাছাই করছিল না এবং তাই অ্যাপটি যথাযথভাবে অনুমোদিত হয়নি।


0

যদি অ্যাপ্লিকেশনটির পুশ বার্তা বন্ধ করে দেয়,

appdidRegisterForRemoteNotificationsWithDeviceToken কখনই কল করা হবে না


0

এছাড়াও, অ্যাপল https://developer.apple.com/system-status/ এ সিস্টেমের স্থিতি পরীক্ষা করতে ভুলবেন না

আমি উপরে পোস্ট করা সমস্ত সমাধান চেষ্টা করেছিলাম তবে শেষ পর্যন্ত দোষটি কারণ এপিএনএস পরিষেবা বন্ধ ছিল! পরের দিন সবাই প্রত্যাশায় আবার কাজ করছিল।

এছাড়াও, আপনার কলব্যাক পদ্ধতিতে আপনার একটি টাইপ রয়েছে:

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

রূপেশ ইঙ্গিত করায় সঠিক পদ্ধতির নামটি হ'ল:

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

এ কারণেই সম্ভবত আপনি কখনই আপনার ক্ষেত্রে টোকেন পান নি!


প্রকৃতপক্ষে পদ্ধতির নামটি ভুল, এটি হওয়া উচিত - (শূন্য) অ্যাপ্লিকেশন: (ইউআইএআইপ্লিকেশন *) অ্যাপ্লিকেশনটি রেজিস্টারফরমেটনোটিকেশনস উইথডেভাইসটোকেন: (এনএসডাটা *) ডিভাইস টোকেন পরামিতিগুলির মধ্যে একটি স্থান রয়েছে
রূপেশ

ধন্যবাদ, আপনার মন্তব্য অন্তর্ভুক্ত করার জন্য উত্তর আপডেট করেছেন। খুব নিশ্চিত যে এটি ওপিএস সমস্যার সমাধান তবে আমরা কখনই এটির সন্ধান করতে পারি না!
ব্রেট

0

আপনাকে ফিনিশল্যাঞ্চিং উইথঅপশন থেকে রেজিস্টারফরনোটিকেশন পদ্ধতিতে কল করতে হবে।

 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

আমার একটি পৃথক সমস্যা ছিল যার মধ্যে আমার পুশ বিজ্ঞপ্তি কলব্যাকগুলি তৃতীয় পক্ষের লাইব্রেরি দ্বারা হাইজ্যাক করা হচ্ছিল, যেটি আমি অন্তর্ভুক্ত করেছি ফায়ারবেস। এই লাইব্রেরি কলব্যাকগুলি পেতে নোটিফিকেশন কলব্যাক পদ্ধতিগুলিকে পুশ করে।

আশা করি এটি কাউকে সাহায্য করবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.