2012-07-04 4 views
3

J'essaie de me connecter avec google docs en utilisant le protocole oauth 2.0. Je pense que la connexion est OK parce que je reçois le jeton d'accès. Après cela, je veux lister les documents. J'ai ajouté le gdata pour l'objectif-c api à mon projet et j'ai suivi les exemples mais je ne reçois aucun doc. J'essaie juste de lire le titre de doc du firt et de le montrer mais quelque chose doit être faux ou peut-être que je manque quelque chose. De l'aide? Merci. Voici le code:en essayant de lister google docs avec oauth et gdata objectif-c api

ViewController.m

@implementation ViewController 

@synthesize accessToken; 
@synthesize mDocListFeed; 
@synthesize mDoclistFetchTicket; 


static NSString *const kMyClientID = @"199740745364-22lugf8undgv0rc0ucbfpgsn3v90lfsd.apps.googleusercontent.com"; 
static NSString *const kMyClientSecret = @"dPFs5D66kLyQIgUNL6igKUoX"; 
static NSString *const kKeychainItemName = @"casa"; 

- (GDataServiceGoogleDocs *)docsService { 

    static GDataServiceGoogleDocs* service = nil; 

    if (!service) { 
    service = [[GDataServiceGoogleDocs alloc] init]; 

    [service setShouldCacheResponseData:YES]; 
    [service setServiceShouldFollowNextLinks:YES]; 
    [service setIsServiceRetryEnabled:YES]; 
} 

return service; 

} 



- (void) mifetch { 

    GDataServiceGoogleDocs *service = [self docsService]; 

    GDataServiceTicket *ticket; 


    NSURL *feedURL = [GDataServiceGoogleDocs docsFeedURL]; 


    ticket = [service fetchFeedWithURL:feedURL 
       delegate:self 
     didFinishSelector:@selector(ticket:finishedWithFeed:error:)]; 

    mDoclistFetchTicket = ticket; 

} 

- (void) ticket: (GDataServiceTicket *) ticket 
     finishedWithFeed: (GDataFeedDocList *) feed 
      error: (NSError *) error { 

mDocListFeed = feed; 


GDataEntryDocBase *doc = [[mDocListFeed entries] objectAtIndex:0]; 

NSString *ttitle = [[doc title] stringValue]; 
UIAlertView *alertView = [ [UIAlertView alloc] initWithTitle:@"primer doc" 
            message:[NSString stringWithFormat:@"titulo: %@", ttitle] 
                delegate:self 
              cancelButtonTitle:@"Dismiss" 
              otherButtonTitles:nil]; 

[alertView show]; 

} 


- (void)authorize { 

    NSString *scope = @"https://spreadsheets.google.com/feeds"; 

// scope for Google+ API 

GTMOAuth2ViewControllerTouch *windowController = [[GTMOAuth2ViewControllerTouch alloc]  initWithScope:scope 
                          clientID:kMyClientID 
                         clientSecret:kMyClientSecret 
                        keychainItemName:kKeychainItemName 
                          delegate:self 
                finishedSelector:@selector(viewController:finishedWithAuth:error:)]; 


[[self navigationController] pushViewController:windowController animated:YES]; 
} 


- (IBAction)autenticarse 
{ 
[self authorize]; 
} 


- (IBAction)listar 
{ 

[self mifetch]; 
} 


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


if (error != nil) 
{ 
    // Authentication failed 
    UIAlertView *alertView = [ [UIAlertView alloc] initWithTitle:@"Authorization Failed" 
                 message:[error localizedDescription] 
                 delegate:self 
               cancelButtonTitle:@"Dismiss" 
               otherButtonTitles:nil]; 
    [alertView show]; 
} 
else 
{ 
    //si error==nil en el callback, entonces la peticion fue autorizada 
    // Authentication succeeded 

    // Assign the access token to the instance property for later use 
    self.accessToken = auth.accessToken; 



    // Display the access token to the user 
    UIAlertView *alertView = [ [UIAlertView alloc] initWithTitle:@"Authorization Succeeded" 
    message:[NSString stringWithFormat:@"Access Token: %@ code:%@", auth.accessToken, auth.code] 
                 delegate:self 
               cancelButtonTitle:@"Dismiss" 
               otherButtonTitles:nil]; 
    [alertView show]; 
    [[self docsService] setAuthorizer:auth]; 

} 
} 


// table view data source methods 


//The first thing we have to do is, tell the table view how many rows it should expect and this is done in tableView:numberOfRowsInSection. 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 

if (tableView == tablalistar) { 
    return [[mDocListFeed entries] count]; 
} 

return 0; 


} 


//Now that the table view knows how many rows to display, we need to display the actual text which goes in a table view cell. The table view is made of table rows and rows contains table cell. This is done in tableView:cellForRowAtIndexPath which is called n number of times, where n is the value returned in tableView:numberOfRowsInSection. The method provides indexPath which is of type NSIndexPath and using this we can find out the current row number the table view is going to display. 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 


UITableViewCell *cell = [tableView 
         dequeueReusableCellWithIdentifier:@"tablalistar"]; 

if (tableView == tablalistar) { 



    GDataEntryDocBase *doc = [[mDocListFeed entries] objectAtIndex:indexPath.row]; 

    cell.textLabel.text = [[doc title] stringValue]; 


} 
return cell; 
} 




@end 

Merci !!!

+0

y a-t-il des erreurs dans la console? – Lvsti

Répondre

1

La chaîne d'étendue ne demande l'autorisation que pour l'API Spreadsheet, mais l'extraction est destinée à l'API Documents List.

La portée de l'API est disponible Liste de documents +[GDataServiceGoogleDocs authorizationScope]

Scopes pour plusieurs services peuvent être combinés avec +[GTMOAuth2Authentication scopeWithStrings:]

Soit dit en passant, l'API a été remplacée Liste de documents par le Google Drive API.

+0

Merci beaucoup !!!! Ça marche!!!! – user1502091