【问题标题】:How to set a message to be unread/read using Gmail API using objective-C SDK?如何使用 Objective-C SDK 使用 Gmail API 将邮件设置为未读/已读?
【发布时间】:2014-08-20 08:40:26
【问题描述】:

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

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

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

【问题讨论】:

  • 我也在寻找这个问题的答案...相同的代码和相同的错误。

标签: ios gmail gmail-api


【解决方案1】:

嗨胖子和安迪,

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

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

(就在您调用 executeQuery 之前)。

很抱歉给您带来不便,

豪尔赫

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

【讨论】:

  • TY :) 今晚会试一试。
  • 没问题;调试很有趣 :) 在几天之内,它应该可以在不需要这个的情况下工作。
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    Gmail REST API 没有任何问题。我能够使用 Google 的 APIs 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 了解更多详情。我建议您像我一样尝试使用他们的 APIs Explorer,看看它是否适合您。

    【讨论】:

      【解决方案4】:

      Gmail API SDK 中似乎存在错误。

      【讨论】:

      • Google 的 Gmail REST API 对我有用。也许您是指他们的 iOS SDK?
      • @Sid 是的,对不起,我的意思是 api 包装器/sdk。更新了我的答案。
      猜你喜欢
      • 2016-05-23
      • 2016-12-12
      • 2011-01-12
      • 2016-07-30
      • 2017-12-19
      • 1970-01-01
      • 1970-01-01
      • 2015-01-15
      • 2016-07-07
      相关资源
      最近更新 更多