Обработка различных схем URL в iOS (Facebook и Instagram)

Я даже не уверен, как определить проблему, но вот она.

У меня есть приложение, которое использует Facebook SDK для входа пользователя. Я следовал руководству по авторизации в Facebook. Я не уверен на 100%, как это работает, но эта часть моего «AppDelegate.m» кажется важной.

- (BOOL)application:(UIApplication *)application
            openURL:(NSURL *)url
  sourceApplication:(NSString *)sourceApplication
         annotation:(id)annotation {

    return [FBSession.activeSession handleOpenURL:url];
}

Все идет нормально. Теперь я хочу реализовать аналогичный логин для instagram, чтобы пользователь мог получить доступ к своим фотографиям. Я запускаю этот пример без проблем (https://github.com/crino/instagram-ios-sdk) . Когда я попытался импортировать это в свой проект, я застрял. Потому что в проекте instagram также есть функция в AppDelegate (IGAppDelegate)

-(BOOL)application:(UIApplication *)application
           openURL:(NSURL *)url
 sourceApplication:(NSString *)sourceApplication
        annotation:(id)annotation {

    return [self.instagram handleOpenURL:url];
}

Теперь я не могу использовать эту функцию (поскольку она дублирует функцию Facebook). Есть ли способ объединить эти две функции для facebook и instagram (возможно, с «если» для разных URL-адресов). Или я потерял

PS: я заметил, что когда я вызываю свое приложение для входа в facebook, URL-адрес выглядит примерно так

fb4333597123414933://authorize/#access_token=BAAGKI2vHLxUBANbDegkrdoc4GJWUZC2clqLAzxz8IxEBZBdEyjrD2oTaGZA0g2AbSGWgvEhONKM6xJWzLCALGUBguqUpor6kXu9ZBewus6in2XCUe6BO51XYv

в инстаграмме так:

igfd725621c5e44198a5b8ad3f7a0ffa09://authorize#access_token=354172840.fd72562.bf6b3611632d4d00b6cef660ea9d9b6f


person ardavar    schedule 25.04.2013    source источник


Ответы (4)


    - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
    {
        NSLog(@"url: %@", [url scheme]);
        
        BOOL callBack;
        // Facebook Call back checking.
        if ([[url scheme] isEqualToString:@"facebook_url_schema"])
        {
            callBack = [FBAppCall handleOpenURL:url sourceApplication:sourceApplication];
        }
        // Instagram call back checking.
        else if ([[url scheme] isEqualToString:@"instagram_url_schema"])
        {
            callBack = [self.instagram handleOpenURL:url];
        }
        return callBack;
    }

person abhi    schedule 19.02.2015
comment
Что вы вводите в описание изображения - person AlxVallejo; 11.07.2017
comment
Незачем. Схемы URL важны. - person abhi; 11.07.2017

Свифт :-

Пример использования Google+ и Facebook в быстром приложении, для обоих требуется метод OpenURL в appDelegate.

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

   println("URL : \(url)")
   if(url.scheme!.isEqual("fb1627825840806667")) {
        println("Facebook url scheme")

    return FBSDKApplicationDelegate.sharedInstance().application(
            application,
            openURL: url,
            sourceApplication: sourceApplication,
            annotation: annotation)

   } else {

        println("Google+ url scheme")

       return GIDSignIn.sharedInstance().handleURL(url, sourceApplication: sourceApplication, annotation: annotation)

   }
}
person Dhaval Jivani    schedule 18.09.2015

Для Swift 2.0

//MARK: FACEBOOK , GOOGLE CALLBACK URL METHOD
    //google-Firebase signin - IOS 8
    func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject) -> Bool
    {
        let googleDidHandle = GIDSignIn.sharedInstance().handleURL(url, sourceApplication: sourceApplication!, annotation: annotation)

        let facebookDidHandle = FBSDKApplicationDelegate.sharedInstance().application(application, openURL: url, sourceApplication: sourceApplication, annotation: annotation)

        return facebookDidHandle || googleDidHandle
    }

    //google-Firebase signin - IOS 9
    @available(iOS 9.0, *)
    func application(application: UIApplication,
                     openURL url: NSURL, options: [String: AnyObject]) -> Bool {

        let facebookDidHandle = FBSDKApplicationDelegate.sharedInstance().application(application, openURL: url, sourceApplication: options[UIApplicationOpenURLOptionsSourceApplicationKey] as! String, annotation: options[UIApplicationOpenURLOptionsAnnotationKey])

        let googleDidHandle = GIDSignIn.sharedInstance().handleURL(url, sourceApplication: options[UIApplicationOpenURLOptionsSourceApplicationKey] as! String, annotation: options[UIApplicationOpenURLOptionsAnnotationKey])

        return facebookDidHandle || googleDidHandle
    }
person Hardik Thakkar    schedule 28.12.2017

я думаю, что нашел

[схема URL] дает эти конкретные схемы URL

Xcode — несколько схем URL

person ardavar    schedule 26.04.2013