ไม่ได้รับโทเค็นอุปกรณ์ APNS บน iOS 13


14

ฉันมีปัญหาเกี่ยวกับโทเค็นอุปกรณ์ APNS ก่อนที่ฉันจะใช้ Xcode 10.2 และ iOS 12.1 ในขณะนี้ฉันเคยได้รับโทเค็นของอุปกรณ์ในวิธีมอบสิทธิ์

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

ฉันลงทะเบียน APNS แบบนี้และมันก็ใช้ได้ดี

UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
    center.delegate = self;
    [center requestAuthorizationWithOptions:(UNAuthorizationOptionSound | UNAuthorizationOptionAlert | UNAuthorizationOptionBadge) completionHandler:^(BOOL granted, NSError * _Nullable error){
                if(!error){
                    [[UIApplication sharedApplication] registerForRemoteNotifications];
                }
    }];

ตอนนี้เมื่อติดตั้ง iOS 13 ลงในอุปกรณ์ iPhone ของฉันและใช้ Xcode 11 วิธีการมอบหมายได้ลงทะเบียนลงทะเบียนสำหรับการแจ้งเตือนการแจ้งเตือนด้วยอุปกรณ์ไม่ได้เรียก ไม่เข้าใจปัญหานี้ ฉันได้ทำการวิจัยเกี่ยวกับเรื่องนี้แล้วฉันรู้ว่ามีการเปลี่ยนแปลงบางอย่างในการรับโทเค็นจากวิธีผู้แทน แต่ในกรณีตัวแทนของฉันยังไม่ได้ถูกเรียก มันทำงานได้ดีสำหรับ iOS 12 อีกครั้ง


ได้รับการแก้ไขแล้ว ต้องสร้างใบรับรองทั้งหมดสำหรับ Xcode 11 จากพอร์ทัลผู้พัฒนาและใช้งานได้
IOS Dev

@IOSDev โปรดบันทึกสิ่งที่คุณทำ ตอนนี้ฉันกำลังวิ่งเข้าไปในสิ่งเดียวกัน; ฉันคิดว่ามีกรรมดีอยู่ที่นี่
Darren Black

1
คุณพบวิธีแก้ปัญหาสำหรับสิ่งนี้หรือไม่? ฉันกำลังทำงานกับปัญหาเดียวกัน
Aman.Samghani

1
@ Aman.Samghani: ใช่ไม่ใช่ครั้งแรกที่มีการสร้างการแจ้งเตือนสำหรับ Push Notification ฉันต้องโทรอีกครั้งด้วยรหัสการแจ้งเตือนแบบพุชเดียวกันจากนั้นฉันก็รับอุปกรณ์โทเค็น ดังนั้นในสองหรือสามครั้งลองฉันได้รับโทเค็น
IOS Dev

คำตอบ:


14

เพียงรีบูท iPhone ของคุณ มันง่ายอย่างนั้นและใน 90% ของกรณีจะแก้ปัญหาของคุณ


1
ฉันหวังว่าฉันจะอ่านความคิดเห็นนี้ก่อนหน้านี้ เสียเวลา 5 ชั่วโมง ++ ในการดีบักและจ้องมองอย่างบ้าคลั่งในโปรไฟล์ ฯลฯ
zuyao88

1
ทำงานให้ฉัน iOS 13.3.1
Jhonattan

มันเป็นเรื่องแปลกที่จะเกิดขึ้นฉันใช้เวลา 3 ชั่วโมงเพื่อหาว่ามีอะไรผิดปกติ
fakiho

2

เข้าสู่ระบบที่https://appleid.apple.com/จากนั้นเปิด url " https://developer.apple.com/account/ios/identifier/bundle " หรือ " https://developer.apple.com/account/resources / ใบรับรอง / รายการ "

ขั้นแรกให้สร้างใบรับรองใหม่สองใบ: (1) เวอร์ชันการพัฒนา Apple Sign Sign สำหรับ iOS, macOS, tvOS และแอพ watchOS ของคุณ สำหรับใช้ใน Xcode 11 หรือใหม่กว่า (2) การกระจาย Apple ลงนามแอพของคุณเพื่อส่งไปยัง App Store หรือการกระจาย Ad Hoc สำหรับใช้กับ Xcode 11 หรือใหม่กว่า

จากนั้นค้นหาเมนู "ตัวระบุ" ผ่านทาง url " https://developer.apple.com/account/resources/identifiers/list " แก้ไขตัวระบุแอปของคุณตรวจสอบให้แน่ใจว่ามีการเพิ่มใบรับรองการพัฒนา SSL และใบรับรอง SSL การผลิตลงในการแจ้งเตือนแบบพุช

ถัดไปเปิดเมนู "โปรไฟล์" ผ่าน url " https://developer.apple.com/account/resources/profiles/list " ตรวจสอบให้แน่ใจว่าใบรับรองเป็นประเภทของ DistributionFor ซึ่งจะใช้ใน Xcode 11 หรือช้ากว่านั้นและบันทึก

ขั้นสุดท้ายให้ดาวน์โหลดไฟล์ Provisioning Profile และไฟล์ CA Certificates ที่สร้างขึ้นใน MAC ของคุณซึ่งจะถูกเพิ่มไปยังแอพพลิเคชั่น XCode และ key-chain โดยดับเบิลคลิกที่ไฟล์แยกกัน

ยิ่งไปกว่านั้นอย่ารีบูตโทรศัพท์มือถือของคุณและตรวจสอบให้แน่ใจว่าคุณได้ตั้งค่าการแจ้งเตือนระยะไกลอย่างถูกต้อง


1

ฉันยังประสบปัญหาเดียวกัน ฉันลองหลายสถานการณ์ ฉันประสบความสำเร็จหลังจากทำตามขั้นตอนด้านล่าง:

  1. รีสตาร์ทอุปกรณ์
  2. เรียกregisterForRemoteNotifications วิธีการในเธรดหลัก

ในกรณีของฉันฉันได้รับโทเค็นของอุปกรณ์ แต่มีความล่าช้าในการตอบสนอง (ฉันคิดว่าเนื่องจากการลงทะเบียนการแจ้งเตือนระยะไกลในเธรดพื้นหลัง) แต่หลังจากย้ายเข้ามา[[UIApplication sharedApplication] registerForRemoteNotifications]อยู่ในเธรดหลักแล้วก็ใช้งานได้ดี

นี่คือรหัสของฉัน:

    [UIApplication sharedApplication].applicationIconBadgeNumber = 0;
    UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
    center.delegate = delegate;
    [center requestAuthorizationWithOptions:(UNAuthorizationOptionSound | UNAuthorizationOptionAlert | UNAuthorizationOptionBadge) completionHandler:^(BOOL granted, NSError * _Nullable error){
        if(!error){
            dispatch_async(dispatch_get_main_queue(), ^{
                [[UIApplication sharedApplication] registerForRemoteNotifications];
                [self callCompletion:TRUE completion:completion];
            });
        }
    }];

หวังว่าจะช่วยได้


ไม่ทำงานเลย
Vyachaslav Gerchicov

0

ฉันเพิ่งแก้ปัญหาด้วยวิธีนี้ตามขั้นตอนด้านล่าง

เพิ่มการพิมพ์ใน didRegisterForRemoteNotificationsWithDeviceToken วิธีการและให้เชื่อมต่ออุปกรณ์

  1. ไปถึงความสามารถเป้าหมาย
  2. ปิดการแจ้งเตือนแบบพุช
  3. สร้างและเรียกใช้แอปบนอุปกรณ์และรอ
  4. จากนั้นตรวจสอบคอนโซลที่คุณได้รับแจ้งข้อความแจ้งข้อผิดพลาด
  5. หยุดเรียกใช้แอพ
  6. เปิดการแจ้งเตือนแบบพุชอีกครั้ง
  7. ไปที่https://developer.apple.com/เลือกบัญชี -> ใบรับรองตัวระบุและเลือกโครงการของคุณ ProvisionalProfiles -> Keys -> คลิกที่แก้ไขและบันทึกหลังจากดาวน์โหลดโปรไฟล์ที่กำหนดและดับเบิลคลิกที่มัน
  8. สร้างและเรียกใช้แอปบนอุปกรณ์
  9. จากนั้นก็ใช้งานได้ดี

    ฉันหวังว่าสิ่งนี้จะช่วยใครบางคน


-2

เกี่ยวข้องกับ DeviceSupport ที่ขาดหายไปในการติดตั้ง XCode ของคุณสำหรับรุ่นแพลตฟอร์มที่ใช้โดยอุปกรณ์ปรับใช้ของคุณ

ในกรณีของฉันแพลตฟอร์ม 13.1 หายไป เพื่อแก้ปัญหาเพียงเพิ่ม DeviceSupports ในโฟลเดอร์

Xcode.app/Contents/Develper/Platforms/iPhoneOS.platform/DeviceSupport

คุณสามารถดาวน์โหลด DeviceSupport ที่หายไปได้จาก: https://github.com/iGhibli/iOS-DeviceSupport/tree/master/DeviceSupport


ไม่มีโชค @Giuseppe แม้จะไม่ได้ทำงาน 12.4.2
iOS Dev

ได้รับการแก้ไขแล้ว ต้องสร้างใบรับรองทั้งหมดสำหรับ Xcode 11 และใช้งานได้
IOS Dev

ฉันสร้างใบรับรองทั้งสองแล้วแต่ยังใช้งานไม่ได้ ฉันยังตรวจสอบ DeviceSupports และมี 13.1 อยู่ด้วย ฉันใช้ xcode 11.1 และทดสอบบน iphone 7 กับ iOS 13.1 ข้อเสนอแนะใด ๆ
Ugo Chirico

1
ฉันเพิ่มโหมดพื้นหลัง: การดึงข้อมูลการประมวลผลและการแจ้งเตือนระยะไกลฉันรีบูตเครื่อง iphone ของฉันและจากนั้นก็ใช้งานได้ จริงๆฉันไม่เข้าใจว่าทำไม แต่ตอนนี้มันใช้งานได้
Ugo Chirico

การสนับสนุนอุปกรณ์สำหรับเครื่องจำลองเป็นปัญหาที่เกี่ยวข้องกับอุปกรณ์จริงอย่างไร
Vyachaslav Gerchicov

-2

ลองสิ่งนี้

  1. ลบแอปพลิเคชันของคุณ
  2. รีบูตโทรศัพท์ของคุณ
  3. สร้างและเรียกใช้ (ติดตั้งแอปพลิเคชันของคุณใหม่) บนอุปกรณ์ของคุณ

มันใช้งานได้สำหรับฉัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.