使用 AFNetworking ios xcode 获取 gmail 邮件列表

Posted

技术标签:

【中文标题】使用 AFNetworking ios xcode 获取 gmail 邮件列表【英文标题】:GET gmail mail list with AFNetworking ios xcode 【发布时间】:2015-10-19 00:15:52 【问题描述】:

我正在尝试从 ios 上的 gmail 获取消息列表。我成功接收到我的帐户的访问令牌(使用 OAuth 2.0)。但接下来我要做的是使用 AFNetworking 框架获取消息列表(这就是目标)。试图做我想做的一切:Google API Users.messages: list 但我得到了一个错误:

Domain=com.alamofire.error.serialization.response Code=-1011 "请求失败:禁止 (403)" UserInfo=0x8e5f9b0 com.alamofire.serialization.response.error.response= URL: .../ gmail/v1/users/me/messages 状态码:403,标题 “替代协议”=“443:quic,p=1”; “缓存控制”=“私人,最大年龄=0”; “内容编码”= gzip; “内容类型”=“应用程序/json;字符集=UTF-8”; 日期 =“2015 年 7 月 28 日星期二 10:54:07 GMT”; Expires = "2015 年 7 月 28 日星期二 10:54:07 GMT"; 服务器 = GSE; “传输编码” = 身份; Vary = "原点,X-原点";...

这是我的代码:

#import "RSServerManager.h"
#import "AFNetworking.h"
#import "RSUser.h"
#import "RSAccessToken.h"

@interface RSServerManager()
@property (strong, nonatomic) AFHTTPRequestOperationManager *requestOperationManager;
@end

@implementation RSServerManager

+ (RSServerManager *) sharedManager 
    static RSServerManager *manager = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^
        manager = [[RSServerManager alloc] init];
    );
    return manager;  


- (id)init

    self = [super init];
    if (self) 
        NSURL *url = [NSURL URLWithString:@"https://www.googleapis.com/"];
        self.requestOperationManager = [[AFHTTPRequestOperationManager alloc] initWithBaseURL:url];
    
    return self;

GET方法:

- (void) getMessagesList:(RSAccessToken *)accessToken
               onSuccess:(void (^)(__autoreleasing id *))success
               onFailure:(void (^)(NSError *, NSInteger))failure 

    NSDictionary *Parameters = [NSDictionary dictionaryWithObjectsAndKeys:
                                                                @"messages", @"fields",
                                                                    @"true", @"includeSpamTrash",
                                                @"https://mail.google.com/", @"scope",
                                                                   @"query", @"q",nil];

    AFHTTPRequestSerializer *requestSerializer = [AFJSONRequestSerializer serializer];
    NSString *authValue = [NSString stringWithFormat:@"Bearer %@", accessToken.access_token];
   [requestSerializer setValue: authValue forHTTPHeaderField:@"Authorization"];
   [requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];

    self.requestOperationManager.requestSerializer = requestSerializer;
    [self.requestOperationManager
     GET:@"gmail/v1/users/me/messages"
     parameters: Parameters
     success:^(AFHTTPRequestOperation *operation, NSDictionary *responseObject) 
         NSLog(@"JSON : %@", responseObject);

         if (success) 
             success(nil);
         
     
     failure:^(AFHTTPRequestOperation *operation, NSError *error) 
         NSLog(@"Error: %@", error);
         if (failure) 
             failure(error, operation.response.statusCode);
         
     ];

请帮助我找到使用 AFNetworking 获取这些消息列表的正确方法!!!

【问题讨论】:

您是否在开发者控制台中启用了 Gmail-API?您的代码中是否有此链接developers.google.com/gmail/api/v1/reference/users/messages/… 中提到的范围之一? 非常感谢!!!检查范围后,我发现我的访问令牌的范围与我在 Users.messages 中的范围不同:列表!!(所以我使用了一个范围(@"https://mail.google.com/", @"scope"),这两种方法都一样。而且错误消失。PS根据我的代码,要使其正常工作,您需要删除参数:“q”和“fields”。 Np :) 很高兴您的问题得到解决! 【参考方案1】:

在您的开发者控制台中启用 Gmail-API。在您的代码中包含此link 中提到的范围之一。

【讨论】:

以上是关于使用 AFNetworking ios xcode 获取 gmail 邮件列表的主要内容,如果未能解决你的问题,请参考以下文章

iOS开发-登录界面开发AFNetworking的引入-Swfit4.1_Xcode9.3.1

IOS如何在目标c中将AFNetworking添加到我的xcode项目中

如何将 AFNetworking 添加到 XCode 应用程序

iOS开发网络数据之AFNetworking使用

iOS AFNetworking 3.0以上使用

IOS AFN (第三方请求)