![](/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.