我创建了一个网站 (php),它连接到一个数据库,因此它可以拥有用户和发布材料。把它想象成一个论坛。现在我将如何制作一个连接到同一数据库的 iPhone 应用程序。我已经在自学 C++ 来制作应用程序,但不确定如何将它连接到数据库。
5 回答
做基于 Web 的数据库,最佳实践***是使用 HTTP 请求到 PHP 脚本。这样您就不必从应用程序建立数据库连接,从而将用户名和密码排除在实际项目之外。创建一些 PHP 脚本,通过发送 POST 和 GET 变量来满足您的需求。
***根据我的经验和偏好
You just setup a RESTful webservice, then access to it on Obj-C via Restkit.
EDIT: btw if you haven't got fancy app needs, just make your website responsive and you'l be done.
您需要为所有可能的操作构建 API 端点。
例如帖子/查看帖子/编辑帖子/添加
REST http://en.wikipedia.org/wiki/Representational_state_transfer是一种流行且有据可查的架构
如果您使用的是 PHP 框架,则通常有用于创建 API 的帮助库
本教程应该可以帮助您理解它 http://net.tutsplus.com/tutorials/php/creating-an-api-centric-web-application/
您的应用可以通过向服务器上的 URL 发出 HTTP 请求来连接到您的服务。你可以使用任何你喜欢的后端,我个人使用 PHP 和 MySQL,因为几乎所有的托管服务都支持这些工具。您通过定义执行功能的 URL 来形成查询。通常,您希望在更改服务器上的数据时使用 POST 请求,而在对信息进行只读请求时使用 GET 请求。
你必须小心设计你的 URL 和你的服务器以防止未经授权的访问,我不会在这里描述细节,但网络上有很多关于这方面的好建议。我将在这里重点介绍如何使用 URL 连接到您的服务。
我建议使用有助于发送请求和接收响应的库。回到(大约一年前)当我积极开发一个应用程序时,我使用了免费提供的 AsiHTTPRequest 库,但我现在看到作者已经停止支持它。我的 0.02 美元:它适用于我的应用程序:http ://allseeing-i.com/ASIHTTPRequest/
有两个部分:1)发送请求,2)接收和处理响应。您通常希望确保您的请求是异步发出的,这样您的应用程序不会在请求通过 Internet、服务器处理请求并且您收到响应时冻结。
为了方便解析结果,请让您的 Web 应用后端以 Apple plist 格式发送响应。或者您可以使用 XML,但我喜欢 plist,因为 SDK 中包含对它的支持。
这是我的应用程序中执行此操作的代码:
// 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];
}
我是 iphone 开发的新手,并且已经在 iPhone 上工作了一个月左右。想给一些提示:
1)首先阅读Objective-C,因为您正在制作Iphone应用程序以及Xcode的一般工作原理
2) 接下来连接到 Web API,您可以使用 AFNetworking。这是一个入门教程。您需要知道获取数据的 API 是什么。
3) 接下来,您需要根据 API 中的 JSON 或 XML 数据来解析数据。这将允许您获取数据。
4)您现在可以使用 UI 在 Xcode 中显示