2017-04-05 10 views
0

iOSではGMTAuthを使用してGmailにアクセスします。テストコードは以下の通りです。アカウントは、MailCore、本質的に同様のコードでアクセス可能ですが、user/pw no oAuthです。すべての手がかりをいただければ幸いです。GTMAppAuth + MailCore: "サーバーへの安定した接続を確立できませんでした。"

私は、このログ出力を得る:

__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; 
}]; 
} 

答えて

0

アップデート:私は解決策を考え出しました。ここに私の完全な作業コード:

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 
      } 
     }) 
    } 
} 
関連する問題