iOS で Firebase ダイナミック リンクを実装しているときに、[ダイナミック リンクを開く] をクリックすると、デバッグ コンソールにエラー メッセージが表示されます。
FIRAnalytics/警告 application:continueUserActivity:restorationHandler の実装: 見つかりません。ハンドラーを App Delegate に追加してください。クラス: LLAppDelegateProxy
この問題を再現するために、最小化されたプロジェクトを作成します。新しいプロジェクトには次のものが含まれます
Pod 'Localytics'
Pod 'Firebase/DynamicLinks’
そして、への唯一の追加コードAppDelegate.swift
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
FIRApp.configure()
Localytics.autoIntegrate("apikey", launchOptions: launchOptions)
return true
}
func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
let dynamicLink = FIRDynamicLinks.dynamicLinks()?.dynamicLink(fromCustomSchemeURL: url)
if let dynamicLink = dynamicLink {
print(dynamicLink.url)
return true
}
return false
}
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([Any]?) -> Void) -> Bool {
guard let dynamicLinks = FIRDynamicLinks.dynamicLinks() else {
return false
}
let handled = dynamicLinks.handleUniversalLink(userActivity.webpageURL!) { (dynamiclink, error) in
print(dynamiclink?.url)
}
return handled
}
Firebase がの代わりにapplication:continueUserActivity:restorationHandler:
Localyticsを呼び出そうとしているようです。Branch.io からの GitHub イシュー投稿もあります: https://github.com/BranchMetrics/ios-branch-deep-linking/issues/485LLAppDelegateProxy
AppDelegate.swift
この投稿には、Google Analytics と Localytics の間に競合があり、Branch がapplication:continueUserActivity:restorationHandler:
適切な場所で関数を見つけられない原因になっていると記載されています。
メソッドのスウィズリングを変更するという 3 番目の提案に従います。
//Their solution in Objc
SwizzleInstanceSelectorWithNewSelector(
[[UIApplication sharedApplication].delegate class],
@selector(application:continueUserActivity:restorationHandler:),
[self class],
@selector(BRapplication:continueUserActivity:restorationHandler:)
);
//My swift version in AppDelegate.swift
let originalSelector = #selector(AppDelegate.application(_:continueUserActivity:restorationHandler:))
let swizzledSelector = #selector(AppDelegate.firApplication(_:continueUserActivity:restorationHandler:))
let originalMethod = class_getClassMethod(AppDelegate.self, originalSelector)
let swizzledMethod = class_getClassMethod(AppDelegate.self, swizzledSelector)
method_exchangeImplementations(originalMethod, swizzledMethod)
しかし、これは私にはうまくいきません。まだ警告が表示されており、リンクはまだ処理されていません。
メソッドのスウィズリングを修正するのを手伝ってもらえますか、それともより良い解決策があります:]