私はWebサービスについて多くの読書と調査を行い、iOSアプリ側からそれらを消費しました。しかし、多くの Web サイトは非常に簡潔であり、データの使用と解析について詳しく説明していません。現在、私は raywenderlich によるチュートリアルhttp://www.raywenderlich.com/2965/how-to-write-an-ios-app-that-uses-a-web-service
を読んでおり、SO スレッドを読んでいます http://stackoverflow.com/questions/7364326/recommendations-for-net-web-service-format-protocol-for-android-iphone-etc-i
が、どのようにアプローチすべきかはまだ不明です。
私がこれまでに知っていることから、Web サービスを使用するいくつかの方法は REST および SOAP プロトコルです。(Xcode でアプリを作成し、VB (.asmx ファイル) で Web サービスを実行します)
私は、記事などを読むよりも、チュートリアルで実践することで、より多くのことをより速く学ぶタイプの男です。php ではなく .asmx (VS で構築された Web サービス) を使用するチュートリアルはありますか。個人的には、JSON を解析する REST プロトコルの方が使いやすいと多くの人が言っており、Apple はすでにそのための lib/framework を持っていると言っています。
iOS アプリが Web サービスを利用できるようにする方法を学ぶことは、将来のアプリ開発において非常に重要であると感じているので、誰かが私を正しい方向に向けることができれば素晴らしいことです。
編集: php webservice を読んだ後、私が持っていないものがいくつかあります。
関数から償還するhttp://www.raywenderlich.com/2941/how-to-write-a-simple-phpmysql-web-service-for-an-ios-app
// Put parameters into local variables
$rw_app_id = $_POST["rw_app_id"];
$code = $_POST["code"];
$device_id = $_POST["device_id"]
asmx ファイルを使用している場合、すべての Web メソッドでこのようなものを宣言する必要がありますか?
私の webMethod (基本的な CRUD) の EG
【ウェブメソッド】
public string insertUser(string User, string Password, string Gender)
{
try
{
string connectionString = ConfigurationManager.ConnectionStrings["mysql"].ToString();
MySqlCommand dCmd = new MySqlCommand();
using (MySqlConnection mysqlCon = new MySqlConnection(connectionString))
{
if (do_check_record(User) == false)
{
mysqlCon.Open();
dCmd.CommandText = "INSERT into tbl_login (username,password,gender) values (?username,?password,?gender)";
dCmd.CommandType = CommandType.Text;
dCmd.Parameters.Add(new MySqlParameter("?username", User));
dCmd.Parameters.Add(new MySqlParameter("?password", Password));
dCmd.Parameters.Add(new MySqlParameter("?gender", Gender));
dCmd.Connection = mysqlCon;
dCmd.ExecuteNonQuery();
mysqlCon.Close();
}
else
{
return string.Format( "User exists in data_base");
}
}
return string.Format("data_base insert");
}
catch (Exception ex)
{
return string.Format(ex.Message);
}
}
アプリ側からの Web サービスの使用中
チュートリアルで与えられた例は
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
NSLog(@"Want to redeem: %@", textField.text);
// Get device unique ID
UIDevice *device = [UIDevice currentDevice];
NSString *uniqueIdentifier = [device uniqueIdentifier];
// Start request
NSString *code = textField.text;
NSURL *url = [NSURL URLWithString:@"http://www.wildfables.com/promos/"];
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
[request setPostValue:@"1" forKey:@"rw_app_id"];
[request setPostValue:code forKey:@"code"];
[request setPostValue:uniqueIdentifier forKey:@"device_id"];
[request setDelegate:self];
[request startAsynchronous];
// Hide keyword
[textField resignFirstResponder];
// Clear text field
textView.text = @"";
return TRUE;
}
しかし、IBAction
代わりに呼び出すボタンであってはなりませんBOOL
か?
- (void)requestFinished:(ASIHTTPRequest *)request
{
if (request.responseStatusCode == 400) {
textView.text = @"Invalid code";
} else if (request.responseStatusCode == 403) {
textView.text = @"Code already used";
} else if (request.responseStatusCode == 200) {
NSString *responseString = [request responseString];
NSDictionary *responseDict = [responseString JSONValue];
NSString *unlockCode = [responseDict objectForKey:@"unlock_code"];
if ([unlockCode compare:@"com.razeware.test.unlock.cake"] == NSOrderedSame) {
textView.text = @"The cake is a lie!";
} else {
textView.text = [NSString stringWithFormat:@"Received unexpected unlock code: %@", unlockCode];
}
} else {
textView.text = @"Unexpected error";
}
}
- (void)requestFailed:(ASIHTTPRequest *)request
{
NSError *error = [request error];
textView.text = error.localizedDescription;
}
間違っていたら訂正してください。ただし- (void)requestFinished:(ASIHTTPRequest *)request
、チュートリアルで使用されているこのメソッドは、JSON を解析しているものですよね? もしそうなら、私が呼び出すすべての webmethod に対して、新しいリクエストと新しい- (void)requestFinished:(ASIHTTPRequest *)request
編集:どんな助けでも本当に感謝しています...私はこれの初心者であり、経験のある人が私を案内してくれることを願っています.