Aqlier/ 1月 18, 2017/ iPhone

iOS アプリ開発

iOS アプリ開発のポイントは、3点です。

1.PHPアプリの起動方法
2.PHPアプリからのデータ受け取り
3.ATS設定(App Transfer Security対応)

当初swiftで作成していましたが、Swift3.0になり対処方法がわからないエラーが解決できないのでobjective-cで作成しています。

1.PHPアプリの起動方法

PHPアプリを起動する際に、iPhone画面上の値をパラメタとして

usernum=XXXX&name=XXXX&addr=XXXX“(XXXXは、画面の値)形式で呼び出します。


 NSString*post = [NSString stringWithFormat:@"usernum=%@&name=%@&addr=%@" ,user_num,username,addr];
 NSData*postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
 NSString *url = @"http://192.168.1.3/php_select.php"; //OK
 
 NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:url]
 cachePolicy:NSURLRequestUseProtocolCachePolicy
 timeoutInterval:10.0];
 
 [request setHTTPMethod:@"POST"];
 [request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
 [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
 [request setValue:[NSString stringWithFormat:@"%d",(int)[post length]] forHTTPHeaderField:@"Content-Length"];
 [request setValue: @"application/x-www-form-urlencoded" forHTTPHeaderField: @"Content-Type"];
 
 [request setHTTPBody: [post dataUsingEncoding: NSUTF8StringEncoding]];
 
 // サーバにリクエスト
 NSURLSession *session = [NSURLSession sharedSession];
 
 [[session dataTaskWithRequest: request completionHandler: ^(NSData *data, NSURLResponse *response, NSError *error) {
 
 // 結果判定
 if (response && ! error) {
     NSString *responseString = [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding];
 
     NSLog(@"成功: %@", responseString);
 
     XresponseString = responseString;

 }
 else {
     NSLog(@"失敗: %@", error);
 }
 
 }] resume];
2.PHPアプリからのデータ受け取り

値を受け取る際にも工夫が必要で、今回は、インジケータ処理を使用して受け取り後にすぐに表示する方法にしています。

受け取り時に処理結果と値が送られてくるので、これらを処理して画面に表示させます。
PHPからの戻り値は、「name=#ZZZZZ#YYYYY 」(ZZZZZ:名前、YYYYY:住所)


NSArray *arr = [XresponseString componentsSeparatedByString:@"#"]; //カンマで分割
[arr objectAtIndex:0]; //1個目
[arr objectAtIndex:1]; //2個目

if ([[arr objectAtIndex:0] isEqualToString:@"name="] == YES){

  if ([[arr objectAtIndex:1] isEqualToString:@""] == NO){

    self.text1.text = [arr objectAtIndex:1];//画面に値をセット
    self.text2.text = [arr objectAtIndex:2];//画面に値をセット

  }

  else{

    self.user_namex.text = @"該当データなし";
  }
}
3.App Transfer Security対応

アプリでATS設定無効化にしないと、URLがHTTPSでないものは、受け付けてくれません。
info.plistを下記のように変更する必要があります。

NSApp Transport Security と AppTransport Security Setting の箇所を追加してください。

 

 

 

関連記事

    iOS/AndroidでHTTP通信アプリのまとめ