[解決済み] SwiftUIのFacebookログイン。FacebookのIDをビューに戻すには?
2022-03-03 04:05:01
質問
私は、以下のコードを SwiftUIでFacebookにログインする方法は? 私のアプリでFacebookでログインするために。うまくいくのですが、変数を更新する必要があるビューに ID とアクセストークンを戻す方法が見つからないことがあります。
私のコード
LoginView.swift
import SwiftUI
// Facebook Login
import FBSDKLoginKit
import FacebookLogin
[...]
// Facebook Login
let facebookLoginButton = FBLoginButton(frame: .zero, permissions: [.publicProfile])
struct LoginView: View {
@EnvironmentObject var viewRouter: ViewRouter
// Facebook Login
@ObservedObject var fbmanager = UserLoginManager()
var body: some View {
[...]
Button(action: {
self.fbmanager.facebookLogin()
}) {
FacebookButtonContent(buttonWidth: 120, buttonHeight: 60, buttonRadius: 15)
}
[...]
}
}
[...]
// Facebook Login
class UserLoginManager: ObservableObject {
let loginManager = LoginManager()
func facebookLogin() {
loginManager.logIn(permissions: [.publicProfile, .email], viewController: nil) { loginResult in
switch loginResult {
case .failed(let error):
print(error)
case .cancelled:
print("User cancelled login.")
case .success(let grantedPermissions, let declinedPermissions, let accessToken):
print("Logged in! \(grantedPermissions) \(declinedPermissions) \(accessToken)")
GraphRequest(graphPath: "me", parameters: ["fields": "id, name, first_name"]).start(completionHandler: { (connection, result, error) -> Void in
if (error == nil){
let fbDetails = result as! NSDictionary
print(fbDetails)
let fbUserId = fbDetails["id"] ?? ""
let fbAccessToken = AccessToken.current?.tokenString ?? ""
}
})
//
// QUESTION: how to get the fbUserId and fbAccessToken here ???
//
}
}
}
}
ここで、私は行き詰ってしまいました。GraphRequest呼び出しの後にfbUserIdとfbAccessTokenを取得し、関数facebookLoginがそれらを返すようにしたいのです。どうすればいいのでしょうか?
助けてくれてありがとうございます。
解決方法は?
この方法を見つけたので、ここに解決策を掲載します。
関数を修正しました。 facebookLogin を以下のように設定します。
facebookLogin(_ completion: @escaping (String) -> ())
完全 ユーザーログインマネージャ(UserLoginManager のクラスコードです。
// Facebook Login
class UserLoginManager: ObservableObject {
let loginManager = LoginManager()
func facebookLogin(_ completion: @escaping (String) -> ()) {
loginManager.logIn(permissions: [.publicProfile, .email], viewController: nil) { loginResult in
switch loginResult {
case .failed(let error):
print(error)
completion("")
case .cancelled:
print("User cancelled login.")
completion("")
case .success(let grantedPermissions, let declinedPermissions, let accessToken):
print("Logged in! \(grantedPermissions) \(declinedPermissions) \(accessToken)")
GraphRequest(graphPath: "me", parameters: ["fields": "id, name, first_name"]).start(completionHandler: { (connection, result, error) -> Void in
if (error == nil){
let fbDetails = result as! NSDictionary
print(fbDetails)
let fbUserId = fbDetails["id"] ?? ""
let fbAccessToken = AccessToken.current?.tokenString ?? ""
let fbResult = "id=\(fbUserId)&accessToken=\(fbAccessToken)"
completion(fbResult)
}
else
{
completion("")
}
})
}
}
}
}
そして、ボタンの中で、次のようにしました。
Button(action: {
self.fbmanager.facebookLogin { (completionData) in
// Do operation with String
print(completionData);
}
}) {
FacebookButtonContent(buttonWidth: 120, buttonHeight: 60, buttonRadius: 15)
}
これが同じ問題を抱える誰かの助けになることを願って...。
関連
-
[解決済み] 型のインスタンスでは静的メンバを使用できません。
-
[解決済み] Swift 3、Swift 4、それ以降で dispatch_sync, dispatch_async, dispatch_after などはどうすればいいですか?
-
[解決済み] Swift: print() vs println() vs NSLog()
-
[解決済み] Facebookがブラウザに統合されたDeveloper Toolsを無効にする方法を教えてください。
-
[解決済み] 文字列の長さを取得する
-
[解決済み] FacebookやTwitterの新しいURLのシェバング/ハッシュバン(#!)は何のため?
-
[解決済み] このアプリの開発者は、このアプリをFacebookログイン用に正しく設定していないのでは?
-
[解決済み】iOSアプリの名前を変更する方法は?
-
[解決済み】weak referenceとunowned referenceの違いは何ですか?
-
[解決済み】swift言語におけるstructureとclassの比較
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] テスト
-
[解決済み] Swiftで文字列が別の文字列を含んでいるかどうかを確認するには?
-
フォールスルーの使用方法概要
-
[解決済み] Swift stdlib ツール エラー
-
[解決済み] プログラミング言語Swiftで文字列のn文字目を取得する
-
[解決済み] SwiftでStringのサブストリングはどのように動作するか
-
[解決済み】==と===の違いについて
-
[解決済み】「このアプリケーションはバックグラウンドのスレッドからオートレイアウトエンジンを変更しています」エラーが発生する?
-
[解決済み】String.substringWithRangeはどのように使うのですか?(または、SwiftでRangeはどのように動作しますか?)
-
[解決済み】なぜ、Swiftの文字列では、?のような絵文字が奇妙に扱われるのですか?