我正在开发一个在线SharePoint应用程序,并希望在我的ios应用程序中使用SharePoint Rest界面。有人可以告诉我在iOS中使用SharePoint Rest接口的步骤
答案 0 :(得分:1)
我明白了,下面是要遵循的步骤:
在您的ios应用中包含RestKit。
在主屏幕中创建UIView并加载登录页面。
在UIWebView中加载http://服务器名称/ Pages / default.aspx
在webViewDidFinished方法中找出Fed Auth令牌并将其附加到请求URL
- (void)webViewDidFinishLoad:(UIWebView *)webView {
//Retrive HTTPOnly Cookie
NSHTTPCookieStorage *storage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
NSArray *cookiesArray = [storage cookies];
//Search for Fed Auth cookie
for (NSHTTPCookie *cookie in cookiesArray) {
if ([[cookie name] isEqualToString:@"FedAuth"]) {
/*** DO WHATEVER YOU WANT WITH THE COOKIE ***/
NSLog(@"Found FedAuth");
NSURL *url=[NSURL URLWithString:@"http://my server/_vti_bin/listdata.svc"];
RKClient *client = [RKClient clientWithBaseURL:url];
client.requestQueue.requestTimeout = 10;
client.cachePolicy = RKRequestCachePolicyNone;
client.authenticationType = RKRequestAuthenticationTypeHTTPBasic;
client.username = @"username";
client.password = @"Password";
NSString *cookieVale=[cookie value];
NSString *getResourcePath=[@"?" stringByAppendingFormat:@"%@",cookieVale];
[client get:getResourcePath delegate:self];
break;
}
}
}
在这里你可以找到答案。
- (void)request:(RKRequest *)request didLoadResponse:(RKResponse *)response {
id xmlParser = [[RKParserRegistry sharedRegistry] parserForMIMEType:RKMIMETypeXML];
NSError *error = nil;
id parsedResponse = [xmlParser objectFromString:[response bodyAsString] error:&error];
RKLogInfo(@"Parsed response : %@, error:%@",parsedResponse,error);
if ([response isSuccessful]) {
NSLog(@"%d",[response isCreated]);
// Response status was 200..299
if ([response isCreated] && [response isJSON]) {
// Looks like we have a 201 response of type application/json
RKLogInfo(@"The JSON is %@", [response bodyAsJSON]);
}
} else if ([response isError]) {
// Response status was either 400..499 or 500..599
RKLogInfo(@"Ouch! We have an HTTP error. Status Code description: %@", [response localizedStatusCodeString]);
}
}
答案 1 :(得分:1)
自我接受的答案让我失去了大量的试验和错误。它省略了一些关键方面,比如你还需要获取rtFa cookie。什么是client.username = @"用户名"和client.password = @"密码"在用户代码中提供。那是什么?请注意,客户端随时都不知道用户名或密码......
AAAnyway,下面是一篇很棒的文章,它将引导您朝着正确的方向前进: http://www.codeproject.com/Articles/571996/Development-of-iPhone-client-application-for-Share
这描述了如何在不使用UIWebView的情况下获取cookie http://allthatjs.com/2012/03/28/remote-authentication-in-sharepoint-online/
答案 2 :(得分:0)
发送FedAuth cookie以及随后的所有请求。
经过身份验证后,您可以在此处调用REST API,文档: http://msdn.microsoft.com/en-us/library/fp142385(v=office.15).aspx#bk_determining
答案 3 :(得分:0)
当用户完成对Office365 Sharepoint实例的登录过程时,Web视图将分几个步骤重定向。作为加载实际Sharepoint网站之前的最后一步,将要求Web视图加载“about:blank”。
检测网页视图何时开始加载“about:blank”,您知道用户何时完成登录过程并可以关闭网络视图。下面的示例代码。
// Load page in web view
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
NSLog(@"WebView should start loading %@", request.URL.absoluteString);
// Detect that the user finished the sign in process
if ([request.URL.absoluteString isEqualToString:@"about:blank"]) {
// Do your stuff here
return NO;
}
return YES;
}
如果身份验证成功,Sharepoint实例还将设置FedAuth cookie。 cookie必须包含在将来对服务器的请求中。
您不必手动附加cookie,只要cookie已被接受并存储在NSHTTPCookieStorage中并且您将请求发送到同一服务器,这将由URL加载系统处理。
来自Apple文档
URL加载系统自动发送任何存储的cookie 适合NSURLRequest。除非请求指定不 发送cookies。同样,在NSURLResponse中返回的cookie也是 根据目前的cookie接受政策接受。