![](/img/trans.png)
[英]How to integrate Facebook/Google+ without redirect Safari browser in iOS app
[英]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,
};
新概念
(v4.6.0 - 2015 年 9 月 10 日)此外,諸如 Login、Like、Share Dialogs 等 SDK 對話框會根據設備自動確定最佳 UI,包括 SFSafariViewController 而不是 Safari。 按照我們的 iOS 9 准備指南進行操作。
你可以像
當您選擇的登錄行為是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.