给出电子邮件的消息ID,gmail api完整的电子邮件访问权限

时间:2016-05-04 12:33:48

标签: ios google-oauth gmail-api

我正尝试在离线访问模式下访问gmail邮件。我从服务器端获取的gmail访问令牌。

我点了这个链接到here 我从GTMOAuth2Authentication创建了自己的authenticator类和子类,并实现了上面链接中提到的协议。

canAutherize总是失败,即使我进行gmail查询,它也会在授权功能中崩溃。任何帮助将不胜感激。

- (void)viewDidLoad {
    [super viewDidLoad];

    if ([self.subjectInfo length] > 0) {
        [self.subjectLabel setText:self.subjectInfo];
    }else {
        [self.subjectLabel setText:@""];
    }

    self.service = [[GTLServiceGmail alloc] init];

    [self fetchAccessToken];

    // Initialize the Gmail API service & load existing credentials from the keychain if available.

}

    // When the view appears, ensure that the Gmail API service is authorized, and perform API calls.
    - (void)viewDidAppear:(BOOL)animated {
        if (!self.service.authorizer.canAuthorize) {
            // Not yet authorized, request authorization by pushing the login UI onto the UI stack.
    //        [self presentViewController:[self createAuthController] animated:YES completion:nil];
            [self fetchAccessToken];

        } else {
            [self fetchMail:[self gmailMsgId]];
        }
    }




    -(void) fetchAccessToken
    {
        [[APIManager sharedManager] fetchGmailToken:^(NSDictionary *resultDict) {
            if (resultDict != nil) {
                self.accessToken = [resultDict objectForKey:@"access_token"];
                _authInst = [[GmailAuthenticator alloc] initWithAccessToken:self.accessToken];
                self.service.authorizer = _authInst;
        }


        } failure:^(NSError *error) {
            NSLog(@"fail to fetch access token");
        }];
    }



    - (void)fetchMail:(NSString*)messageId {

        GTLQueryGmail *query = [GTLQueryGmail queryForUsersMessagesGet];
        query.messageId = messageId;

        [self.service executeQuery:query
                          delegate:self
                 didFinishSelector:@selector(displayResultWithTicket:finishedWithObject:error:)];
    }



    - (void)displayResultWithTicket:(GTLServiceTicket *)ticket
                 finishedWithObject:(GTLGmailMessage *)messageResponse
                              error:(NSError *)error {
        if (error == nil) {

            NSLog(@"description is %@", [messageResponse description]);
        } else {

             NSLog(@"error : %@", [error description]);
        }
    }

0 个答案:

没有答案