В моем приложении я использую логин google, facebook, twitter. все эти три входа работают нормально.
Но для входа в Twitter я сталкиваюсь с проблемой, что как только я нажимаю пользовательскую кнопку входа в Twitter, OAuthProvider открывает страницу аутентификации Twitter. Я отменил аутентификацию, затем он вернулся в приложение, и через секунду NavigationView автоматически вернется. LoginView закрывается, и появляется ContentView (представление запуска).
Я выполнил эти простые шаги для входа в Twitter , предоставленного firebase
var provider = OAuthProvider(providerID: "twitter.com")
func twitterLogin(){
provider.getCredentialWith(nil) { credential, error in
if error != nil {
// Handle error.
print(error ?? "error")
}
if credential != nil {
Auth.auth().signIn(with: credential!) { authResult, error in
if error != nil {
// Handle error.
}
else{
self.twitterLoginSuccess = true
print("Twitter login success")
}
// User is signed in.
// IdP data available in authResult.additionalUserInfo.profile.
// Twitter OAuth access token can also be retrieved by:
// authResult.credential.accessToken
// Twitter OAuth ID token can be retrieved by calling:
// authResult.credential.idToken
// Twitter OAuth secret can be retrieved by calling:
// authResult.credential.secret
}
}
}
}
Действие кнопки из представления входа
Button(action: self.viewModel.twitterLogin){
SignInButton(imageName: "twitter", text: "Sign in with twitter")
}.frame(height: 50).buttonStyle(ButtonStyleSignIn())
Код просмотра запуска
struct ContentView: View {
@State var show = false
@EnvironmentObject var viewModel : LoginViewModel // (/1)
var body: some View {
NavigationView{
ZStack
{
Color("colorPrimaryDark")
.edgesIgnoringSafeArea(.all)
VStack{
NavigationLink(destination: LoginView().environmentObject(viewModel), isActive: $show, label: {
Image("main_logo").renderingMode(.original).frame(width: 100, height: 100)
})
} .navigationBarHidden(true)
.navigationBarTitle(Text("Home"))
.edgesIgnoringSafeArea([.top, .bottom])
}
}//.preferredColorScheme(.dark) // white tint on status bar
.onAppear {
DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) {
self.show.toggle()
}
}
}
}
Здесь я добавил код LoginView
import SwiftUI
import Firebase
import FirebaseAuth
import FBSDKCoreKit
import FBSDKLoginKit
struct LoginView: View {
@EnvironmentObject var viewModel : LoginViewModel // (/1)
@State var show = true
var body: some View {
ZStack
{
Color("colorPrimaryDark")
.edgesIgnoringSafeArea(.all)
if self.viewModel.loginSuccess {
NavigationLink(destination: fromLoginNavigationTo(), isActive: self.$show, label: {
EmptyView()
})
}
VStack {
HStack {
Spacer()
Button(action: {
self.viewModel.signInAnonymously()
}){
TextViewBody(text: "Skip").padding()
}
}
VStack {
Button(action: self.viewModel.twitterLogin){
SignInButton(imageName: "twitter", text: "Sign in with twitter")
}.frame(height: 50).buttonStyle(ButtonStyleSignIn())
}.padding(.init(top: 0, leading: 32,bottom: 0, trailing: 32))
.navigationBarHidden(true)
.navigationBarTitle(Text("Home"))
.edgesIgnoringSafeArea([.top, .bottom])
}
}//.preferredColorScheme(.dark) // white tint on status bar
}
}
Xcode : 12 бета
Устройство: Симулятор iOS 14