仅在必要时允许iOS应用程序用户通过Facebook进行身份验证

时间:2012-06-22 16:15:35

标签: ios facebook facebook-graph-api facebook-authentication facebook-ios-sdk

我有一个iPhone应用程序,允许用户录制视频,我希望他们能够在Facebook上分享这些视频。

但是,除非用户决定分享,否则我不希望他/她被重定向到Facebook。我已经尝试过Facebook iOS教程中提供的方法,它要求用户重定向到Facebook并在应用启动后立即进行身份验证。

这是不必要的。

我想要做的是拥有一个“分享”按钮,该按钮允许用户进行身份验证,然后使用POST请求立即自动上传视频。

这可能吗?有没有人取得类似的效果?

感谢。

3 个答案:

答案 0 :(得分:3)

我不确定您正在查看哪个教程,但它可能让您在启动时作为演示进行身份验证。

在您的应用中,您可以在保存视频后通过类似的方式授权您的应用

// Share button action
- (IBAction)sharePressed {

    // If user is already authenticated
    if ([facebook isSessionValid]) {
        [self shareLinkToFacebook];
    } else {
    // Authenticate with just email permissions            
        NSArray* permissions = [NSArray arrayWithObjects:
                                @"email", nil];

        [facebook setSessionDelegate:self];
        [facebook authorize:permissions];  
    }
}

- (void) shareLinkToFacebook {

    // Create a simple post
    NSMutableDictionary *params = [[NSMutableDictionary alloc] init];

    [params setValue:[video url] forKey:@"link"];

    [params setValue:[video title] forKey:@"name"];
    [params setValue:@"description" forKey:@"description"];

    [facebook dialog:@"feed" andParams:params andDelegate:self];
}

// FBSessionDelegate
- (void) fbDidLogin {
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [defaults setObject:[facebook accessToken] forKey:kFBAccessToken];
    [defaults setObject:[facebook expirationDate] forKey:kFBExpirationDateKey];
    [defaults synchronize];

    [self shareLinkToFacebook];
}

你将不得不通过Facebook进行身份验证以获取访问密钥 - 没有办法解决这个问题。

答案 1 :(得分:0)

你无法做你想做的事。要发布内容,您必须拥有有效的access_token。实现此目的的唯一方法是遵循您在官方示例中看到的登录过程。

答案 2 :(得分:0)

这个问题的答案在于创建一个同时作为FBSessionDelegateFBRequestDelegate运行的单例,并允许您在程序周围传递Facebook的一个实例。

我打电话给我的单身FacebookVideoUploader,在我的app委托中,我打电话给:

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
    return [[[FacebookVideoUploader sharedInstance] facebook] handleOpenURL:url];

就是这样。这使得app委托变得整洁,让单身人员处理委托方法。

在我的视图控制器的实现文件中处理视频上传:

  • (IBAction)shareWithFacebook:(UIButton *)sender { [[FacebookVideoUploader sharedInstance] postVideoToFacebook]; }

就是这样。所有委托和会话方法以及postVideoToFacebook都在FacebookVideoUploader单例中处理。

这样我的用户就可以登录我的应用,而无需重定向到Facebook,并在他们决定分享视频后立即进行身份验证。