web-dev-qa-db-ja.com

カスタマイズされたFacebookログインボタン-統合後

このガイド に従ってFacebookのログインボタンをカスタマイズしようとしています。すべてが正しく統合され、Facebookにログインして、問題なくログアウトできます。

次の目標は、画面をモックアップのようにすることです。これには、ストーリーボードにログインボタンを正しく配置することが含まれますが、唯一の問題は、ストーリーボードに表示されないことです。実行すると表示されるだけです。シミュレーション。私は他のオーバーフローの回答を調べましたが、Swift/Xcodeの以前のバージョンに向けられており、コメントが言ったことから機能しませんでした。私のコードは正確です。これは私が実装しようとしている最初の画面なので、ガイドと同じです。

助けをいただければ幸いです。

13
Jordan Benge

カスタムFacebook SDKボタンを使用する場合は、ストーリーボードにカスタムボタンを作成し、ビューコントローラーで次のようにアクションを提供できます。

上部にインポート

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



デフォルトのFacebookログインボタンが必要な場合は、UIViewを使用して、アイデンティティインスペクタのカスタムクラス**セクションのクラス*フィールドを設定できます。 、FBLoginValueを設定する必要があります

参照:デフォルトのSDKログインボタンのチュートリアル: http://www.appcoda.com/ios-programming-facebook-login-sdk/

参照:パラメータおよび詳細情報用のカスタムSDKログインボタン: https://developers.facebook.com/docs/facebook-login/ios

50
HardikDG

PODインストール

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-> Source Code-> add <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>
9
Yakup Ad

@IBAction func buttonLogin(_ sender:Any){

    let fbLoginManager : FBSDKLoginManager = FBSDKLoginManager()

    fbLoginManager.logIn(withReadPermissions: ["public_profile","email"], from: self) { (result, error) in

        if (error == nil){
            let fbloginresult : FBSDKLoginManagerLoginResult = result!
            if fbloginresult.grantedPermissions != nil {
                if(fbloginresult.grantedPermissions.contains("email")) {
                    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){
                               let dict: NSDictionary = result as! NSDictionary
                                if let token = FBSDKAccessToken.current().tokenString {
                                    print("tocken: \(token)")

                                    let userDefult = UserDefaults.standard
                                    userDefult.setValue(token, forKey: "access_tocken")
                                    userDefult.synchronize()
                                }
                                if let user : NSString = dict.object(forKey:"name") as! NSString? {
                                    print("user: \(user)")
                                }
                                if let id : NSString = dict.object(forKey:"id") as? NSString {
                                    print("id: \(id)")
                                }
                                if let email : NSString = (result! as AnyObject).value(forKey: "email") as? NSString {
                                    print("email: \(email)")
                                }
                            }
                        })
                    }
                }
            }
        }
    }
 }
2
Srinivasan.M

StackOverflowへようこそ、シカ!そのチュートリアルは、FacebookがSDKの一部として提供するボタンを追加する方法を示しています。このチュートリアルでは、ボタンをデバイスの画面の中央に配置するように指示されています。 Facebookでは、必要に応じて独自のボタンを作成できます。私の意見では、Swiftでプログラムで作成されたボタンとは異なり、ストーリーボードで操作できるので、私はそれが好きです。 Facebookのドキュメント here を使用して、[カスタムログインボタン]まで下にスクロールできます。コードは変更されますが、ほとんど変更されません!この方法を使用する場合は、コピーして貼り付けたコードを削除して、viewDidLoadにあるボタンを追加してください。また、Swiftファイルの上部に追加したFBSDKLoginButtonDelegateを削除することもできます。

0
Dan Levy