0

これは AppDelegate に実装されています

    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    return FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions)
}

Facebook で共有されているいくつかのパラメーターを含む App Link があります。アプリが最小化されている場合、Facebook のリンクをクリックするとアプリが開き、関数が呼び出されます

func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject?) -> Bool

それが起こるべきだったように。

問題は、アプリが終了した (最小化されていない) 場合、Facebook のリンクをクリックするとアプリが開きますが、関数が呼び出されないため、入力パラメーターを処理できません。

Facebook のドキュメントでコールド スタートの処理に関する情報を見つけましたが、その情報は古くなっています。

実装するものを見逃したのですか、それとも Facebook のバグですか?

4

1 に答える 1

3

私はしばらくこれについて頭を悩ませていました...

アプリのリンクを開くと、アプリが現在実行されていない場合、アプリが起動し、最初に が呼び出されますapplication:didFinishLaunchingWithOptions。このメソッドに戻った場合、適切なパラメータをtrue呼び出しapplication:openURL:sourceApplication:annotation:て渡します。ただし、 をapplication:didFinishLaunchingWithOptions返す場合false、 thenapplication:openURL:sourceApplication:annotation:は呼び出されません。

FBSDK を使用している場合は、

return FBSDKApplicationDelegate.sharedInstance().application(application,
didFinishLaunchingWithOptions: launchOptions)

あなたの最後にapplication:didFinishLaunchingWithOptions。彼らのドキュメントを見ると、それが返されると記載されています

URL が Facebook SDK 用である場合は YES、そうでない場合は NO。

したがって、あなたの applink は FBSDK 向けではないため、返されfalseます。ただし、キーUIApplicationLaunchOptionsURLKeyとはUIApplicationLaunchOptionsSourceApplicationKeyで利用できますlaunchOptions。あなたapplication:didFinishLaunchingWithOptionsが呼び出す場合、あなたの

if let url = launchOptions?[UIApplicationLaunchOptionsURLKey] as? NSURL,
  sourceApplication = launchOptions?[UIApplicationLaunchOptionsSourceApplicationKey] as? String {      
   self.application(application, openURL: url, sourceApplication: sourceApplication, annotation: nil) 
}

その後、それを回避できます。AppDelegate メソッドを手動で呼び出す必要があるかどうかはわかりませんが、私にとってはうまくいきます。

于 2015-08-07T02:06:03.290 に答える