Пользовательская кнопка входа в систему Facebook - после интеграции
Я пытаюсь настроить кнопку входа в систему Facebook после выполнения данного руководства. Все правильно интегрировано, я могу войти в Facebook и выйти из системы без заминки.
Теперь моя следующая цель - сделать экран похожим на мой макет, это включает правильное размещение кнопки входа в систему раскадровки, но единственная проблема заключается в том, что она не отображается на доске объявлений, она просто появляется, когда Я запускаю симуляцию. Я смотрел на другие ответы переполнения, но они не были действительно полезными, поскольку они были направлены на более ранние версии swift/Xcode и не работали с тем, что говорили комментарии. Мой код точно такой же, как и руководство, так как это первый экран, который я пытаюсь реализовать.
Помощь будет очень оценена.
Ответы
Ответ 1
Если вы хотите использовать пользовательскую кнопку SDK для facebook, вы можете создать любую настраиваемую кнопку в раскадровке и обеспечить действие в viewcontroller, подобном этому
Импорт вверх
import FBSDKCoreKit
import FBSDKLoginKit
Swift 3:
@IBAction func loginFacebookAction(sender: AnyObject) {//action of the custom button in the storyboard
let fbLoginManager : FBSDKLoginManager = FBSDKLoginManager()
fbLoginManager.logIn(withReadPermissions: ["email"], from: self) { (result, error) -> Void in
if (error == nil){
let fbloginresult : FBSDKLoginManagerLoginResult = result!
// if user cancel the login
if (result?.isCancelled)!{
return
}
if(fbloginresult.grantedPermissions.contains("email"))
{
self.getFBUserData()
}
}
}
}
func getFBUserData(){
if((FBSDKAccessToken.current()) != nil){
FBSDKGraphRequest(graphPath: "me", parameters: ["fields": "id, name, first_name, last_name, picture.type(large), email"]).start(completionHandler: { (connection, result, error) -> Void in
if (error == nil){
//everything works print the user data
print(result)
}
})
}
}
Старая версия Swift:
@IBAction func loginFacebookAction(sender: AnyObject) {//action of the custom button in the storyboard
let fbLoginManager : FBSDKLoginManager = FBSDKLoginManager()
fbLoginManager.logInWithReadPermissions(["email"], fromViewController: self) { (result, error) -> Void in
if (error == nil){
let fbloginresult : FBSDKLoginManagerLoginResult = result
if(fbloginresult.grantedPermissions.contains("email"))
{
self.getFBUserData()
}
}
}
}
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){
//everything works print the user data
print(result)
}
})
}
}
Если вам нужна кнопка default facebook login, вы можете взять UIView и установить поле Class * в разделе Custom Class ** в Identity Inspector, мы должны установить FBLoginValue
Ссылка: по умолчанию кнопка входа в систему SDK: http://www.appcoda.com/ios-programming-facebook-login-sdk/
Ссылка: пользовательская кнопка входа в SDK для параметров и дополнительная информация: https://developers.facebook.com/docs/facebook-login/ios
Ответ 2
POD INSTALL
source 'https://github.com/CocoaPods/Specs.git'
use_frameworks!
target "ProjectName" do
pod 'FacebookCore'
pod 'FacebookLogin'
pod 'FacebookShare'
end
AppDelegate.swift
import FacebookLogin
import FBSDKLoginKit
import FacebookCore
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions)
return true
}
func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
return FBSDKApplicationDelegate.sharedInstance().application(application, open: url, sourceApplication: sourceApplication, annotation: annotation)
}
ViewController.swift
import UIKit
import FacebookLogin
import FBSDKLoginKit
import FacebookCore
class ViewController: UIViewController {
override func viewDidLoad() {
if(FBSDKAccessToken.current() == nil){
print("Not logged in ")
}else{
print("Logged in already")
getFacebookUserInfo()
}
}
@IBAction func CustomButton_Click(_ sender: Any) {
getFacebookUserInfo()
}
func getFacebookUserInfo(){
let loginManager = LoginManager()
loginManager.logIn([.publicProfile, .email ], viewController: self) { (result) in
switch result{
case .cancelled:
print("Cancel button click")
case .success:
let params = ["fields" : "id, name, first_name, last_name, picture.type(large), email "]
let graphRequest = FBSDKGraphRequest.init(graphPath: "/me", parameters: params)
let Connection = FBSDKGraphRequestConnection()
Connection.add(graphRequest) { (Connection, result, error) in
let info = result as! [String : AnyObject]
print(info["name"] as! String)
}
Connection.start()
default:
print("??")
}
}
}
}
Info.plist
Info.plist → щелкните правой кнопкой мыши → OpenAs → Исходный код → Добавить <dict> .. </dict>
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLSchemes</key>
<array>
<string>YOUR APP ID</string>
</array>
</dict>
</array>
<key>FacebookAppID</key>
<string>YOUR APP ID</string>
<key>FacebookDisplayName</key>
<string>YOUR APP NAME</string>
Ответ 3
Добро пожаловать в StackOverflow, Shika! В этом учебнике показано, как добавить кнопку, которую Facebook предоставляет как часть своего SDK. В учебном пособии показано, что центр находится в центре экрана устройства. Facebook позволяет вам создать свою собственную кнопку, если хотите. На мой взгляд, мне это нравится, потому что вы можете играть с ним в раскадровке, в отличие от кнопки, созданной программно в Swift. Вы можете использовать документы здесь и прокрутите вниз до "Пользовательская кнопка входа". Ваш код изменится, но не сильно! Если вы решите пойти по этому маршруту, обязательно удалите код, который вы скопировали и вставили, чтобы добавить кнопку, расположенную в viewDidLoad. Кроме того, вы можете удалить FBSDKLoginButtonDelegate, который вы добавили в верхней части файла Swift.