私はリモートマシンのドッカーコンテナで実行している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に何か組み込まれていますか?
-1004は、NSURLErrorCannotConnectToHostです。 – Rob
ちょうど私たちが理解しているように、あなたはあなたのMacからこのボックスに 'カール 'できるが、iOSデバイスはまったく接続できないと言っている(wifi上にあり、Macに接続できる)? – Rob
無関係に、私は 'NSURLConnection'を廃止し、代わりに' NSURLSession'を使うことを提案します。 'sendAsynchronousRequest'と同じくらい簡単です。 'NSURLConnection'は推奨されません。 – Rob