我目前正在为RESTful API开发一个带有GAE端点的Swift iOS应用程序。 看起来像所有的教程和文件,使您可以生成和使用客户端库,如果你需要在客户端使用API。 我想知道是否可以使用简单的URL请求或Alamofire使用API,并获得JSON格式的结果?
我有一个使用GAE Python SDK 1.8.3在本地运行的python webservice。 使用Google Cloud Endpoints服务生成器注释API并生成iOS客户端类后,我试图使用它调用远程过程。 如果我使用API Explorertesting我的API,一切正常。 当我使用iOS客户端进行呼叫时,该呼叫被web服务接收,但是该请求不能被正确解码。 这是我第一次使用Endpoints API,所以我不知道什么是错的。 似乎正在发生的事情是,我的请求对象被包装在查询JSON中的“资源”键中。 现在,当我的web服务试图解码它,它会产生一个警告说:“找不到无法识别的字段:资源的变种”。 而且,由于我的对象被封装在这个密钥中,所以它被跳过并且不会被解码成消息。 当使用API Explorer进行调用时,对象不被包装,所以一切正常。 这是我在我的web服务中做的事情: @endpoints.method(SearchRequest, ContactListResponse, path='search', http_method='post', name='api.search') def search(self, request): user = request.user number = request.number 这是我从iOS调用它的方式: GTLMyAPIMessagesSearchRequest * request = [[GTLMyAPIMessagesSearchRequest alloc] init]; request.user = @"+552199881234"; request.number = @"+5521717171"; GTLQueryMyAPI *query = [GTLQueryMyAPI queryForApiSearchWithObject:request]; [service executeQuery:query completionHandler:^(GTLServiceTicket […]
使用Google Plus SDK进行login。 起初一切都很好,但是看起来oauth令牌在大约1个小时之后就会过期。 我正在关注Google网站上的build议和使用情况 [signIn trySilentAuthentication] 在viewDidAppear函数中。 我知道令牌已过期,因为我在服务器上使用Oauth并获得了401响应。 另外值得注意的是,如果iPhone / iPad插入屏幕,这不是一个问题。 在这种情况下,应用程序无限期地工作,没有任何问题。 我的Cloud端点上的身份validation失败。 我正在初始化服务如下: static GTLService *service = nil; if (!service) { service = [[GTLServiceMyModel alloc] init]; service.retryEnabled = YES; [service setAuthorizer: [GPPSignIn sharedInstance].authentication]; } 此外,如果应用程序有一个过期的令牌,我现在的工作就是通过使用iOS应用程序切换器并再次启动应用程序来closures应用程序。 在令牌到期之前,应用程序将再次运行大约一个小时。 有没有人遇到这个问题? 任何帮助将不胜感激!
这个问题是由于我没有完全理解iOS中的静态库,而谷歌的文档似乎有点稀疏。 我正尝试将Google Cloud Endpoints用于我的移动后端。 我为我的客户端库生成.m和.h文件。 然后我创build了一个新项目(OwnItApi),将libGTLTouchStaticLib.a静态库从GTL.proj拖到这个新项目中。 然后将生成的文件.m和.h文件添加到此项目中。 我将所有的.m文件添加到编译源,然后我头文件复制文件。 在“生成设置”中,我将“-ObjC -all_load”添加到“其他链接器标志”项目中。 更新:我忘了提及,我也从GTL.proj复制到OwnItAPI项目的头。 这些包括文件GTLBase64.h,GTLBatchQuery.h,GTLBatchResult,H等。我想我必须这样做,因为没有他们的构build失败。 没有标题,我得到:“GTLObject.h”文件找不到“。 在import声明。 然后,我从这个项目生成的静态库,并将其添加到我的主目标是iPhone应用程序的项目。 为了testing这个API是否工作,我把它添加到了App Delegate中 #import "OwnItApi/GTLServiceOwnit.h" #import "OwnItApi/GTLQueryOwnit.h" #import "OwnItApi/GTLOwnitApiBrands.h" 这是在应用程序中:didFinishLaunchingWithOptions:函数 static GTLServiceOwnit *service = nil; if (!service) { service = [[GTLServiceOwnit alloc] init]; service.retryEnabled = YES; [GTMHTTPFetcher setLoggingEnabled:YES]; } GTLQueryOwnit *query = [GTLQueryOwnit queryForBrandsListWithUserID:@"venkat"]; [service executeQuery:query completionHandler:^(GTLServiceTicket *ticket, GTLOwnitApiBrands *object, NSError […]
我有一个Google Cloud Endpoints API方法如下。 @ApiMethod(name = "setImage", httpMethod = ApiMethod.HttpMethod.POST) public void setImage(HttpServletRequest httpRequest, com.google.appengine.api.users.User appEngineUser, @Named("image") String image) throws IOException, OAuthRequestException, ForbiddenException, com.google.api.server.spi.response.NotFoundException { // Write the image text to a pojo and save the pojo in the datastore. } 我从这个API为iOS和Android生成客户端库。 在这两个移动应用程序中,我都使用相机拍照,必要时从相机重新取样位图,将其压缩为JPEG,并使用数据URIscheme将其编码为string。 在iOS上,这一切工作得很好。 我最终上传了大约436K个字符。 然而,在Android上,我从服务器上得到一个“413(Request Entity Too Large)”的HTTP响应。 这种情况发生,即使我重新采样图像的权利,直到我只发送约39K的JPEG的点。 为什么? Android的堆栈跟踪是这样的。 com.google.api.client.googleapis.json.GoogleJsonResponseException: 413 Request […]