Phương thức ứng dụng (Tiếp tục userActivity ') không được gọi trong ios 13


11

Xin chào, tôi đang tạo ứng dụng ios bằng UniversalLink.

Universal Link hoạt động tốt, nhưng phương thức gọi lại không được gọi.

AppDelegate.swift của tôi ở bên dưới.

import UIKit

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?


    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.
        return true
    }


    func application(_ application: UIApplication,
                     willFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {
        return true
    }

    // this method not called!!
    func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
        print("called")
        return true
    }
}

Phương pháp này được gọi trong Trình mô phỏng iOS 12.

Vì vậy, vấn đề chỉ xảy ra trong iOS 13.

Chỉ trong iOS13 lỗi này được in trong bảng điều khiển.

Không thể kết thúc BackgroundTask: không có tác vụ nền nào tồn tại với mã định danh 1 (0x1) hoặc có thể nó đã kết thúc. Phá vỡ UIApplicationEndBackgroundTaskError () để gỡ lỗi.

Vì vậy, đây có thể là nguyên nhân của vấn đề.

Tôi thực sự đánh giá cao sự giúp đỡ của ai đó


3
Tôi cũng gặp vấn đề tương tự
Emre Önder

2
Bất kỳ cập nhật về vấn đề này?
jfredsilva

1
Bất cứ ai cũng tìm thấy một giải pháp cho vấn đề này?
Ngày

@ EmreÖnder Tôi tìm thấy một giải pháp (kiểm tra câu trả lời). Hy vọng đó là vấn đề tương tự của bạn
1

@jfredsilva Mình tìm được một giải pháp (kiểm tra câu trả lời). Hy vọng đó là vấn đề tương tự của bạn
1

Câu trả lời:


10

Trong trường hợp của tôi, tôi đã bắt đầu một dự án hoàn toàn mới trên Xcode 11, sử dụng SceneDelegatecũng nhưAppDelegate

Có vẻ như UniversalLinks (và có thể một số API khác) sử dụng cuộc gọi lại này trên SceneDelegate:

func scene(_ scene: UIScene, continue userActivity: NSUserActivity) { }

Thay vì cuộc gọi lại này trên AppDelegate:

func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool { }

Khi tôi thực hiện một cái trên SceneDelegatemọi thứ bắt đầu hoạt động như mong đợi một lần nữa. Tôi chưa thử, nhưng tôi cho rằng nếu bạn đang nhắm mục tiêu iOS 12 trở xuống, bạn có thể cần phải thực hiện cả hai phương pháp.

Hi vọng điêu nay co ich


Nó cũng không đùa. Apple đã xác nhận sự cố đó trong iOS 13. Tất nhiên, họ sẽ không sửa nó.
Dmitry

Câu hỏi được liên kết: stackoverflow.com/questions/58243884/ từ
Dmitry

2
Thật tuyệt vời, tôi đã đặt cảnh func (_ cảnh: UIScene, tiếp tục userActivity: NSUserActivity) {} trong SceneDelegate và bây giờ nó hoạt động tốt hoàn toàn @Jan, Có cách nào chúng ta có thể tránh được tình huống sao chép mã này trên AppDelegate và SceneDelegate không? Cảm ơn
Jigar

@Jigar Tôi không nghĩ rằng bạn thậm chí cần mã trong AppDelegate ngay bây giờ
1

@ Tôi đã xóa CảnhDelegate, sau đó nó hoạt động tốt.
Jigar

3

Tôi gặp vấn đề tương tự với SceneDelegatevà các liên kết phổ quát nơi tôi không thể truy cập NSUserActivity khi ứng dụng vừa được khởi chạy (trong trường hợp này là đọc NFC nền trong ios 13).

Như được đề cập trong câu trả lời của @Jan, tiếp tục userActivity hiện có trong SceneDelegate.

Nếu ứng dụng đang chạy hoặc trong nền tức là. đóng cửa, một liên kết phổ quát sẽ sa thải scene(_:continue:)đại biểu.

Nếu ứng dụng không ở chế độ nền, một liên kết phổ quát sẽ không kích hoạt từ scene(_:continue:)đại biểu. Thay vào đó, NSUserActivitysẽ có sẵn từ scene(_:willConnectTo:options:). ví dụ.

func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
    if let userActivity = connectionOptions.userActivities.first {
        debugPrint("got user activity")
    }
}
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.