Swift/iOS FirebaseGoogleSignIn OAuth client ID not found - ios

Working with Swift/iOS and FirebsaeAuthUI and FirebaseGoogleAuthUI.
Code & setup are identical to approach I'd used in prior apps. I now have an M1 Mac running BigSur, and when I execute the code, it runs, but clicking the "Sign in With Google" default from FirebaseAuthUI returns an error:
Thread 1: "OAuth client ID not found. Please make sure Google Sign-In is enabled in the Firebase console. You may have to download a new GoogleService-Info.plist file after enabling Google Sign-In."
Returning to Firebase Console, Google (alone) is enabled as a sign-in provider & I've got a project support e-mail set up for that sign-in provider, as I'd always previously done.
I did notice the latest version of FirebaseUI required a change to imports:
old code that had:
import FirebaseUI
now seems to require
import FirebaseAuthUI
import FirebaseGoogleAuthUI
(as of Oct, 1, 2021, the documentation for this had not been updated online, but some digging & query via GitHub got me the update info above). Again, with these changes things do compile (although I need to run on my iPhone since M1 Macs can't seem to run FirebaseGoogleAuthUI in the simulator). Yet clickign on "Sign in with Google" crashes with the error:
"OAuth client ID not found. Please make sure Google Sign-In is enabled in the Firebase console. You may have to download a new GoogleService-Info.plist file after enabling Google Sign-In"
I'd never been required to do any additional OAuth work beyond setting up Authentication Sign-In provider for Google in the Firebase Console. Has something changed that I need to also address? Thanks for any help!

did you get solutions?
I found following approach, it works for me.
https://issueexplorer.com/issue/firebase/FirebaseUI-iOS/1003
I think 2 Official Firebase Codes are too old,
OLD #1
let authUI = FUIAuth.defaultAuthUI()
OLD #2
let providers: [FUIAuthProvider] = [
FUIGoogleAuth(),
//... I DON'T CHECK FACEBOOK, TWITTER AMD PHONE...//
]
Working code (Swift 5) is
UPDATED #1
let authUI = FUIAuth.defaultAuthUI()!
UPDATED #2
let googleAuthProvider = FUIGoogleAuth(authUI: authUI)
let authProviders: [FUIAuthProvider] = [
googleAuthProvider,
FUIEmailAuth()
]

This fixed the issue for me
1)Open your project configuration: double-click the project name in the left tree view. Select your app from the TARGETS section, then select the Info tab, and expand the URL Types section.
2)Click the + button, and add a URL scheme for your reversed client ID. To find this value, open the GoogleService-Info.plist configuration file, and look for the REVERSED_CLIENT_ID key. Copy the value of that key, and paste it into the URL Schemes box on the configuration page. Leave the other fields blank.

Related

Google sign-in showing incorrect project name - iOS

I have been integrating Google sign-in for syncing the calendar events using Google Calendar API. While trying to sign in, I am getting this.
As you can see the name of the project/app is displayed as "project-xxxxxxxxx" rather than the project name itself. How can I display the original project name here?
I have already tried
How do I set the project name in the Google iOS Sign-In screen?
, but of no use!
Atlast I found it!
I am also using Firebase for database. So when I checked its console , there is an option "Public-facing name" and renamed it. It worked!
Steps for the solution:
Go to Firebase Console and select the project.
Under Settings, select the General tab.
Change the Public-facing name by clicking the Edit button and then Save.
Please check the below image.
You need to create the OAUTH Client_ID by mentioning with your project name. It will display the same name which you specify in Google auth Console.
click here to open google auth console.
Open: Google Clound Platform /
APIs & Services / OAuth consent screen
Edit project name

Custom scheme URIs are not allowed for 'Web' client type - Google with Firebase

I am trying to implement google sign in using firebase in to my iOS app. I follow this tutorial.
https://firebase.google.com/docs/auth/ios/google-signin
I have setup the iOS app in firebase and use the google clientID and reversedClientID from the dowloaded GoogleService-Info.plist.
FYI: I have a custom sign-in button instead of the google sign in button. Anyway when i click the sign in button, google following error display in a webview.
I know my problem is the same as which described in this question.
Google 400 Error: invalid request Custom scheme URIs are not allowed for 'Web' client type
But, in my case, I have created the app in Firebase still I get the error. Any idea please...
The first step is to check if you have already the OAuth 2.0 ID for iOS. To do this please open the Credentials page in the API Console. I hope you will find iOS client for your application under OAuth 2.0 client IDs section. If not, please follow this Guide
The second step is to replace the Web Client ID with in iOS Client ID from OAuth 2.0 client IDs section. To do this, you should open the GoogleService-Info.plist and modify following keys: CLIENT_ID with [value].apps.googleusercontent.com and REVERSED_CLIENT_ID with com.googleusercontent.apps.[value].
if you're using flutterfire ui package you need to change the client id parameter in your GoogleProviderConfiguration class with the iOS client id,
you can copy it from here Credential page
example:
providerConfigs: [
GoogleProviderConfiguration(
clientId: "your copied key here"),
]
re-build you're app and you should be good to go
I've just faced this same issue using flutterfire_ui on Flutter.
The error appears to be from a couple of things. As Valeriy points out you need the ios client ID. But I still got the error if I used the scopes
openid
"https://www.googleapis.com/auth/userinfo.email",
"https://www.googleapis.com/auth/userinfo.profile",
Instead change these to
openid
email
profile
Strangely the opposite is true for Android, where the WebID and the first of the scopes should be used.
It also pays to be aware of the OAuth Content Screen..
In google cloud go to APIs & Services > OAuth consent screen > Edit.
You can add scopes here and fix any missing required fields that Firebase might not be filling out (I had 1). I believe this takes a while to propagate after a change, so give it an hour.

Google 400 Error: invalid request Custom scheme URIs are not allowed for 'Web' client type

When I am signing into Gmail in my iOS App, I am getting the below error (screenshot) and the sign-in fields do not appear. We are loading the sign-in screen in a WKWebView.
We are using a custom URI redirect but why is google throwing this error now. What are the alternatives to a custom URI?
Swift 2.3 project
Using OAuthSwift v0.6.0 cocoapod
This started quite recently only in the past week or so I believe something changed with Google's APIs.
I have read that google is deprecating webviews for OAuth and will block requests on April 20, 2017. As seen here in a Google Developers Blog:
https://developers.googleblog.com/2016/08/modernizing-oauth-interactions-in-native-apps.html
Does this mean I already need to use or is there another viable solution? I thought I had more time before needing to update this.
My guess is that your client is registered incorrectly in Google Cloud Console. A 'WEB' client is typically a server or Javascript application. An iOS app should be registered as an iOS client.
https://developers.google.com/identity/protocols/OAuth2InstalledApp#creatingcred
I Just found this problem too.
Please check google developer console and look at the credentials keys
Your Client ID in google-info plist must come from iOS application, not the web.
And use that Client ID to be revereseClientID and copy it in to URI type
I have solved the problems by create project in Fire Base Because REVERSED_CLIENT_ID generate from developers.google.com Incorrect.
Try create your project in FireBase
https://console.firebase.google.com
you must cross check clientId at your 'Google Dashboard' clientId and clientId at "GoogleProject.Plsit".if both are different, copy ClientID from 'Google Dashboard' and paste it on "GoogleService-Info.Plsit".and also amend your reverseClientId in "GoogleService-Info.Plsit" according to newly pasted ClientID(you check the pattern how reverseClientId created from client Id in "GoogleService-Info.Plsit"). And then paste thid reverseClientId in 'URL type' in your project setting.
In case of mine clientId on "GoogleService-Info.Plsit" and my 'Google Dashboard' were different.
chech your google dashboard here : https://console.developers.google.com/apis/credentials?project=firebase
I just experienced this issue following the Google Signin for iOS Guide. The plist generated file is not the good one. You need to take a look at the clientID and reversedClientID and be sure that they are the ones for the iOS app on your Google developer portal.
I faced this error after previously creating a GoogleService-Info.plist file using the site Google Sign In directs you to. I later started using Firebase, which seems to create a separate .plist file. After attempting to include Firebase's new .plist file, my Google Sign In button started yielding the invalid_request error with the Custom scheme URIs are not allowed for WEB client type message.
In order to fix the problem I tried many things, but in the end deleting MY ENTIRE Firebase project on their web console (not just the individual app), recreating a new Firebase project from scratch, and re-downloading the new .plist file, solved the error.
It creates two client ID. one for web and one for iOS application. Web client will be in the google plist by default. So it gives the above error. Use iOS Client id from google console or create credential for iOS application.
For my experience, I had followed Google's SignIn iOS Swift guide and had downloaded a Web OAuth JSON file. They literally provide you the wrong Plist file for an iOS setup.
Just in case somebody else runs into this issue here are the steps I followed:
Go to the Google Developers console.
Go to the Credentials section.
Notice there are two items in the "OAuth 2.0 client IDs" section. (If you previously attempted to configure an iOS Google SignIn project.
Click on the name of the "iOS client for ".
Click "Download PLIST File".
Delete the Google web Plist file from your project.
Drop in the new iOS based Plist file.
Copy over the new REVERSED_CLIENT_ID into your URL Types of the Info page of your project. (This is detailed in Google's guide).
Attempt to run your app again.
Note: I got the Google Sign In API to work with Swift v3 and XCode v8.
I was getting the same error. Then I figured out, that I did not provide my app Bundle Id to access the Google Sign In Service in my app.
You do that from the page with the link:
https://developers.google.com/mobile/add?platform=ios&cntapi=signin&cnturl=https:%2F%2Fdevelopers.google.com%2Fidentity%2Fsign-in%2Fios%2Fsign-in%3Fconfigured%3Dtrue&cntlbl=Continue%20Adding%20Sign-In
1.Sign in with your Google Developer account.
2.Create you app name and copy the App bundle Id from your project from:
Project and Target List> General> Bundle Identifier.
3.Choose your Country
4.Enable Google- Sign In.
Then perform the necessary steps to integrate Google Sign In in with your iOS App.
I was facing the same issue. I followed all the instructions to integrate my app several times, and played with the code to see if there was any hidden issue in the code.
I downloaded and configured the sample app from google at github https://github.com/googlesamples/google-services and go the same issue, so it was not the code.
It seemed like there is something in my console configuration so I switched between different google console apps, and played changing the bundle IDs.
The only thing that managed to fix this issue was to use Firebase instead. I created an app in the firebase console, downloaded the new plist, and it worked.
Still not sure why this didn't work for me in the first place, this doesn't seem to be a common problem, but I hope this helps someone.
cheers,
Kindly check console.developers.google.com/apis/credentials for your project and see whether there is already a client_id in OAuth 2.0 client IDs section , if so then copy that client id and replace it with you GoogleService-Info.plist file's CLIENT_ID and accordingly change REVERSED_CLIENT_ID (in reverse manner) now clean and build your app and test it will work
I was using Meteor with Cordova and Meteor's official google integration, which relies on cordova-plugin-googleplus.
I had to:
create both an iOS and a web Client ID
use the web Client ID on the settings / server / database as documented
but then use the reverse of the iOS web client as the REVERSED_CLIENT_ID for cordova-plugin-googleplus
Expo, authentication with Google.logInAsync from expo-google-app-auth
In my case I just used androidClientId instead of androidStandaloneAppClientId

How do you update GoogleSign-In to work with the new Firebase Console and APIs?

So, I had everything working as of yesterday. Then I logged into my Firebase dashboard and there was a banner that suggested I try out the new Firebase console. "SURE! That sounds great" I thought.
Eight hours later, I cannot get Google Sign-In to work. Here is my GIDSignInDelegate method, which fires correctly and everything.
func signIn(signIn: GIDSignIn!,
didSignInForUser user: GIDGoogleUser!,
withError error: NSError!) {
if (error == nil) {
let authentication = user.authentication
let credential = FIRGoogleAuthProvider.credentialWithIDToken(authentication.idToken,
accessToken: authentication.accessToken)
FIRAuth.auth()?.signInWithCredential(credential, completion: nil)
} else {
// Don't assert this error it is commonly returned as nil
print("\(error.localizedDescription)")
}
}
The problem seems to be that this doesnt create an event for
FIRAuth.auth()!.addAuthStateDidChangeListener
which is in my app delegate.
When logging in with the Facebook API, it does fire the auth state change listener.
I have also tried with a completion block, the user is a GIDGoogleUser instead of an FIRUser which seems kinda weird, but I have no proof it would be a problem. Also, the error is nil. so it looks like the signInWithCredential is working, but the auth state change listener isnt firing.
The only thing I can think of is that there is a problem with the google sign-in part of the system as the new GoogleService-Info.plist I had to download from the Firebase Console has a different app ID than I had in my previous GoogleService-Info.plist. I tried replacing the new app id with my old one which didn't work at all. I then tried removing any reference to the old app id assuming that the new one integrates google sign in automatically. Still no luck.
Anyone had success updating?
I added "import FirebaseAuth" and it worked! I know the Firebase documentation didn't say to add this, but I decided to give it a try anyways.
You need to add "Web SDK Configuration". You still need to enter it even though you may only have iOS app!
Go to your "Auth" tab in the new Firebase console.
Click on "Google" under "sign in providers"
Hover over "Web SDK configuration (optional)", it will bring up the popover saying "Reuse a web client ID from an existing Google project. You can find your web client ID for existing projects by selecting your project and OAuth 2.0 entry on the Google API Console."
Hit that link saying "Google API Console".
Check under section "OAuth 2.0 client IDs". You need to click on the link "Web client (auto created by Google Service".
Copy/Paste your "Client ID" and "Client Secret" into your Firebase console under section "Web SDK Configuration (optional)"
Funny thing that you need to do this even though you may have only iOS app.
Re-Run your xCode project.
What fixed this for me is to create a new Firebase Project.
Go to https://console.firebase.google.com and choose CREATE NEW PROJECT. I tried everything I could think of in my old (upgraded) project and I just couldn't make it work. Also adding a new iOS app inside the old project wasn't enough.
I understand this is a bad option for a production app but as I'm still in the development phase wasn't a big deal for me.

iOS - Google SignIn fails if a Google App is on the device

I've integrated Google SignIn (2.2) based on instructions here:
https://developers.google.com/identity/sign-in/ios/start
It works when there is no Google app on the device. So Google SDK opens a web view where I can sign in a google account, and GIDSignInDelegate method didSignInForUser is called with a valid access token with no error.
But if I have Google app or Youtube app installed, the SDK will open the Google app, where I can sign in my google account, and when I choose the account and it redirects back, it throws an error:
"A potentially recoverable error occured. You may try again."
No matter how many times I retry it never worked.
(Deep link url:
com.googleusercontent.apps.<my app id>://api/sso/v1/tokenResponse?ec=-216414001&e=A%20potentially%20recoverable%20error%20occured.%20You%20may%20try%20again)
Has anyone seen the same issue? What could go wrong?
So it turns out to be a typo in the app bundle id in Google Developers Console.
As requested in some comments, here are some more details:
In order to support google sign in, you need to a client id in
https://console.developers.google.com
under APIs & Auth/Credential
In our case, we were seeing the error because in the client id we created for iOS app, we had a typo in the app bundle id. (Instead of com.companyname.appname we typed com.companyname.companyname)
I guess there can be other ways to cause the same error, but one good place to check is the developer console (https://console.developers.google.com), just make sure every field makes sense to you.
Create a new Configuration file here -> https://developers.google.com/mobile/add?platform=ios&cntapi=signin&cntapp=Default%20Demo%20App&cntpkg=com.google.samples.quickstart.SignInExample&cnturl=https:%2F%2Fdevelopers.google.com%2Fidentity%2Fsign-in%2Fios%2Fstart%3Fconfigured%3Dtrue&cntlbl=Continue%20Try%20Sign-In
When it asks for your iOS Bundle Id, make sure it matches the bundle id that you find in your Xcode project settings (target -> General -> Bundle Identifier)
Delete the old "GoogleService-Info.plist" file and replace it with the new one you just created
clean, rebuild, try to sign in again

Resources