2015-05-14 2 views
0

Это реализуется в AppDelegateHandling холодный старт для App Ссылки на Facebook IOS SDK V4.1

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

У меня есть ссылки на приложение с некоторыми параметрами, которые делились на Facebook. Если мое приложение сведено к минимуму, нажатие ссылки на Facebook открывает мое приложение и вызывающую функцию

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

как это должно было случиться.

Проблема есть, если мое приложение завершено (не сведено к минимуму) нажатие ссылки на Facebook открывает мое приложение, но функция не вызывается, поэтому я не могу обрабатывать входные параметры.

Я нашел что-то о обработке холодного запуска в документации по Facebook, но эта информация устарела.

Я пропустил что-то для реализации или это ошибка в Facebook?

+1

Единственный способ для приложения Facebook открыть ваше приложение в iOS - это вызвать метод openURL, который должен вызвать метод openURL для делегата вашего приложения, независимо от того, холодно ли он или просто сведен к минимуму. –

+0

@MingLi, но метод OpenURL не вызывается, когда мы писали, как указано выше, в методе dofinishLaunch. он всегда называется методом didFinishLaunch. – user2526811

+0

@NFilip У вас есть решение для этого? – user2526811

ответ

3

Я был испуг головой об этом на некоторое время ...

При открытии ссылки приложение и приложение не запущено, приложение запускает и первые вызовы application:didFinishLaunchingWithOptions. Если вы вернете true в этом методе, он будет следовать по телефону application:openURL:sourceApplication:annotation: и передать соответствующие параметры. Однако, если application:didFinishLaunchingWithOptions возвращает false, то application:openURL:sourceApplication:annotation: никогда не вызывается.

Если вы используете FBSDK, то вы будете называть

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

в конце вашего application:didFinishLaunchingWithOptions. Если вы посмотрите на их документацию, оно сообщит, что оно возвращает

ДА Если URL-адрес предназначен для SDK для Facebook, НЕТ, если нет.

Итак, поскольку ВАШ приемник не предназначен для 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, но это работает для меня.

+0

есть ли какое-нибудь решение? – user2526811

+1

'FBSDKApplicationDelegate.sharedInstance(). Application (application, didFinishLaunchingWithOptions: launchOptions)' 'return true' будет ли это работать? – krishnanunni

+0

Почему FB SDK переопределяет результат суперкласса вне меня ... – pechar