How to integrate Facebook without redirect Safari browser in iOS app with latest FBSDK

前端 未结 6 2254
悲&欢浪女
悲&欢浪女 2020-11-27 21:04

Hi i am search the answer for avoid new facebooksdk redirect to safari.how to open facebook login view inside the app.if it redirect to safari may reject in app store? help

相关标签:
6条回答
  • 2020-11-27 21:42

    Just open the Facebook Developer site http://facebookdevelopers.com there you will get the whole procedure to integrate facebook in your application without redirecting to Safari browser.

    0 讨论(0)
  • 2020-11-27 21:43

    In swift When your select login behavior is Web, Then open webView popUp.

     // Try to login with permissions
            let fbLoginManager : FBSDKLoginManager = FBSDKLoginManager()
    
            fbLoginManager.loginBehavior = FBSDKLoginBehavior.Web
    
    0 讨论(0)
  • 2020-11-27 21:55

    But what if I am not using FBSDKLoginManager...?

    But what if I do not implement a Facebook login method in my ViewController and I am just using the FBSDKLoginButton Facebook SDK touch upside action outlet implementation to login, which by default uses the Safari browser?

    How do I change the FBSDKLoginBehavior?

    If you are using the FBSDKLoginButton without your own Touch Up Inside action outlet, aka, you just added a UIButton or UIView to your Storyboard and changed its type to FBSDKLoginButton and that was enough, when the UI Component was touched to get Safari Facebook Authentication working...

    To change FBSDKLoginBehavior simply add an Outlet in your ViewController to your Storyboard FBSDKLoginButton and set loginBehavior, no need to use FBSDKLoginManager:

    @IBOutlet weak var btnFbSignIn: FBSDKLoginButton!
    
    override func viewDidLoad() {
        btnFbSignIn.loginBehavior = FBSDKLoginBehavior.web
    }
    
    0 讨论(0)
  • 2020-11-27 21:57

    When your select login behavior is FBSDKLoginBehaviorWeb, Then open webView popUp.

    FBSDKLoginManager *login = [[FBSDKLoginManager alloc] init];
    login.loginBehavior=FBSDKLoginBehaviorWeb;
    

    PopUp Facebook :

    enter image description here

    Note : when facebook behavior is FBSDKLoginBehaviorBrowser then its always redirect on safari browser. Change its behavior to FBSDKLoginBehaviorWeb.

    Use This For Latest Update from FB SDK

    FBSDKLoginManager *login = [[FBSDKLoginManager alloc] init];
        login.loginBehavior = FBSDKLoginBehaviorWeb;
        NSArray *userdetails;
        [login logInWithReadPermissions:userdetails fromViewController:self handler:^(FBSDKLoginManagerLoginResult *result, NSError *error) {
            if (error)
            {
                NSLog(@"Login Error : %@", error.description);
            }
            else if(result.isCancelled)
            {
                NSLog(@"Login Cancel By User");
            }
            else
            {
                //[self fetchUserDataForFacebookLogin];
                //[login logOut];
            }
        }];
    
    0 讨论(0)
  • 2020-11-27 22:01

    yesterday I submit my app to store using FBSDKLoginManager using three kinds of Login with Facebook , actually Facebook follow the first three conditions automatically

    Type -1

    if the user already installed the Facebook native app the details will be retrieved from the app.

    Type -2

    if the user does't have the Facebook app, but he is logged in at the device's Settings, the user details will be taken from those.

    Type -3

    if none of the condition above is satisfied the user will be automatically redirected to Safari.

    Type -4

        if you none of the above three conditions is relevant for you please continue below code.
    

    apple does not reject your app

    Objective-C

    FBSDKLoginManager *login = [[FBSDKLoginManager alloc] init];
    login.loginBehavior=FBSDKLoginBehaviorWeb;  // it open inside the app using popup menu
    

    Swift

    var fbLoginManager : FBSDKLoginManager = FBSDKLoginManager()
    fbLoginManager.loginBehavior = FBSDKLoginBehavior.Native
    

    FBSDKLoginBehavior Types

    typedef NS_ENUM(NSUInteger, FBSDKLoginBehavior)
    {
      /*!
    @abstract Attempts log in through the native Facebook app. If the   Facebook app is
    not installed on the device, falls back to \c  FBSDKLoginBehaviorBrowser. This is the
    default behavior.
    */
     FBSDKLoginBehaviorNative = 0,
    /*!
    @abstract Attempts log in through the Safari browser
      */
    FBSDKLoginBehaviorBrowser,
     /*!
      @abstract Attempts log in through the Facebook account currently signed in through Settings.
       If no Facebook account is signed in, falls back to \c FBSDKLoginBehaviorNative.
       */
     FBSDKLoginBehaviorSystemAccount,
      /*!
       @abstract Attemps log in through a modal \c UIWebView pop up
    
       @note This behavior is only available to certain types of apps. Please check the Facebook
       Platform Policy to verify your app meets the restrictions.
       */
      FBSDKLoginBehaviorWeb,
       };
    

    the new concept

    Facebook SDK for iOSv4.x

    (v4.6.0 - September 10, 2015) In addition, the SDK dialogs such as Login, Like, Share Dialogs automatically determine the best UI based on the device, including SFSafariViewController instead of Safari. Follow the our Preparing for iOS 9 guide.

    you can get like

    0 讨论(0)
  • 2020-11-27 22:02

    Here i use the code like:

    AppDelegate.swift

    import UIKit
    import FBSDKCoreKit
     @UIApplicationMain
    class AppDelegate: UIResponder, UIApplicationDelegate {
     var window: UIWindow?
     func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
        return FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions)
    }
    func applicationWillResignActive(application: UIApplication) {    
        FBSDKAppEvents.activateApp()
    }
    func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject?) -> Bool {
        return FBSDKApplicationDelegate.sharedInstance().application(application, openURL: url, sourceApplication: sourceApplication, annotation: annotation)
     }
    }
    

    LoginViewController.swift

     //MARK: FacebookLogin Button
    @IBAction func btnFacebookLoginClicked(sender: AnyObject) {
        let fbLoginManager : FBSDKLoginManager = FBSDKLoginManager()
        fbLoginManager.logOut()
        fbLoginManager.loginBehavior = FBSDKLoginBehavior.Web //Without safari Browser
        fbLoginManager.logInWithReadPermissions(["email"], fromViewController: self, handler: { (result, error) -> Void in
            if (error != nil){
                let fbloginresult : FBSDKLoginManagerLoginResult = result
                if(fbloginresult.grantedPermissions.contains("email")){
                    self.getFBUserData()
                    fbLoginManager.logOut()
                }
            }else if result.isCancelled {
            print("Cancelled")
        }
        })
    }
    
    func getFBUserData(){
        if((FBSDKAccessToken.currentAccessToken()) != nil){
            FBSDKGraphRequest(graphPath: "me", parameters: ["fields": "id, name, first_name, last_name, picture.type(large), email"]).startWithCompletionHandler({ (connection, result, error) -> Void in
                if (error == nil){
                    self.facebookUserDict = result as! NSDictionary
                    print(result)
                    print(self.facebookUserDict)
                print(self.facebookUserDict.objectForKey("picture")?.objectForKey("data")?.objectForKey("url") as! String)
                }
            })
        }
    }
    
    0 讨论(0)
提交回复
热议问题