我编写了以下函数来修改消息,将其标记为未读:
- (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)}
任何想法如何做到这一点?
答案 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变通方法。