GAS를 API 서버로 사용하여 iOS 앱에서 직접 스프레드시트 데이터를 가져옵니다.
처음에
이 포스트에서는 RPA 개발로서, 이하의 유스 케이스의 겹침을 상정하고 있습니다.
일부러 직접 iOS에서 GAS에 요청하지 않아도 ExtensionAPI의 iOS 버전이나 GAS에서 Firebase나 DynamoDB에 내보낸 후에 mBaaS로 데이터를 요청하는 것이 iOS 앱의 품질로 좋은 것은 틀림없습니다.
단지 RPA의 출면으로 iOS 앱을 채용하는 일련으로 소개합니다.
스프레드시트
이번 예제에서 사용하는 스프레드시트는 제가 평소에 고민하고 있는 웨어러블 디바이스로 센싱할 수 있는 센서 데이터의 목록입니다.
다음 이미지의 D, E, F, G, H 열을 사용하여 이해도 측정 확인 테스트를 수행하기 위한 앱을 생성한다고 가정합니다.
GAS 소스 코드
D열~H열을 샘플로 8개 취득해 보겠습니다.
각각을 id
, name
, nameJP
, description
, usage
8개의 JSON 레코드를 배열로 반환하는 설계로 합니다.
GAS를 사용하기 위해 배열 형식으로 반환 할 수있는 API 형식이 없으므로 {'vitals': getVitalDatas()}
에서 JSON 형식으로 래핑하여 값을 iOS 앱에 전달합니다.
GAS의 웹 앱 공개에 대해서는 여기이 참고가 될 것입니다.
api.gsfunction getVitalDatas() {
var spreadsheetId = '1E6************lgY';
var rangeName = 'sensorList!D3:H10';
var values = Sheets.Spreadsheets.Values.get(spreadsheetId, rangeName).values;
if (!values) {
Logger.log('No data found.');
} else {
var resultArray = [];
for (var row = 0; row < values.length; row++) {
var jsonRecord = {
'id': values[row][0],
'name': values[row][1],
'nameJP': values[row][2],
'description': values[row][3],
'usage': values[row][4]
}
resultArray.push(jsonRecord);
}
return resultArray;
}
}
function doGet(e){
var result = JSON.stringify({'vitals': getVitalDatas()});
return ContentService.createTextOutput(result).setMimeType(ContentService.MimeType.JSON);
}
Swift 소스 코드
받는 쪽으로서 Vital
형과 그것을 랩핑 한 Result
형을 정의하고 있습니다.
Result형에 디코드한 값을 vitals로서, 문제 없이 취득할 수 있었는지 확인합니다.
APIRequest.swiftimport Foundation
struct APIRequest {
static let mainAPIHost: String = "https://script.google.com/macros/s/AKf****************swg/exec"
static func getSheetData(){
var request = URLRequest(url: URL(string: mainAPIHost)!)
request.httpMethod = "GET"
let task = URLSession.shared.dataTask(with: request) { data, response, error in
guard let jsonData = data else { return }
struct Result: Codable {
var vitals: [Vital]
}
do {
let vitals = try JSONDecoder().decode(Result.self, from: jsonData)
print(vitals)
} catch {
print(error.localizedDescription)
}
}
task.resume()
}
}
struct Vital: Codable {
var id: String
var name: String
var nameJP: String
var description: String
var usage: String
}
iOS 앱 측에서 데이터 획득 확인
디버그 로그 화면에, Vital형 형식에 매핑 되어 그것을 배열로 하는 Result형을 취득 할 수 있는 것을 확인할 수 있습니다.
끝에
이 응용 프로그램은 EvangVitalData
로 나중에 AppStore에 게시 될 예정입니다.
생체 데이터의 확인 테스트를 할 수 있으므로 만약 보면 놀아보세요.
D열~H열을 샘플로 8개 취득해 보겠습니다.
각각을
id
, name
, nameJP
, description
, usage
8개의 JSON 레코드를 배열로 반환하는 설계로 합니다.GAS를 사용하기 위해 배열 형식으로 반환 할 수있는 API 형식이 없으므로
{'vitals': getVitalDatas()}
에서 JSON 형식으로 래핑하여 값을 iOS 앱에 전달합니다.GAS의 웹 앱 공개에 대해서는 여기이 참고가 될 것입니다.
api.gs
function getVitalDatas() {
var spreadsheetId = '1E6************lgY';
var rangeName = 'sensorList!D3:H10';
var values = Sheets.Spreadsheets.Values.get(spreadsheetId, rangeName).values;
if (!values) {
Logger.log('No data found.');
} else {
var resultArray = [];
for (var row = 0; row < values.length; row++) {
var jsonRecord = {
'id': values[row][0],
'name': values[row][1],
'nameJP': values[row][2],
'description': values[row][3],
'usage': values[row][4]
}
resultArray.push(jsonRecord);
}
return resultArray;
}
}
function doGet(e){
var result = JSON.stringify({'vitals': getVitalDatas()});
return ContentService.createTextOutput(result).setMimeType(ContentService.MimeType.JSON);
}
Swift 소스 코드
받는 쪽으로서 Vital
형과 그것을 랩핑 한 Result
형을 정의하고 있습니다.
Result형에 디코드한 값을 vitals로서, 문제 없이 취득할 수 있었는지 확인합니다.
APIRequest.swiftimport Foundation
struct APIRequest {
static let mainAPIHost: String = "https://script.google.com/macros/s/AKf****************swg/exec"
static func getSheetData(){
var request = URLRequest(url: URL(string: mainAPIHost)!)
request.httpMethod = "GET"
let task = URLSession.shared.dataTask(with: request) { data, response, error in
guard let jsonData = data else { return }
struct Result: Codable {
var vitals: [Vital]
}
do {
let vitals = try JSONDecoder().decode(Result.self, from: jsonData)
print(vitals)
} catch {
print(error.localizedDescription)
}
}
task.resume()
}
}
struct Vital: Codable {
var id: String
var name: String
var nameJP: String
var description: String
var usage: String
}
iOS 앱 측에서 데이터 획득 확인
디버그 로그 화면에, Vital형 형식에 매핑 되어 그것을 배열로 하는 Result형을 취득 할 수 있는 것을 확인할 수 있습니다.
끝에
이 응용 프로그램은 EvangVitalData
로 나중에 AppStore에 게시 될 예정입니다.
생체 데이터의 확인 테스트를 할 수 있으므로 만약 보면 놀아보세요.
import Foundation
struct APIRequest {
static let mainAPIHost: String = "https://script.google.com/macros/s/AKf****************swg/exec"
static func getSheetData(){
var request = URLRequest(url: URL(string: mainAPIHost)!)
request.httpMethod = "GET"
let task = URLSession.shared.dataTask(with: request) { data, response, error in
guard let jsonData = data else { return }
struct Result: Codable {
var vitals: [Vital]
}
do {
let vitals = try JSONDecoder().decode(Result.self, from: jsonData)
print(vitals)
} catch {
print(error.localizedDescription)
}
}
task.resume()
}
}
struct Vital: Codable {
var id: String
var name: String
var nameJP: String
var description: String
var usage: String
}
디버그 로그 화면에, Vital형 형식에 매핑 되어 그것을 배열로 하는 Result형을 취득 할 수 있는 것을 확인할 수 있습니다.
끝에
이 응용 프로그램은 EvangVitalData
로 나중에 AppStore에 게시 될 예정입니다.
생체 데이터의 확인 테스트를 할 수 있으므로 만약 보면 놀아보세요.
Reference
이 문제에 관하여(GAS를 API 서버로 사용하여 iOS 앱에서 직접 스프레드시트 데이터를 가져옵니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/saenuruki/items/01f713b14ea632e606e0텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)