ios google sign-in, How can I get user image url?
Solution 1
Exactly like @ajmccall said, a typo error!
But you may workaround it by category NSURL.
New an Objective-C class:
NSURL+FILE.h
#import <Foundation/Foundation.h>
@interface NSURL (FILE)
- (BOOL) isFIFEUrl;
@end
NSURL+FILE.m
import "NSURL+FILE.h"
@implementation NSURL (FILE)
- (BOOL) isFIFEUrl {
return [self isFileURL];
}
@end
Solution 2
For Objective C :
if (user.profile.hasImage)
{
NSURL *url = [user.profile imageURLWithDimension:100];
NSLog(@"url : %@",url);
}
For Swift :
if user.profile.hasImage
{
let pic = user.profile.imageURLWithDimension(100)
Print(pic)
}
Note : 100 is the dimension. Its depend on your requirement.
Solution 3
Swift 3
let dimension = round(imageSize.width * UIScreen.main.scale)
let pic = userInfo.profile.imageURL(withDimension: dimension)
OR
let dimension = round(100 * UIScreen.main.scale)
let pic = userInfo.profile.imageURL(withDimension: dimension)
Solution 4
It's a bug in GoogleSign 1.10
pod, and it's a typo bug at that. They are calling [NSURL isFIFEUrl]
when they probably be calling [NSURL isFILEUrl]
. (Ho ho ho that is hilarious!)
Simply downgrade to Google/Sign 1.0.7
and it will work.
Solution 5
Run pod update
to get 2.3.1 of the SDK.
Background info if you care: It's actually not a typo, even though it looks like one. Version 2.3 of the Google sign-in library makes use of another library -- libGIPNSURL+FIFE.a
-- that was accidentally omitted in version 2.3.0.
DàChún
Highly motivated, a self-managed software developer with experience in a wide variety of different technologies. Team player with leadership skills, able to make technical decisions, communicate and take responsibility for the team. Built products from scratch and worked on big projects. A constant learner with a growth mindset who is willing to learn from others, tackle difficulties and solve problems. Able to change the viewpoint from big-picture to focusing on details based on the product requirements and development stage. Apps developed by me: Stockholm Rail Android and iOS
Updated on June 05, 2022Comments
-
DàChún almost 2 years
I am working on iOS/Swift google sign-in. I made a demo in github. My demo project: https://github.com/tanggod/GoogleSignIn.git
According to google(https://developers.google.com/identity/sign-in/ios/api/interface_g_i_d_profile_data#a8e229bffe211894473058c4ba247553c), the user image url can be fetched like this:
- (NSURL *) imageURLWithDimension: (NSUInteger) dimension
Gets the user's profile image URL for the given dimension in pixels for each side of the square.
But, when I try to get imageURLWithDimension(120), the App always crash. I have been struggling on this for half an day and still don't know why. Anybody can help me. thank you very much.
func signIn(signIn: GIDSignIn!, didSignInForUser user: GIDGoogleUser!, withError error: NSError!) { print("=== UIViewController sign in") if (error == nil) { // Perform any operations on signed in user here. let userId = user.userID // For client-side use only! //let idToken = user.authentication.idToken // Safe to send to the server let name = user.profile.name let email = user.profile.email if user.profile.hasImage{ // crash here !!!!!!!! cannot get imageUrl here, why? // let imageUrl = user.profile.imageURLWithDimension(120) let imageUrl = signIn.currentUser.profile.imageURLWithDimension(120) print(" image url: ", imageUrl.absoluteString) } // ... print(" userId: ", userId) // print(" idToken: ", idToken) print(" name: ", name) print(" email: ", email) labelName.text = name labelEmail.text = email } else { print("\(error.localizedDescription)") } }
the crash data is as follows:
2015-09-30 18:54:46.662 GoogleLogin[96614:] <GMR/INFO> App measurement v.1100000 started 2015-09-30 18:54:46.675 GoogleLogin[96614:5594982] Successfully configured [SignIn]. 2015-09-30 18:54:46.675 GoogleLogin[96614:5594982] Failed to configure []. 2015-09-30 18:54:46.676 GoogleLogin[96614:5594982] Subspecs not present, so not configured [Analytics, AdMob, AppInvite, CloudMessaging, Maps]. 2015-09-30 18:54:46.676 GoogleLogin[96614:5594982] Subspecs expected to be present [SignIn, Measurement]. 2015-09-30 18:54:46.706 GoogleLogin[96614:] <GMR/INFO> Network status has changed. code, status: 2, Connected === UIViewController sign in 2015-09-30 18:54:49.335 GoogleLogin[96614:5594982] -[NSURL isFIFEUrl]: unrecognized selector sent to instance 0x7fe248c335c0 2015-09-30 18:56:46.968 GoogleLogin[96614:5594982] -[NSURL isFIFEUrl]: unrecognized selector sent to instance 0x7fe248f11f20 2015-09-30 18:56:46.973 GoogleLogin[96614:5594982] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSURL isFIFEUrl]: unrecognized selector sent to instance 0x7fe248f11f20' *** First throw call stack: ( 0 CoreFoundation 0x0000000102304f65 __exceptionPreprocess + 165 1 libobjc.A.dylib 0x0000000104927deb objc_exception_throw + 48 2 CoreFoundation 0x000000010230d58d -[NSObject(NSObject) doesNotRecognizeSelector:] + 205 3 CoreFoundation 0x000000010225af7a ___forwarding___ + 970 4 CoreFoundation 0x000000010225ab28 _CF_forwarding_prep_0 + 120 5 GoogleLogin 0x0000000101db6214 -[GIDProfileData imageURLWithDimension:] + 75 6 GoogleLogin 0x0000000101d29d0d _TFC11GoogleLogin14ViewController6signInfS0_FTGSQCSo9GIDSignIn_16didSignInForUserGSQCSo13GIDGoogleUser_9withErrorGSQCSo7NSError__T_ + 2541 7 GoogleLogin 0x0000000101d2aa98 _TToFC11GoogleLogin14ViewController6signInfS0_FTGSQCSo9GIDSignIn_16didSignInForUserGSQCSo13GIDGoogleUser_9withErrorGSQCSo7NSError__T_ + 88 8 GoogleLogin 0x0000000101dbdeb8 __37-[GIDSignIn addCallDelegateCallback:]_block_invoke + 123 9 GoogleLogin 0x0000000101db5ab6 -[GIDCallbackQueue fire] + 147 10 GoogleLogin 0x0000000101dbdacb __38-[GIDSignIn addDecodeIdTokenCallback:]_block_invoke_2 + 385 11 libdispatch.dylib 0x00000001053eaef9 _dispatch_call_block_and_release + 12 12 libdispatch.dylib 0x000000010540b49b _dispatch_client_callout + 8 13 libdispatch.dylib 0x00000001053f334b _dispatch_main_queue_callback_4CF + 1738 14 CoreFoundation 0x00000001022653e9 __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 9 15 CoreFoundation 0x0000000102226939 __CFRunLoopRun + 2073 16 CoreFoundation 0x0000000102225e98 CFRunLoopRunSpecific + 488 17 GraphicsServices 0x00000001066b5ad2 GSEventRunModal + 161 18 UIKit 0x00000001034b0676 UIApplicationMain + 171 19 GoogleLogin 0x0000000101d2c36d main + 109 20 libdyld.dylib 0x000000010543f92d start + 1 ) libc++abi.dylib: terminating with uncaught exception of type NSException (lldb)
And it says signIn.currentUser.profile.imageURLWithDimension(120) is invalid expression:
- (NSURL *) imageURLWithDimension: (NSUInteger) dimension
-
DàChún over 8 yearsdowngrade to GoogleSign 2.2.0. but compile failed: Use of unresolved identifier 'GGLContext'. Still trying.
-
DàChún over 8 yearsYou rock!. The crash is gone and I can get the image url. thanks @pinxue
-
ajmccall over 8 yearsHi, change your Podfile to read
pod 'Google/SignIn', '1.0.7'
and typepod install
. -
DàChún over 8 yearsHi ajmccall, I tried SDK 2.2.0 and 1.0.7, neither of them works for me. Pinxue's solution works for me. I know you spent lot of time on this issue, but I have to choose Pinxue's solution. Anyway, thank you so much for your efforts.
-
ajmccall over 8 yearsAlright, but you're going to need to learn how
pod
works very soon. -
ajmccall over 8 yearsThanks @todd. In the future, what is the best way to raise an issue with Google's pods?
-
ssowri1 over 6 yearsThank you! Its saved my time.