FacebookのSwift SDKをCocoapods経由でインストールしました:
pod 'FacebookCore', :git => "https://github.com/facebook/facebook-sdk-Swift"
pod 'FacebookLogin', :git => "https://github.com/facebook/facebook-sdk-Swift"
FacebookのSwift SDK( https://developers.facebook.com/docs/Swift/login )からのログイン手順に従いましたが、機能しません。
View Controllerの内部には次のものがあります。
@objc fileprivate func facebookSignIn() {
let loginManager = LoginManager()
print("LOGIN MANAGER: \(loginManager)")
loginManager.logIn([ .publicProfile, .email ], viewController: self) { loginResult in
print("LOGIN RESULT! \(loginResult)")
switch loginResult {
case .failed(let error):
print("FACEBOOK LOGIN FAILED: \(error)")
case .cancelled:
print("User cancelled login.")
case .success(let grantedPermissions, let declinedPermissions, let accessToken):
print("Logged in!")
print("GRANTED PERMISSIONS: \(grantedPermissions)")
print("DECLINED PERMISSIONS: \(declinedPermissions)")
print("ACCESS TOKEN \(accessToken)")
}
}
}
「ログインマネージャー:など」ボタンをクリックするとWebビューが開き、印刷されます。 Facebook経由でサインインすると、Webビューが空白になり、何も起こりません。 Facebookアプリにアプリが表示されるため、承認が行われましたが、Webビューで[完了]ボタンをクリックすると、コールバックの結果は.cancelled
および「ユーザーがログインをキャンセルしました。」印刷されます。
キーチェーン共有を資格に追加し、info.plistを更新しました。
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLSchemes</key>
<array>
<string> [ FB STRING ] </string>
</array>
</dict>
</array>
<key>FacebookAppID</key>
<string>[ APP ID ]</string>
<key>FacebookDisplayName</key>
<string>[ APP NAME ]</string>
<key>LSApplicationQueriesSchemes</key>
<array>
<string>fbapi</string>
<string>fb-messenger-api</string>
<string>fbauth2</string>
<string>fbshareextension</string>
</array>
NSAppTransportSecurity
設定も変更しました。
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
これが iOS 9 Facebookログインシミュレーター-canOpenURL:URLの失敗: "fbauth2:///"-エラー: "(null)" および Facebookの使用方法iOS 10上のiOS SDK しかし、私が何かを見逃していない限り、そこにある解決策はどれもうまくいかないようです?どんな提案も大歓迎です。
いくつかのエラーも出力されます:
[App] if we're in the real pre-commit handler we can't actually add any new fences due to CA restriction
[error] error: (6922) I/O error for database at /var/mobile/Containers/Data/Application/F3D8E126-B0CC-4C06-81A5-D7A7F849B3BD/Documents/OfflineModel2.sqlite. SQLite error code:6922, 'disk I/O error'
デバイスにFBアプリがインストールされていない場合、次のメッセージが表示されます。
-canOpenURL: failed for URL: "fbauth2:/" - error: "The operation couldn’t be completed. (OSStatus error -10814.)"
Didfinishlaunchingおよびopenurl AppDelegateメソッドを以下に置き換える必要があります。
public func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey : Any]? = nil) -> Bool
{
return SDKApplicationDelegate.shared.application(application, didFinishLaunchingWithOptions: launchOptions)
}
public func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool
{
return SDKApplicationDelegate.shared.application(app, open: url, options: options)
}
SwiftおよびSwift 4
これをAppDelegate.Swiftに追加します
import FBSDKCoreKit
import FBSDKLoginKit
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
return FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions)
}
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
return FBSDKApplicationDelegate.sharedInstance().application(app, open: url, options: options)
}
FBSDKライブラリは非推奨です。新しいライブラリは FacebookのGithubリポジトリ にあります。
この特定のエラーについては、次のアプリケーションメソッドを実装します。
func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
return SDKApplicationDelegate.shared.application(application, open: url, sourceApplication: sourceApplication, annotation: annotation)
}
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
return SDKApplicationDelegate.shared.application(app, open: url, options: options)
}
Swift 3.0
appDelete.Swiftで:
import FBSDKCoreKit
import FBSDKLoginKit
あなたの中に:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool
{
追加:
FBSDKApplicationDelegate .sharedInstance() .application(application, didFinishLaunchingWithOptions: launchOptions)
次に、次のように新しいfuncを作成します。
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
return FBSDKApplicationDelegate.sharedInstance().application(app, open: url, options: options)
}
ココアポッド in Swift 3.を使用
ココアポッドをインストールする
pod 'FacebookCore'
pod 'FacebookLogin'
appDelegate.Swiftで
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions)
}
およびwritedown Callbackメソッド
func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
return FBSDKApplicationDelegate.sharedInstance().application(application, open: url as URL!, sourceApplication: sourceApplication, annotation: annotation)return FBSDKApplicationDelegate.sharedInstance().application(application, open: url as URL!, sourceApplication: sourceApplication, annotation: annotation)
}
あなたのviewControllerで
import FacebookCore
import FacebookLogin
import FBSDKLoginKit
その後、fbloginボタンにこのコードを書き留めます
@IBAction func faceBookLoginBtnAction(_ sender: Any) {
let fbLoginManager : FBSDKLoginManager = FBSDKLoginManager()
fbLoginManager.logIn(withReadPermissions: ["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){
self.dict = result as! [String : AnyObject]
print(result!)
print(self.dict)
}
})
}
}
}
}
}
}
もう1つ重要なことは、facebookidをプロジェクトに追加する[プロジェクト]> [ターゲット]> [情報]> [URLタイプ]セクションで、適切なFacebook IDとURLスキームを設定することです。
アプリケーションでFacebookログインを使用するには、まずアプリケーションを作成する必要があります。 here からFacebookでアプリを作成できます
URL types
、FacebookAppID
、FacebookDisplayName
、およびLSApplicationQueriesSchemes
をinfo.plist
に設定する必要があります。
Facebookログインフレームワークを手動で追加するか、次のようにココアポッドを使用できます...
pod 'FacebookCore' //latest one
pod 'FacebookLogin' // for fb login
pod 'FacebookShare' //for sharing on fb
次にpod install
コマンドを使用して、アプリケーションのポッドをインストールします。
Facebookログインを使用するアプリケーションデリゲートのimport FacebookCore
AppDelegate.Swift
ファイルに次のものを設定します。
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
return SDKApplicationDelegate.shared.application(application, didFinishLaunchingWithOptions: launchOptions)
}
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
if url.absoluteString.contains(<Your FBAppID>) {
return SDKApplicationDelegate.shared.application(app, open: url, options: options)
} else {
debugPrint("Error in openURL from AppDelegate Facebook Sign in")
}
return true
}
これで、アプリへのFacebookログインが正常に構成されました。
View Controllerで、次のことを行う必要があります。
import FacebookLoginKit
IBActionメソッドで次を実行します。
@IBAction func btnFacebookSignInTapped(_ sender: UIButton) {
let fbManager = FBSDKLoginManager()
fbManager.logIn(withReadPermissions: ["public_profile", "email"], from: self) { (result, error) in
if let loginResult = result, error == nil {
if let permissions = loginResult.grantedPermissions {
if permissions.contains("email") || permissions.contains("public_profile") {
if FBSDKAccessToken.current() != nil {
FBSDKGraphRequest(graphPath: "me", parameters: ["fields": "id, name, first_name, last_name, email"]).start(completionHandler: { (connection, graphResult, error) in
if error == nil {
debugPrint("Result: \(graphResult!)")
if let data = graphResult as? [String: Any] {
print("User details from FB: \(data)")
}
}
})
} else {
print("Invalid FB access token");
}
}
} else {
print("Fail to login using facebook.")
}
} else {
print("Error in facebook login")
}
}
}
そうすることで、Facebookにログインできるようになります。
ここの回答では、次のapplication(_,didFinishLaunchingWithOptions:)
の実装を使用することをお勧めします。
_public func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey : Any]? = nil) -> Bool {
return SDKApplicationDelegate.shared.application(application, didFinishLaunchingWithOptions: launchOptions)
}
_
ただし、 公式ドキュメント は戻り値を使用しないことに注意してください
_SDKApplicationDelegate.shared.application(application, didFinishLaunchingWithOptions: launchOptions)
_
application(_,didFinishLaunchingWithOptions:)
の戻り値として。
これは重要ではないように思えるかもしれませんが、facebook SDKとブランチディープリンクを統合するときに大きな問題が発生しました。まさにこの行が問題を引き起こすからです。したがって、不要な問題を後で防止する場合は、次の解決策を使用してください。
_public func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey : Any]? = nil) -> Bool
{
SDKApplicationDelegate.shared.application(application, didFinishLaunchingWithOptions: launchOptions)
// always return true
return true
}
public func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool
{
return SDKApplicationDelegate.shared.application(app, open: url, options: options)
}
_
Swift 3の場合:
// AppDelegate()で:
// ステップ1:
import FacebookCore
//ステップ-2:didFinishLaunchingWithOptions()内
// FB Settings
SDKApplicationDelegate.shared.application(application, didFinishLaunchingWithOptions: launchOptions)
//インスタンスMethod():
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
print("URL AbsoluteString = \(url.absoluteString)")
if url.absoluteString.contains("fb1279300242197274") {
return SDKApplicationDelegate.shared.application(app,
open: url,
options: options)
}
else {
//return PDKClient.sharedInstance().handleCallbackURL(url)
print("Error while open URL from app delegate facebook sign in")
}
return true
}
他の方法。この動画がお役に立てば幸いです https://youtu.be/bOS4jqRc8Io
このビデオの内容:Swift lastest 2018 Xcode new project setup Swift FacebookアプリでのiOSアプリログインチュートリアルiOSアプリでのFacebookログイン機能Facebookの追加to Swift iOSアプリFacebookアプリでのiOSログイン
手順:1.新しいシンプルなSwift Xcodeプロジェクト2を作成します。facebook開発ページにログインして同じ名前のAPPを作成します。 、C用のブリッジングヘッダーの作成、AppDelegateの構成、5-アプリケーションの実行とシミュレーターでのテスト