2017-10-04 22 views
0

私はリモートマシンのドッカーコンテナで実行しているSpringBootアプリケーションを持っています(実際は私のMacの横の小さなボックスですが、とにかく...)。私はまた、私のMac上でローカルにbootRunを使ってSpringBootアプリケーションとして動作するインスタンスを持っています。これらのインスタンスは、決して接続されていません。私は、このSBアプリケーションによって公開されたエンドポイントにREST呼び出しを出すプッシュ通知を受け入れるための小さなiOSテストアプリを持っています。私は実際のiPhoneを接続してXcodeがそのアプリケーションをインストールします。NSURLConnectionはリモートIPに接続できません

私のMacのIPアドレスを使用してローカルに起動しているbootRunインスタンスでiOSアプリケーションのREST呼び出しを指し示すと、呼び出しはうまく動作し、レジスタとすべてが素晴らしいです。しかし、私がDockerインスタンスを実行しているリモートマシンでiOSをREST呼び出しに向けると、呼び出しは失敗します。しかし、同じURLとペイロードを使用して端末からcurlコマンドを実行すると正常に動作します。したがって、ファイアウォールの問題などはありません。報告されたエラーは次のとおりです。ここで

2017-10-04 14:16:18.907472+0100 IosNotificationApp[563:28094] TIC TCP Conn Failed [1:0x1c416a080]: 1:61 Err(61) 
2017-10-04 14:16:18.907716+0100 IosNotificationApp[563:28094] Task <7111CDD1-CB81-410E-B928-AE46E6964184>.<0> HTTP load failed (error code: -1004 [1:61]) 
2017-10-04 14:16:18.908426+0100 IosNotificationApp[563:28093] NSURLConnection finished with error - code -1004 
2017-10-04 14:16:18.918332+0100 IosNotificationApp[563:28048] Received response: (null), data: (null) 
2017-10-04 14:16:18.918822+0100 IosNotificationApp[563:28048] Failed to register.: Error Domain=NSURLErrorDomain Code=-1004 "Could not connect to the server." UserInfo={NSUnderlyingError=0x1c0252330 {Error Domain=kCFErrorDomainCFNetwork Code=-1004 "Could not connect to the server." UserInfo={NSErrorFailingURLStringKey=http://111.222.3.4:1234/ios-notification-server/register, NSErrorFailingURLKey=http://111.222.3.4:1234/ios-notification-server/register, _kCFStreamErrorCodeKey=61, _kCFStreamErrorDomainKey=1, NSLocalizedDescription=Could not connect to the server.}}, NSErrorFailingURLStringKey=http://111.222.3.4:1234/ios-notification-server/register, NSErrorFailingURLKey=http://111.222.3.4:1234/ios-notification-server/register, _kCFStreamErrorDomainKey=1, _kCFStreamErrorCodeKey=61, NSLocalizedDescription=Could not connect to the server.} 

は私didRegisterForRemoteNotificationsWithDeviceToken機能である:何が失敗した認証か何かのように、リモートサーバー上で登録していない

- (void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken { 

    NSString *newToken = [deviceToken description]; 
    newToken = [newToken stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"<>"]]; 
    newToken = [newToken stringByReplacingOccurrencesOfString:@" " withString:@""]; 
    NSLog(@"Device token is: %@", newToken); 

    NSString *urlString = [NSString stringWithFormat:@"http://111.222.3.4:1234/ios-notification-server/register"]; 
    NSString *body =[NSString stringWithFormat:@"{\"foo\":\"bar\",\"deviceToken\":\"%@\"}", newToken]; 

    NSURL *url = [NSURL URLWithString:urlString]; 
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; 

    [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; 
    [request setValue:@"Bearer custom.token" forHTTPHeaderField:@"Authorization"]; 
    [request setHTTPMethod:@"POST"]; 
    [request setHTTPBody:[body dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES]]; 

    NSURLSession *session = [NSURLSession sharedSession]; 
    [[session dataTaskWithURL:[NSURL URLWithString:urlString] 
      completionHandler:^(NSData *data, 
           NSURLResponse *response, 
           NSError *connectionError) { 

       NSLog(@"Received response: %@, data: %@", response, data); 

       if (data.length > 0 && connectionError == nil) { 
        NSLog(@"Successfully registered"); 
       } else { 
        NSLog(@"Failed to register.: %@", connectionError); 
       } 
      }] resume]; 
} 

、それだけでコールを発行していないようですすべて。 Xcodeが、マシンのローカルに割り当てられていないIPを呼び出すときに、これが起こるのをなぜ引き起こすのか、誰にも分かりませんか?何が起こっているのかを診断するのに役立つXcodeに何か組み込まれていますか?

+0

-1004は、NSURLErrorCannotConnectToHostです。 – Rob

+0

ちょうど私たちが理解しているように、あなたはあなたのMacからこのボックスに 'カール 'できるが、iOSデバイスはまったく接続できないと言っている(wifi上にあり、Macに接続できる)? – Rob

+0

無関係に、私は 'NSURLConnection'を廃止し、代わりに' NSURLSession'を使うことを提案します。 'sendAsynchronousRequest'と同じくらい簡単です。 'NSURLConnection'は推奨されません。 – Rob

答えて

0

物理デバイスの場合は、System Preferences -> Sharingにアクセスしてください。 Internet Sharingをクリックし、To computers using: iPhone USBを有効にします。

iPadの場合は、iPad USBを有効にするとします。

関連する問題