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 不起作用

Facebook 登录在 IOS SDK 中不起作用

Facebook iOS SDK 登录不起作用 - NSException

iOS上的Facebook SDK共享不起作用

Android - Facebook SDK - FriendPicker setSelected 不起作用