簡體   English   中英

如何在 iOS 應用程序中使用最新的 FBSDK 在不重定向 Safari 瀏覽器的情況下集成 Facebook

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

嗨,我正在搜索避免新 facebooksdk 重定向到 safari 的答案。如何在應用程序內打開 facebook 登錄視圖。如果重定向到 safari 可能會在應用程序商店中拒絕? 幫助我.. 提前致謝

昨天我使用FBSDKLoginManager使用三種 Login with Facebook 將我的應用程序提交到商店,實際上 Facebook 會自動遵循前三個條件

類型-1

如果用戶已經安裝了 Facebook 原生應用,則將從應用中檢索詳細信息。

類型-2

如果用戶沒有 Facebook 應用程序,但他已在設備的設置中登錄,則將從這些應用程序中獲取用戶詳細信息。

類型-3

如果以上條件都不滿足,用戶將被自動重定向到Safari

類型-4

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

蘋果不會拒絕你的應用

目標-C

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

迅速

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

FBSDKLoginBehavior 類型

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,
   };

新概念

適用於 iOSv4.x 的 Facebook SDK

(v4.6.0 - 2015 年 9 月 10 日)此外,諸如 Login、Like、Share Dialogs 等 SDK 對話框會根據設備自動確定最佳 UI,包括 SFSafariViewController 而不是 Safari。 按照我們的 iOS 9 准備指南進行操作。

你可以像

enter image description here

當您選擇的登錄行為是FBSDKLoginBehaviorWeb ,然后打開 webView 彈出窗口。

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

彈出式臉書:

在此處輸入圖片說明

注意:當 facebook 行為是FBSDKLoginBehaviorBrowser它總是在 safari 瀏覽器上重定向。 將其行為更改為FBSDKLoginBehaviorWeb

將此用於 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];
        }
    }];

在 swift 當您選擇的登錄行為是 Web 時,然后打開 webView 彈出窗口。

 // Try to login with permissions
        let fbLoginManager : FBSDKLoginManager = FBSDKLoginManager()

        fbLoginManager.loginBehavior = FBSDKLoginBehavior.Web

只需打開 Facebook 開發者網站http://facebookdevelopers.com ,您就可以獲得在您的應用程序中集成 facebook 的整個過程,而無需重定向到 Safari 瀏覽器。

在這里我使用如下代碼:

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)
 }
}

登錄ViewController.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)
            }
        })
    }
}

但是如果我不使用FBSDKLoginManager怎么FBSDKLoginManager ...?

但是如果我沒有在我的 ViewController 中實現 Facebook 登錄方法並且我只是使用FBSDKLoginButton Facebook SDK touch FBSDKLoginButton action outlet 實現來登錄,默認情況下使用 Safari 瀏覽器怎么辦?

如何更改FBSDKLoginBehavior

如果您使用的FBSDKLoginButton沒有自己的 Touch Up Inside 操作插座,也就是,您只需將 UIButton 或 UIView 添加到您的故事板並將其類型更改為FBSDKLoginButton就足夠了,當觸摸 UI 組件以使 Safari Facebook 身份驗證工作時...

要更改FBSDKLoginBehavior只需在您的 ViewController 中添加一個 Outlet 到您的 Storyboard FBSDKLoginButton並設置loginBehavior ,無需使用FBSDKLoginManager

@IBOutlet weak var btnFbSignIn: FBSDKLoginButton!

override func viewDidLoad() {
    btnFbSignIn.loginBehavior = FBSDKLoginBehavior.web
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM