Google Plus api for iOS - friends list

I want to get the People list from Google+ in the iOS app.

I am using the Google+ tutorial api listed at   https://developers.google.com/+/mobile/ios/getting-started

I created a new project in the Google+ Developer Console, link

https://console.developers.google.com/project

Getting the following error in - (void) getPeopleInfo.

[lvl = 3] __31- [ViewController getPeopleInfo] _block_invoke () Error: Domain error = com.google.GTLJSONRPCErrorDomain Code = 401 "Operation could not be completed. (Invalid credentials)" UserInfo = 0x14d89340 {error = InvalidStrurdrerdrrdrdr, = GTLErrorObject 0x14d855e0: {message: "Invalid credentials": 401: [1]}, NSLocalizedFailureReason = (Invalid credentials)} 2014-03-13 12: 40: 21.026 GPlusDemo [636 / 0x3d35718c] [lvl = 3] __31 - [ViewController getPeopleInfo] _block_invoke () Error: Domain error = com.google.GTLJSONRPCErrorDomain Code = 401 "Operation could not be completed. (Invalid credentials)" UserInfo = 0x14d85f90 {error = Invalid Credentials, GTLStructuredErbb = 0rrorb = 0rrorb = 0rrorb = 0rrorb = 0rrorb = 0rrorb = 0rrorb = 0rrorb 0 : "Invalid even data "401 data [1]},NSLocalizedFailureReason = (Invalid Credentials)}

ViewController.m

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.


    GPPSignIn *signIn = [GPPSignIn sharedInstance];
    signIn.shouldFetchGooglePlusUser = YES;
    //signIn.shouldFetchGoogleUserEmail = YES;  // Uncomment to get the user email

    // You previously set kClientId in the "Initialize the Google+ client" step
    signIn.clientID = kClientId;

    // Uncomment one of these two statements for the scope you chose in the previous step
    signIn.scopes = @[ kGTLAuthScopePlusLogin];  // "https://www.googleapis.com/auth/plus.login" scope
    signIn.scopes = @[ @"profile" ];            // "profile" scope

    // Optional: declare signIn.actions, see "app activities"
    signIn.delegate = self;

    [signIn trySilentAuthentication];

}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}


-(void)refreshInterfaceBasedOnSignIn
{
    if ([[GPPSignIn sharedInstance] authentication]) {
        // The user is signed in.
        NSLog(@"Login");
        self.signInButton.hidden = YES;
        // Perform other actions here, such as showing a sign-out button

        [self getPeopleInfo];
    } else {
        self.signInButton.hidden = NO;
        // Perform other actions here
    }
}

- (void)finishedWithAuth: (GTMOAuth2Authentication *)auth
                   error: (NSError *) error
{
    NSLog(@"Received error %@ and auth object %@",error, auth);
    if (error) {
        // Do some error handling here.
    } else {
        [self refreshInterfaceBasedOnSignIn];
    }
}

- (void)signOut {
    [[GPPSignIn sharedInstance] signOut];
}


- (void)disconnect {
    [[GPPSignIn sharedInstance] disconnect];
}

- (void)didDisconnectWithError:(NSError *)error {
    if (error) {
        NSLog(@"Received error %@", error);
    } else {
        // The user is signed out and disconnected.
        // Clean up user data as specified by the Google+ terms.
    }
}

-(void)getPeopleInfo
{
    GTLServicePlus* plusService = [[GTLServicePlus alloc] init];
    plusService.retryEnabled = YES;

    [plusService setAuthorizer:[GPPSignIn sharedInstance].authentication];


    GTLQueryPlus *query =
    [GTLQueryPlus queryForPeopleListWithUserId:@"me"
                                    collection:kGTLPlusCollectionVisible];
    [plusService executeQuery:query
            completionHandler:^(GTLServiceTicket *ticket,
                                GTLPlusPeopleFeed *peopleFeed,
                                NSError *error) {
                if (error) {
                    GTMLoggerError(@"Error: %@", error);
                } else {
                    // Get an array of people from GTLPlusPeopleFeed
                    NSArray* peopleList = [peopleFeed.items mutableCopy];

                    NSLog(@"peopleList:%@", peopleList);
                }
            }];
}
+2
6

, , , ,

-(void)finishedWithAuth: (GTMOAuth2Authentication *)auth
                   error: (NSError *) error {


GTLServicePlus* plusService = [[GTLServicePlus alloc] init];

    plusService.retryEnabled = YES;

    [plusService setAuthorizer:[GPPSignIn sharedInstance].authentication];
    GTLQueryPlus *query =
    [GTLQueryPlus queryForPeopleListWithUserId:@"me"
                                    collection:kGTLPlusCollectionVisible];
    [plusService executeQuery:query
            completionHandler:^(GTLServiceTicket *ticket,
                                GTLPlusPeopleFeed *peopleFeed,
                                NSError *error) {
                if (error) {
                    GTMLoggerError(@"Error: %@", error);
                } else {
                    // Get an array of people from GTLPlusPeopleFeed
                    NSArray* peopleList = peopleFeed.items;
                    NSLog(@"peopleList %@ ",peopleList);

                }
            }];

}
+3

, SDK Google+ .

API Google . , , API, Google+. , .

, Google.

+2

Google+ . , , , .

GTMOAuth2Authentication *auth;

/*That you will get when you login by your google plus account. So I am considering that you already have it.*/

NSMutableArray  *arrFriends  = [NSMutableArray new];

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^
{
    NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"https://www.googleapis.com/plus/v1/people/%@/people/visible?orderBy=alphabetical&access_token=%@",@"your_user_id",auth.accessToken]];

    /*When you login via Google plus and fetch your profile information, you will get your user id.*/

    ASIHTTPRequest *request = [[ASIHTTPRequest alloc] initWithURL:url];
    [request startSynchronous];

    if(LOGS_ON) NSLog(@"GooglePlusConnect-->getchGooglePlusFriends-->responseString = %@",request.responseString);
});

Plaease , , .

0

, , . .

#define kGTLAuthScopePlusLogin @ " https://www.googleapis.com/auth/plus.login"

- (void)viewDidLoad
{
[super viewDidLoad];

GPPSignIn *signInG = [GPPSignIn sharedInstance];
signInG.shouldFetchGooglePlusUser  = YES;
signInG.shouldFetchGoogleUserEmail = YES;
signInG.clientID = kClientId;
signInG.scopes   = @ [kGTLAuthScopePlusLogin];
signInG.delegate = self;
[signInG trySilentAuthentication];
}

, , URL- , . Contact API. iOS NSXMLParser, api JS, java, net u .

0

Hi, I also faced the same problem. This problem occurs due to volume. In your code, you will redefine the scope.

signIn.scopes = @[ kGTLAuthScopePlusLogin];  

WITH

signIn.scopes = @[ @"profile" ];            // "profile" scope

So you need to change the scope to Simple

signIn.scopes = @[ kGTLAuthScopePlusLogin]; 

Or

signIn.scopes = @[ kGTLAuthScopePlusLogin,@"profile"]; 
0
source
GTLServicePlus* plusService = [[GTLServicePlus alloc] init];
plusService.retryEnabled = YES;

[plusService setAuthorizer:[GPPSignIn sharedInstance].authentication];
GTLQueryPlus *query =
[GTLQueryPlus queryForPeopleListWithUserId:@"me"
                                collection:kGTLPlusCollectionVisible];
[plusService executeQuery:query
        completionHandler:^(GTLServiceTicket *ticket,
                            GTLPlusPeopleFeed *peopleFeed,
                            NSError *error) {
            if (error) {
                GTMLoggerError(@"Error: %@", error);
            } else {
                // Get an array of people from GTLPlusPeopleFeed
                NSArray* peopleList = peopleFeed.items;
                NSLog(@"peopleList %@ ",peopleList.description);
                for (NSArray *dict in peopleFeed.items) {
                    NSString *strID=(NSString*)((GTLPlusPerson*)dict).identifier;
                    NSLog(@"strID %@",strID);
                }


            }
        }];
-1
source

All Articles