【问题标题】:GTMAppAuth + MailCore: "A stable connection to the server could not be established."GTMAppAuth + MailCore:“无法建立与服务器的稳定连接。”
【发布时间】:2017-08-31 10:25:33
【问题描述】:

在 iOS 下使用 GMTAuth 访问 gmail。测试代码如下。该帐户可通过 MailCore 访问,基本上是类似的代码,但用户/密码没有 oAuth。任何线索将不胜感激。

我得到这个日志输出:

__nw_connection_get_connected_socket_block_invoke 3 Connection has no connected handler
2017-02-24 17:20:02.977 Example-iOS[38329:24679819] finished checking account.
2017-02-24 17:20:10.526 Example-iOS[38329:24679819] error loading account: Error Domain=MCOErrorDomain Code=1 "A stable connection to the server could not be established."

这是代码:

self.imapSession = [[MCOIMAPSession alloc] init];
self.imapSession.hostname = @"imap.google.com";
self.imapSession.port = 993;
self.imapSession.username = [_authorization userEmail];
GTMAppAuthFetcherAuthorization* authorization =
[GTMAppAuthFetcherAuthorization authorizationFromKeychainForName:kExampleAuthorizerKey];
self.imapSession.OAuth2Token = authorization.authState.lastTokenResponse.accessToken;
self.imapSession.authType = MCOAuthTypeXOAuth2;
self.imapSession.connectionType = MCOConnectionTypeTLS;
GTMAppAuthExampleViewController * __weak weakSelf = self;
self.imapSession.connectionLogger = ^(void * connectionID, MCOConnectionLogType type, NSData * data) {
  @synchronized(weakSelf) {
    if (type != MCOConnectionLogTypeSentPrivate) {
      NSLog(@"event logged:%p %li withData: %@", connectionID, (long)type, [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]);
      }
    }
  };

// Reset the inbox
self.messages = nil;

NSLog(@"checking account");
self.imapCheckOp = [self.imapSession checkAccountOperation];
[self.imapCheckOp start:^(NSError *error) {
    GTMAppAuthExampleViewController *strongSelf = weakSelf;
    NSLog(@"finished checking account.");
    if (error == nil) {
        // TBD: [strongSelf loadLastNMessages:NUMBER_OF_MESSAGES_TO_LOAD];
    } else {
        NSLog(@"error loading account: %@", error);
    }
    strongSelf.imapCheckOp = nil;
}];
}

【问题讨论】:

    标签: google-oauth


    【解决方案1】:

    更新:我找到了解决方案。这是我的完整工作代码:

    func loadAccount() {
        // This is just a model file holding the account details...
        let account = emailAccounts[currentAccount]
    
        imapSession = MCOIMAPSession()
        imapSession?.hostname = account.hostname
        imapSession?.port = 993
        imapSession?.username = account.userName
        imapSession?.authType = .xoAuth2
    
        // This email helper code is from this guide:
        // https://github.com/MailCore/mailcore2/wiki/Implementing-OAuth-2.0
        imapSession?.oAuth2Token = EmailHelper.singleton().authorization?.authState.lastTokenResponse?.accessToken
    
        // This is important too (wasn't working with other values)
        imapSession?.connectionType = .TLS
    
        imapSession?.connectionLogger = { [unowned self] (connectionID, type, data) in
            let lockQueue = DispatchQueue(label: "com.inboxzero.LockQueue")
            lockQueue.sync() {
                if (type != MCOConnectionLogType(rawValue: NSInteger(2))) { // MCOConnectionLogTypeSentPrivate
                    if let theData = data, let str = connectionID {
                         let theString = String(describing: theData)
                        print("event logged:\(str) \(type) withData: \(theString)")
                    }
                }
            }
        }
    
        // Reset the inbox:
        messages = nil
        isLoading = false
        print("checking account \(self.imapSession!.username!)")
        imapCheckOp = self.imapSession?.checkAccountOperation()
        if let checkOp = imapCheckOp {
            checkOp.start( { (error) in
                print("finished checking \(self.imapSession!.username!)")
                if (error == nil) {
                    self.loadLastNMessages(nMessages: self.NUMBER_OF_MESSAGES_TO_LOAD)
                }
                else {
                    print("error loading account \(self.imapSession!.username!): %@", error!)
                    self.alertWithTitle(title:"Mail Core", message:error.debugDescription)
                    return
                }
            })
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2015-06-13
      • 2021-01-06
      • 2018-11-28
      • 2016-12-21
      • 2020-04-06
      • 2012-10-17
      • 1970-01-01
      • 1970-01-01
      • 2019-06-21
      相关资源
      最近更新 更多