Facebook sdk 3.5 请求不起作用
Posted
技术标签:
【中文标题】Facebook sdk 3.5 请求不起作用【英文标题】:Facebook sdk 3.5 requests not working 【发布时间】:2013-06-04 07:06:56 【问题描述】:在 Facebook SDK 3.5 中,我尝试使用以下代码发送应用请求
NSMutableDictionary* params = [NSMutableDictionary dictionaryWithObjectsAndKeys:nil];
[FBWebDialogs presentRequestsDialogModallyWithSession:nil
message:@"Join"
title:nil
parameters:params
handler:^(FBWebDialogResult result, NSURL *resultURL, NSError *error)
if (error)
NSLog(@"request error");
else
if (result == FBWebDialogResultDialogNotCompleted)
NSLog(@"request FBWebDialogResultDialogNotCompleted");
else if([[resultURL description] hasPrefix:@"fbconnect://success?request="])
// Facebook returns FBWebDialogResultDialogCompleted even user
// presses "Cancel" button, so we differentiate it on the basis of
// url value, since it returns "Request" when we ACTUALLY
// completes Dialog
NSLog(@"request success");
else
// User Cancelled the dialog
NSLog(@"request cancelled");
];
如果我将上述代码与 Facebook 示例 FacebookAppID、URL 类型、FacebookDisplayName 一起使用,它工作正常。
但是,如果我提供自己的 acebookAppID、URL 类型、FacebookDisplayName,则通知不会发送。 任何帮助表示赞赏....
【问题讨论】:
嗨,请检查您的 acebookAppID 并在它写过的每个地方更改它 查看此链接并根据它设置***.com/questions/16052078/… @chandan 在设置中我没有指定 BundleID 会有问题吗?我现在没有分发证书...所以我没有指定。 如果没有 BundleID,您将无法实现它,因为您需要 appId。每当您发出任何请求时,此请求都会创建一个 url 以及此 bundle-id 以及 appid。因此,创建一个有效的应用程序 ID,然后再进一步。谢谢 我可以为此目的使用开发证书吗 【参考方案1】:我已经在设置中配置了“Facebook 上的应用”和“原生 ios 应用”配置,现在通知正在发送到 iOS 和 Web App(facebook)。
如果通知没有发送到 iOS Goto App--> Edit Settings--> App Details 并根据您的需要将类别更改为游戏/业务。现在通知将发送到您的桌面 Facebook 以及 iOS。
我也尝试过“原生 android 应用”配置来将通知发送到桌面、iOS 和 android,但目前还没有运气。我认为android设置有问题。如果有人有答案,请告诉我。
【讨论】:
【参考方案2】:试试这个:-
1.>首先通过关注Facebook url 在 facebook 上设置您的应用程序。
2.>然后使用此代码并根据您的要求进行修改。
-(void)inviteFriends
if ([[FBSession activeSession] isOpen])
NSMutableDictionary* params = [NSMutableDictionary dictionaryWithObjectsAndKeys:nil];
[FBWebDialogs presentRequestsDialogModallyWithSession:nil
message:@"put your message here"
title:nil
parameters:params
handler:^(FBWebDialogResult result, NSURL *resultURL, NSError *error)
if (error)
[self requestFailedWithError:error];
else
if (result == FBWebDialogResultDialogNotCompleted)
[self requestFailedWithError:nil];
else if([[resultURL description] hasPrefix:@"fbconnect://success?request="])
// Facebook returns FBWebDialogResultDialogCompleted even user
// presses "Cancel" button, so we differentiate it on the basis of
// url value, since it returns "Request" when we ACTUALLY
// completes Dialog
[self requestSucceeded];
else
// User Cancelled the dialog
[self requestFailedWithError:nil];
];
else
/*
* open a new session with publish permission
*/
[FBSession openActiveSessionWithPublishPermissions:[NSArray arrayWithObject:@"publish_stream"]
defaultAudience:FBSessionDefaultAudienceFriends
allowLoginUI:YES
completionHandler:^(FBSession *session, FBSessionState status, NSError *error)
if (!error && status == FBSessionStateOpen)
NSMutableDictionary* params = [NSMutableDictionary dictionaryWithObjectsAndKeys:nil];
[FBWebDialogs presentRequestsDialogModallyWithSession:nil
message:[self getInviteFriendMessage]
title:nil
parameters:params
handler:^(FBWebDialogResult result, NSURL *resultURL, NSError *error)
if (error)
[self requestFailedWithError:error];
else
if (result == FBWebDialogResultDialogNotCompleted)
[self requestFailedWithError:nil];
else if([[resultURL description] hasPrefix:@"fbconnect://success?request="])
// Facebook returns FBWebDialogResultDialogCompleted even user
// presses "Cancel" button, so we differentiate it on the basis of
// url value, since it returns "Request" when we ACTUALLY
// completes Dialog
[self requestSucceeded];
else
// User Cancelled the dialog
[self requestFailedWithError:nil];
];
else
[self requestFailedWithError:error];
];
请检查您的应用检查权限。如果未分配权限,请在您的应用中分配您想要的任何权限
NSMutableDictionary* params = [NSMutableDictionary dictionaryWithObjectsAndKeys:/*assign permission here*/ nil];
这里是调用委托函数 OnFBSuccess 和 OnFBFailed 的辅助函数。
- (void)requestSucceeded
NSLog(@"requestSucceeded");
id owner = [fbDelegate class];
SEL selector = NSSelectorFromString(@"OnFBSuccess");
NSMethodSignature *sig = [owner instanceMethodSignatureForSelector:selector];
_callback = [NSInvocation invocationWithMethodSignature:sig];
[_callback setTarget:owner];
[_callback setSelector:selector];
[_callback retain];
[_callback invokeWithTarget:fbDelegate];
- (void)requestFailedWithError:(NSError *)error
NSLog(@"requestFailed");
id owner = [fbDelegate class];
SEL selector = NSSelectorFromString(@"OnFBFailed:");
NSMethodSignature *sig = [owner instanceMethodSignatureForSelector:selector];
_callback = [NSInvocation invocationWithMethodSignature:sig];
[_callback setTarget:owner];
[_callback setSelector:selector];
[_callback setArgument:&error atIndex:2];
[_callback retain];
[_callback invokeWithTarget:fbDelegate];
So the class taht calls method InviteFriend MUST have these functions:
-(void)OnFBSuccess
CCLOG(@"successful");
// do stuff here
[login release];
-(void)OnFBFailed:(NSError *)error
if(error == nil)
CCLOG(@"user cancelled");
else
CCLOG(@"failed");
// do stuff here
// [login release];
- (void)requestFailedWithError:(NSError *)error
if(error == nil)
CCLOG(@"user cancelled");
else
CCLOG(@"failed");
希望对你有帮助。
【讨论】:
如果是权限问题,为什么它适用于 FacebookAppID。我们有什么权限发布请求?? @durga.chotu ,首先检查有效的应用程序ID。如果您的应用程序 ID 正确,则可能是权限问题。 @chandan 为 FriendRequest 授予哪些权限?? 嗨 @AppleMap ,我们将通过会话传递的是 publish_stream 权限。打开一个具有发布权限的新会话,允许用户在他或她的墙上发帖。以上是关于Facebook sdk 3.5 请求不起作用的主要内容,如果未能解决你的问题,请参考以下文章
IOS Facebook好友邀请在facebook sdk中不起作用
iOS - Facebook SDK allowLoginUI 不起作用