如何在Swift中通过GMail API查询GMail的收件箱内容

时间:2016-05-18 09:15:02

标签: ios swift gmail-api google-api-client gtm-oauth2

我需要在身份验证后在我的应用程序中集成G​​Mail收件箱。那么如何使用API​​查询GMail的收件箱内容。而且我也必须访问其他功能。所以请帮助我找到访问GMail的确切快速代码。

1 个答案:

答案 0 :(得分:0)

使用Google文档iOS Quickstart

  

第1步:开启Gmail API

     

第2步:准备工作区

     

第3步:设置样本

     

以下是示例代码,使用以下代码替换ViewController.h文件的内容:

#import <UIKit/UIKit.h>

#import "GTMOAuth2ViewControllerTouch.h"
#import "GTLGmail.h"

@interface ViewController : UIViewController

@property (nonatomic, strong) GTLServiceGmail *service;
@property (nonatomic, strong) UITextView *output;

@end

使用以下代码替换ViewController.m的内容:

#import "ViewController.h"

static NSString *const kKeychainItemName = @"Gmail API";
static NSString *const kClientID = @"YOUR_CLIENT_ID_HERE";

@implementation ViewController

@synthesize service = _service;
@synthesize output = _output;

// When the view loads, create necessary subviews, and initialize the Gmail API service.
- (void)viewDidLoad {
  [super viewDidLoad];

  // Create a UITextView to display output.
  self.output = [[UITextView alloc] initWithFrame:self.view.bounds];
  self.output.editable = false;
  self.output.contentInset = UIEdgeInsetsMake(20.0, 0.0, 20.0, 0.0);
  self.output.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
  [self.view addSubview:self.output];

  // Initialize the Gmail API service & load existing credentials from the keychain if available.
  self.service = [[GTLServiceGmail alloc] init];
  self.service.authorizer =
  [GTMOAuth2ViewControllerTouch authForGoogleFromKeychainForName:kKeychainItemName
                                                        clientID:kClientID
                                                    clientSecret:nil];
}

// 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];

  } else {
    [self fetchLabels];
  }
}

// Construct a query and get a list of labels from the user's gmail. Display the
// label name in the UITextView
- (void)fetchLabels {
  self.output.text = @"Getting labels...";
  GTLQueryGmail *query = [GTLQueryGmail queryForUsersLabelsList];
  [self.service executeQuery:query
                    delegate:self
           didFinishSelector:@selector(displayResultWithTicket:finishedWithObject:error:)];
}

- (void)displayResultWithTicket:(GTLServiceTicket *)ticket
             finishedWithObject:(GTLGmailListLabelsResponse *)labelsResponse
                          error:(NSError *)error {
  if (error == nil) {
    NSMutableString *labelString = [[NSMutableString alloc] init];
    if (labelsResponse.labels.count > 0) {
      [labelString appendString:@"Labels:\n"];
      for (GTLGmailLabel *label in labelsResponse.labels) {
        [labelString appendFormat:@"%@\n", label.name];
      }
    } else {
      [labelString appendString:@"No labels found."];
    }
    self.output.text = labelString;
  } else {
    [self showAlert:@"Error" message:error.localizedDescription];
  }
}


// Creates the auth controller for authorizing access to Gmail API.
- (GTMOAuth2ViewControllerTouch *)createAuthController {
  GTMOAuth2ViewControllerTouch *authController;
  // If modifying these scopes, delete your previously saved credentials by
  // resetting the iOS simulator or uninstall the app.
  NSArray *scopes = [NSArray arrayWithObjects:kGTLAuthScopeGmailReadonly, nil];
  authController = [[GTMOAuth2ViewControllerTouch alloc]
           initWithScope:[scopes componentsJoinedByString:@" "]
                clientID:kClientID
            clientSecret:nil
        keychainItemName:kKeychainItemName
                delegate:self
        finishedSelector:@selector(viewController:finishedWithAuth:error:)];
  return authController;
}

// Handle completion of the authorization process, and update the Gmail API
// with the new credentials.
- (void)viewController:(GTMOAuth2ViewControllerTouch *)viewController
      finishedWithAuth:(GTMOAuth2Authentication *)authResult
                 error:(NSError *)error {
  if (error != nil) {
    [self showAlert:@"Authentication Error" message:error.localizedDescription];
    self.service.authorizer = nil;
  }
  else {
    self.service.authorizer = authResult;
    [self dismissViewControllerAnimated:YES completion:nil];
  }
}

// Helper for showing an alert
- (void)showAlert:(NSString *)title message:(NSString *)message {
  UIAlertView *alert;
  alert = [[UIAlertView alloc] initWithTitle:title
                                     message:message
                                    delegate:nil
                           cancelButtonTitle:@"OK"
                           otherButtonTitles:nil];
  [alert show];
}

@end
  

第4步:运行样本

     

备注:授权信息存储在您的钥匙串中,因此后续执行不会提示授权。

您可以在https://developers.google.com/gmail/api/v1/reference/中查看并了解有关iOS和Google API(GMAIL API)的更多信息,以应用您想要添加的其他功能。

我希望这会有所帮助:)