我在使用FBWebDialog时遇到了一个尴尬的行为,同时显示了邀请用户访问我的应用程序(apprequests)的对话框本身。
当对话框出现时,Facebook应用程序打开并停留在那里,如果我回到我的应用程序,对话框仍然应该是打开的。
FBFrictionlessRecipientCache *friendCache = [[FBFrictionlessRecipientCache alloc] init];
[friendCache prefetchAndCacheForSession:nil];
NSMutableDictionary* params = [NSMutableDictionary dictionaryWithObjectsAndKeys: userid, @"to", nil];
[FBWebDialogs
presentRequestsDialogModallyWithSession: nil
message:@"my message"
title:nil
parameters:params
handler:^(FBWebDialogResult result, NSURL *resultURL, NSError *error) {
if (error) {
NSLog(@"Error sending request.");
} else {
if (result == FBWebDialogResultDialogNotCompleted) {
NSLog(@"User canceled request.");
} else {
NSLog(@"Request Sent.");
}
}
} friendCache:friendCache];
感谢。
答案 0 :(得分:0)
我能够找出问题所在。
情况是我的应用是混合的,因此我通过file://
制作HTML
架构。
我正在使用这种方法“桥接”原生功能:
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
AppDelegate *appDelegate =
(AppDelegate *) [[UIApplication sharedApplication] delegate];
NSURL *url = [request URL];
NSLog(@"URL:%@", url);
if ([url.scheme isEqualToString:@"fb"]) {
NSArray *splitUrl = [url.absoluteString componentsSeparatedByString:@"/"];
[self inviteWithUserid:[splitUrl objectAtIndex:3]];
} else if ([url.absoluteString isEqualToString:@"utils://showFriendDialog"]) {
UIAlertView *alert = [[UIAlertView alloc]
initWithTitle:@""
message:@"Você já tem um jogo criado com essa pessoa."
delegate:self
cancelButtonTitle:@"OK"
otherButtonTitles: nil];
[alert show];
[alert release];
}
return YES;
}
我设置字符串fb://
来处理邀请功能。但我不知道fb://
通过Webview委托假定facebook应该打开。
为了解决这个问题,我将shceme更改为fb以外的其他内容:
if ([url.scheme isEqualToString:@"myinviteschema"])
它有效:)