私はウェブサイト(php)を作成しました。データベースに接続して、ユーザーと投稿資料を作成できます。フォーラムのように想像してください。同じデータベースに接続する iPhone アプリを作成するにはどうすればよいでしょうか。私はすでにアプリを作成するために C++ を独学していますが、データベースに接続する方法がわかりません。
5 に答える
Web ベースのデータベースを実行するためのベスト プラクティス*** は、PHP スクリプトへの HTTP リクエストを使用することです。そうすれば、アプリからデータベース接続を確立する必要がなくなり、ユーザー名とパスワードは実際のプロジェクトから除外されます。POST 変数と GET 変数を送信して必要な処理を行う PHP スクリプトをいくつか作成します。
***私の経験と好みで
可能なすべてのアクションのAPIエンドポイントを構築する必要があります。
例:投稿/投稿の表示/投稿の編集/追加
使用するのに人気があり、十分に文書化されたアーキテクチャは、RESThttp ://en.wikipedia.org/wiki/Representational_state_transferです。
PHPフレームワークを使用している場合、APIを作成するためのヘルパーライブラリがよくあります
このチュートリアルは、それを理解するのに役立つはずです http://net.tutsplus.com/tutorials/php/creating-an-api-centric-web-application/
RESTful Webservice をセットアップし、Restkitを介して Obj-C でアクセスするだけです。
編集:ところで、派手なアプリのニーズがない場合は、ウェブサイトをレスポンシブにするだけで完了です.
私はiPhone開発の初心者で、1か月ほどiPhoneに取り組んでいます。これに関するいくつかのヒントを提供したいと思います:
1)iPhoneアプリを作成しているので、まずObjective-Cを読み、Xcodeが一般的にどのように機能するかを確認します。
2)次にWeb APIに接続し、AFNetworkingを使用できます。これが開始するためのチュートリアルです。データを取得するためのAPIを知る必要があります。
3)次に、APIからのJSONデータかXMLデータかに応じて、データを解析する必要があります。これにより、データを取得できるようになります。
4)UIを使用してXcodeで表示できるようになりました
アプリは、サーバー上のURLにHTTPリクエストを発行することでサービスに接続できます。事実上すべてのホスティングサービスがこれらのツールをサポートするので、私はMySQLでPHPを個人的に使用しました。関数を実行するURLを定義することにより、クエリを作成します。通常、サーバー上のデータを変更する場合はPOST要求を使用し、情報の読み取り専用要求を行う場合はGET要求を使用します。
不正アクセスを防ぐためにURLとサーバーを注意深く設計する必要があります。ここでは詳細を説明しませんが、Webにはこれに関する優れたアドバイスが満載です。ここでは、URLを使用してサービスに接続する方法に焦点を当てます。
リクエストの送信と応答の受信に役立つライブラリを使用することをお勧めします。これを行うアプリに積極的に取り組んでいたとき(1年ほど前)、無料で利用できるAsiHTTPRequestライブラリを使用していましたが、作成者がサポートを終了したことがわかりました。私の0.02ドル:それは私のアプリでうまくいきました:http://allseeing-i.com/ASIHTTPRequest/
2つの部分があります:1)要求の送信、および2)応答の受信と処理。通常、リクエストがインターネット上で処理され、サーバーがリクエストを処理し、応答を受信するときにアプリがフリーズしないように、リクエストが非同期で発行されるようにする必要があります。
結果の解析に便利なように、WebアプリのバックエンドにAppleのplist形式で応答を送信させます。または、XMLを使用することもできますが、plistのサポートがSDKに組み込まれているため、私はplistが好きです。
これを行う私のアプリのコードは次のとおりです。
// this allows you to switch between the "live" web service and a local development copy
#ifndef _USE_LOCAL_SERVER_
#define kAppCustomerInfoURL @"https://mysite.com/path/to_my/service/"
#else
#define kAppCustomerInfoURL @"http://localhost/path/to_my/service/"
#endif
NSURL *url = [NSURL URLWithString:kAppCustomerInfoURL];
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
// udm is my singleton that holds properties for the current user
[request setPostValue:[udm getProperty:kNameProperty] forKey:@"name"];
[request setPostValue:[udm getProperty:kPhoneProperty] forKey:@"phone"];
[request setPostValue:[udm getProperty:kEmailProperty] forKey:@"email"];
[request setPostValue:[udm getProperty:kCityProperty] forKey:@"city"];
[request setPostValue:[udm getProperty:kAddressProperty] forKey:@"address"];
[request setPostValue:[udm getProperty:kDeliveryNotesProperty] forKey:@"comments"];
[request setPostValue:[NSString stringWithFormat:@"%u", arc4random()] forKey:@"random"];
[request setValidatesSecureCertificate:NO];
[request setDelegate:self];
[request startAsynchronous];
オブジェクトは、requestFinished:およびrequestFailed:メソッドを実装する必要があります。
- (void)requestFinished:(ASIHTTPRequest *)request
{
NSString *response = [request responseString];
NSData* plistData = [response dataUsingEncoding:NSUTF8StringEncoding];
NSPropertyListFormat format;
NSString *errorStr;
NSDictionary* plist = [NSPropertyListSerialization propertyListFromData:plistData
mutabilityOption:NSPropertyListImmutable
format:&format
errorDescription:&errorStr];
if ( ! plist )
{
// NSLog( @"Error: %@", errorStr );
[errorStr release];
return;
}
for ( NSString *key in [plist allKeys] )
{
if ( [key isEqualToString:@"result"] )
{
NSString *resultStr = [plist objectForKey:@"result"];
if ( ! [resultStr isEqualToString:@"ok"] )
{
// set an error
}
}
// more cases
}
}
これが私の応答失敗メソッドです。アプリの状態を設定し、リクエストが終了したという通知を送信します。これは、アプリの他の部分がリクエストの終了時に自分自身を更新するために使用する可能性があります。
- (void)requestFailed:(ASIHTTPRequest *)request
{
NSError *error = [request error];
NSLog( @"update customer info failed: %@", [error localizedDescription] );
self.syncDataToServerOK = NO;
[[NSNotificationCenter defaultCenter] postNotificationName:kUserDataSyncFinishedNotification object:nil];
}