将数据从iOS应用程序发送到HTML5网站

时间:2015-01-10 01:16:20

标签: ios objective-c html5 post google-sheets

我希望能够将iOS应用(Objective-C)中的数据发送到HTML5网站或Google电子表格,或者实际上可以从任何地方访问数据的任何内容。

3 个答案:

答案 0 :(得分:2)

我非常推荐的是Google Apps Script,它可以在没有服务器(您使用Google的服务器)和免费的情况下轻松完成。但是,你必须知道JavaScript(我可以提供很多帮助,因为我刚刚完成了这个)

我会假设当你发布POST时(当你提供服务器数据时它被称为什么,为了简化事情)你想要一些退出的东西(即一些JSON) #39;成功'或者提供更多信息。此外,我现在要预先警告你:这不适用于企业软件 - 因为你需要一个真正的数据库和服务器(即SQL或noSQL),但是为了与其他非脚本编写者共享,这会让你内置可共享的GUI(图形用户界面)。

好的,在代码上。转到script.google.com并选择"空白项目"在左侧。现在3/4的代码将处理请求b / c向谷歌电子表格添加一行实际上是一行(这是多么强大)。

首先,将此功能添加到:

function doGet(e) {
  if (e.parameter.get) {
      Logger.log("GETing")
      //return getAsJSON()
  } else if (e.parameter.post) {
      Logger.log("POSTing")
      //return dopost(e)
  } else {
      //If don't do anything, get as JSON
      Logger.log("GETing")
      //return getAsJSON()
  }
}

转到Run - > doGet并接受弹出窗口的权限(现在和结束时或在任何时候出现错误"执行该操作需要授权。")

现在,转到文件 - >管理版本 - >保存新版本 然后发布 - >部署为Web应用程序 - >使项目版本成为最新的数字,并确保它是"执行应用程序为:"我和"谁有权访问该应用程序:"任何人(甚至是匿名的)。

打开"当前的网络应用网址:以及最新的代码"链接下面。

第二个链接(最新代码)应该类似于https://script.google.com/macros/s/AKfycbxHk_GXziSAwSH6umVyz3LnnbgpkA9BnqvL2ILeF/dev。添加"?post = true"到它的结尾,然后刷新页面。返回文本编辑器页面并按 CTRL + Enter 。你应该看到" POSTing&#34 ;;替换"发布"与"得到"在URL和刷新。退出"记录输出"然后再次按 CTRL + Enter 。你应该看到" GETing。"

几乎在那里;现在,功能doPost(首先取消上述doGet功能中的所有功能,除非' //如果不做任何事情,请以JSON')的形式更改您的网址从?得到?你非常不清楚你想要添加到你的工作表上的内容,所以我假设你想要添加一个包含2个单元格的行。添加到URL:

&column1="TESTING"&column2="WOW"

这是告诉我们的代码(1)我们想要POST和(2)新行应该是TESTING,WOW(在不同的单元格中)。制作一个新的Google电子表格,并复制" d /"之间的内容。和" /编辑",将其放入电子表格和ID并将您的电子邮件放入;如果出现问题,它会给你发电子邮件,所以请保持开放状态。代码是

function doPost(e) {
    try {
        Logger.log(e)
        if (!(e.parameter.column1) || !(e.parameter.column2)) {
            MailApp.sendEmail("YOUR EMAIL HERE", "Problem with POST to gSheet", "Not correct parameters need column1 and column2 and both need to be '=something' ")
        } else {
            var allVals = SpreadsheetApp.openById("YOUR SPREADSHEET ID HERE").getActiveSheet().appendRow([e.parameter.column1, e.parameter.column2])
            return getAsJSON()
        }
    } catch (e) {
        MailApp.sendEmail("YOUR EMAIL HERE", "Problem with POST to gSheet", e)
    }
}

getASJSON

function getAsJSON(){
    output = ContentService.createTextOutput()
    output.append("DONE")
    return output
}

很有可能返回电子表格的JSON,但这超出了这个范围并且是一个很好的练习。

注意:它会将您重定向到" googleusercontent"域。如果是这样,请不要使用该URL或刷新该URL:返回/ dev或/ exec urls。


在iOS方面,您所要做的就是使用您在上面构建的URL发出POST请求,这非常简单。你提到了Objective-C,但我也提供了Swift。

<强>目标C

- (NSURLResponse *)POST:(NSString *)parameters {
    NSString *baseURL = @"https://script.google.com/macros/s/your_ID/dev?post=true";
    NSURL *url = [NSURL URLWithString: [baseURL stringByAppendingString:parameters]]; // Set your URL here - don't forget to escape quotation marks when you pass the request parameters to the method

    NSURLSession *session = [NSURLSession sharedSession];

    __block NSURLResponse *postResponse;
    NSURLSessionDataTask *dataTask = [session dataTaskWithURL:url completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        // What to do after the POST has completed (if the POST returns any data, it'll be stored in the response parameter specified above); use dispatch_async to wait until the request has completed
        dispatch_async(dispatch_get_main_queue(), ^(void) {
            postResponse = response;
        });
    }];

    [dataTask resume];
    return postResponse;
}

<强>夫特

func POST(parameters: String) -> NSURLResponse? {
  let url: NSURL = NSURL(string:"https://script.google.com/macros/s/your_ID/dev?post=true\(parameters)")! // Set your URL here - don't forget to escape quotation marks when you pass the request parameters to the function

  let session: NSURLSession = NSURLSession.sharedSession()      

  var postResponse: NSURLResponse?
  let dataTask: NSURLSessionDataTask = session.dataTaskWithURL(url, completionHandler: {(data: NSData!, response: NSURLResponse!, error: NSError!) -> Void in // Closure
    // What to do after the POST has completed (if the POST returns any data, it'll be stored in the response parameter specified above); use dispatch_async to wait until the request has completed
      dispatch_async(dispatch_get_main_queue(), {
          postResponse = response
      })

  })

  dataTask.resume()
  return postResponse
}

答案 1 :(得分:0)

  1. 代码服务器接受查询。
  2. 代码查询服务器的iOS应用。也许使用AFNetworking。
  3. 从任何地方访问数据。

答案 2 :(得分:0)

您可以创建一个用PHP编写的页面,接受您从ios应用程序发送的数据,然后php将数据发送到服务器。服务器包含一个表,其中包含要填充的行。

或者您可以使用为您执行此操作的后端提供程序,这里有一个link来解释它是如何工作的(来自raywenderlich)。