6

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

- (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

4 回答 4

2

嗨,法舒和安迪,

虽然我们正在努力解决根本问题,但这样做应该暂时使它起作用:

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

(就在您调用 executeQuery 之前)。

给您带来的不便,请见谅,

乔治

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

于 2014-07-26T20:57:42.393 回答
1

Gmail API SDK 中似乎存在错误。

于 2014-07-21T19:06:03.177 回答
1

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

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

通过他们的OAuth 流程授权您的应用,然后将 POST 请求发送到:

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

使用以下 POST 请求正文:

{
 "addLabelIds": ["UNREAD"]
}

有关如何修改消息的详细信息,请参阅他们的API 文档。我建议您像我一样尝试使用他们的 APIs Explorer,看看它是否适合您。

于 2014-07-25T14:29:31.893 回答
1

这是一个错误;现在已修复。

不再需要使用此处提到的 strict=false 解决方法。

于 2014-07-29T21:25:27.060 回答