【问题标题】:iOS Facebook web share api - how to tell if the user has hit skipiOS Facebook 网络共享 api - 如何判断用户是否点击了跳过
【发布时间】:2014-02-11 07:47:06
【问题描述】:

我有一个带有按钮的 VC,用于在 Facebook 上分享一些文本和图像 url。

我使用 FB api 打开 FB webview - 供用户登录。然后它会显示带有“跳过”或“共享”按钮的共享窗口,如图所示...

我的应用程序中有以下代码来处理登录和按钮操作.... 出于某种原因,“跳过”也会发布,就好像“确定”被击中一样。我尝试检查使用错误实用程序返回的错误代码,但这不起作用(应用程序永远不会进入该代码部分,并且即使我点击跳过按钮,NSLog 也永远不会登录“取消”)

对此的任何帮助将不胜感激。或许可以通过某种方式重新检查权限?

(void)postStatusUpdate:(id)status
{
    if (FBSession.activeSession.state != FBSessionStateCreatedTokenLoaded || [FBSession.activeSession.permissions
                                                                              indexOfObject:@"publish_actions"] == NSNotFound) {
        // Permission hasn't been granted, so ask for publish_actions
        [FBSessionopenActiveSessionWithPublishPermissions:@[@"publish_actions"]
                   defaultAudience:FBSessionDefaultAudienceFriends
                        allowLoginUI:YES
                        completionHandler:^(FBSession *session, FBSessionState state, 
                                            NSError *error) {
                             [selfsessionStateChanged:session state:state error:error];

                              if([FBErrorUtilityerrorCategoryForError:error] ==
FBErrorCategoryUserCancelled)
                              {
                                   NSLog(@"SNFacebookClient: CANCELLED OUT!!");
                              }
                              if (FBSession.activeSession.isOpen && !error) {
                                   // Publish the story if permission was granted
                                   [selfpublishStory:status];
                              }
         }];
    } else {
        // If permissions present, publish the story
        [selfpublishStory:status];
    }
}

代码在这里

我什至尝试在 lldb 中检查按下“跳过”后的权限数组...

po [FBSession activeSession].permissions 

发现即使按下跳过,数组也包含条目“publish_actions”

【问题讨论】:

    标签: ios objective-c facebook error-handling


    【解决方案1】:

    需要查看会话状态,如果状态为FBSessionStateOpenFBSessionStateCreatedTokenLoaded,则可以获取用户数据。 否则,会发生错误或用户跳过它。

    这个方法你不一样,查看我的短cmets你了解步骤。

        // Suppose my FBSession is stored in a property called session
        @property (nonatomic, strong) FBSession *session;
    
        // The session getter can be implemented like this
    
        - (FBSession *)session
        {
            if(!_session)
            {
                _session = [[FBSession alloc] initWithPermissions:readPermissions];
                [FBSession setActiveSession:_session];
            }
    
            return _session;
        }
    
    
    
        // Opening a new session 
        [self.session openWithCompletionHandler:^(FBSession *session, FBSessionState status, NSError *error) {
                [self session:session stateChanged:status error:error];
            }];
    
    
        - (void)session:(FBSession *)session stateChanged:(FBSessionState)state error:(NSError *)error
        {
            switch(state)
            {
                case FBSessionStateOpen:
                {
                    // Connection accepted
                }
                break;
    
                case FBSessionStateCreatedTokenLoaded:
                {
                    // Connection restored
                }
                break;
    
                case FBSessionStateClosed:
                    // Connection closed
                    break;
    
                case FBSessionStateClosedLoginFailed:
                {
                    // Connection failed and closed
                }
                break;
    
                case FBSessionStateCreated:
                {
                    // Session created (not opened yet)
                }
                break;
    
                case FBSessionStateCreatedOpening:
                    // Handler it if you need to do something while connection is opening
                    break;
    
                case FBSessionStateOpenTokenExtended:
                    // Session token extended
                    break;
            }
        }
    

    【讨论】:

    • 谢谢扬!我会试试这个,让你知道它是否有效
    • 您的注释说“如果状态为 FBSessionStateOpen 或 FBSessionStateOpen,您可以获取用户的数据”——这是拼写错误吗?看来您建议检查两种可能的状态,但您已经两次列出相同的状态 (FBSessionStateOpen)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-18
    • 1970-01-01
    • 1970-01-01
    • 2011-03-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多