如何使用Objective-C SDK使用Gmail API设置要读取/读取的邮件?

时间:2014-06-30 02:39:11

标签: ios gmail gmail-api

我编写了以下函数来修改消息,将其标记为未读:

- (void)modifyMessageWithId:(NSString *)gmailMessageId
{
    __block GTLQueryGmail *query;
    query = [GTLQueryGmail queryForUsersMessagesModify];
    query.identifier = gmailMessageId;
    query.addLabelIds = @[@"UNREAD"];

    [self.gmailService executeQuery:query completionHandler:^(GTLServiceTicket *ticket, GTLGmailMessage *result, NSError *error) {
        // Check result here
    }];
}

然后我检查了结果,并且有一个错误说id(我认为这意味着我设置的query.identifier)是一个未知的字段名称。我也尝试设置query.messageId而得到了类似的错误:

  

(lldb) po error

     

Error Domain=com.google.GTLJSONRPCErrorDomain Code=400 "The operation couldn’t be completed. (Unknown field name: id)" UserInfo=0xdd37e70 {error=Unknown field name: id, GTLStructuredError=GTLErrorObject 0xdd37cd0: {message:"Unknown field name: id" code:400 data:[1]}, NSLocalizedFailureReason=(Unknown field name: id)}

任何想法如何做到这一点?

4 个答案:

答案 0 :(得分:2)

你好胖子和安迪,

当我们努力修复根问题时,这样做应暂时使其工作:

query.urlQueryParameters[@"strict"] = @"false";

(在你调用executeQuery之前)。

为此给您带来的不便表示歉意,

豪尔赫

编辑:正如user3377170正确指出的那样,现在修复了错误,并且不再需要解决方法。

答案 1 :(得分:1)

Gmail API SDK中存在错误。

答案 2 :(得分:1)

Gmail REST API没有任何问题。我能够使用Google的API Explorer将电子邮件标记为未读。问题可能在于他们的iOS SDK。

因此,有一种方法可以做到这一点,但您可能不得不放弃iOS SDK并向其REST API发出直接HTTP请求。以下是如何做到这一点:

通过OAuth flow授权您的应用,然后发送POST请求到:

https://www.googleapis.com/gmail/v1/users/{SOME_EMAIL_ADDRESS}/messages/{MESSAGE_ID}/modify?key={YOUR_API_KEY}

使用以下POST请求正文:

{
 "addLabelIds": ["UNREAD"]
}

有关详细信息,请参阅API documentation on how to modify messages。我建议你尝试使用他们的API Explorer,就像我一样,看看它是否适合你。

答案 3 :(得分:1)

这是一个错误;它现在已经修好了。

不再需要使用here提到的strict = false变通方法。