application(…continue userActivity…)メソッドがiOS 13で呼び出されない


11

こんにちは、私はUniversalLinkを使用してiOSアプリを作成しています。

Universal Linkは正常に機能しますが、コールバックメソッドは呼び出されません。

私のAppDelegate.swiftは以下です。

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

このメソッドは、iOS 12 Simulatorで呼び出されます。

そのため、問題はiOS 13でのみ発生します。

iOS13でのみ、このエラーはコンソールに出力されます。

BackgroundTaskを終了できません:識別子1(0x1)のバックグラウンドタスクが存在しないか、既に終了している可能性があります。デバッグするには、UIApplicationEndBackgroundTaskError()で中断します。

そのため、これが問題の原因である可能性があります。

私は本当に誰かの助けに感謝します


3
私も同じ問題を抱えています
EmreÖnder'19年

2
この問題に関する更新はありますか?
jfredsilva

1
誰かがこの問題の解決策を見つけましたか?

@EmreÖnder1つの解決策を見つけました(回答を確認してください)。うまくいけば、それはあなたと同じ問題だった

@jfredsilva 1つの解決策を見つけました(回答を確認してください)。うまくいけば、それはあなたと同じ問題だった

回答:


10

私の場合、私が使用してXcodeの11のブランドの新しいプロジェクト開始SceneDelegateなどをAppDelegate

UniversalLinks(およびおそらく他のいくつかのAPI)がこのコールバックをで使用しているようSceneDelegateです:

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

このコールバックの代わりにAppDelegate

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

一度実装すると、SceneDelegateすべてが期待どおりに機能し始めました。まだ試していませんが、iOS 12以前をターゲットにしている場合は、両方の方法を実装する必要があると思います。

お役に立てれば


また、目覚めているわけではありません。AppleはiOS 13でこの問題を確認しました。もちろん、彼らはそれを修正するつもりはありません。
ドミトリー


2
すごい、私はfunc scene(_ scene:UIScene、continue userActivity:NSUserActivity){}をSceneDelegateに入れて、それが現在正常に機能している@ Jan、AppDelegateとSceneDelegateでのコード重複のこの状況を回避できる方法はありますか?ありがとう
Jigar

私は今でもAppDelegate内のコードを必要とするあなたをthinkgません@Jigar

@Jan SceneDelegateを削除しました。その後は問題なく動作します。
Jigar

3

SceneDelegateアプリが起動されたときにNSUserActivityにアクセスできない(この場合、iOS 13でのバックグラウンドNFC読み取り)と同様の問題があり、ユニバーサルリンクがありました。

@Janの回答で述べたように、続行userActivityは現在にありSceneDelegateます。

アプリが実行中またはバックグラウンドである場合。クローズすると、ユニバーサルリンクがscene(_:continue:)デリゲートを起動します。

アプリがバックグラウンドにない場合、ユニバーサルリンクはscene(_:continue:)デリゲートから起動しません。代わりに、NSUserActivityから入手できますscene(_:willConnectTo:options:)。例えば。

func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
    if let userActivity = connectionOptions.userActivities.first {
        debugPrint("got user activity")
    }
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.