Pre*_*ani 14 facebook facebook-graph-api ios facebook-sdk-4.0
我正在整合FacebookSDK 4.x与自定义UI的集成,并使用以下方法登录并获得用户的电子邮件权限.
FBSDKLoginManager *login = [[FBSDKLoginManager alloc] init];
[login logInWithReadPermissions:@[@"email"] handler:^(FBSDKLoginManagerLoginResult *result, NSError *error) {
if (error){
NSLog(@"%@",[error localizedDescription]);
}
else if (result.isCancelled){
NSLog(@"Cancled");
}
else
{
if ([result.grantedPermissions containsObject:@"email"])
{
NSLog(@"Granted all permission");
if ([FBSDKAccessToken currentAccessToken])
{
[[[FBSDKGraphRequest alloc] initWithGraphPath:@"me" parameters:nil] startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error)
{
if (!error)
{
NSLog(@"%@",result);
}
}];
}
}
else
{
NSLog(@"Not granted");
}
}
}];
Run Code Online (Sandbox Code Playgroud)
除非用户拒绝访问"电子邮件",否则这很有效.我在FacebookSDK文档中看到,我可以重新请求访问用户的电子邮件一次.根据FB文档:在此链接中给出
If someone has declined a permission for your app, the login dialog won't let your app re-request the permission unless you pass auth_type=rerequest along with your request.
Run Code Online (Sandbox Code Playgroud)
启用重新身份验证
在您选择的登录流程中,我们向您展示了如何使用登录对话框和OAuth对某人进行身份验证并从中请求权限.要重新进行身份验证,您可以使用这些相同的步骤和其他参数来强制执行:
auth_type:此参数指定请求的身份验证功能(以逗号分隔的列表).有效选项包括:https - 检查是否存在安全的Facebook会话,并要求重新验证(如果不存在重新验证) - 要求此人无条件地重新进行身份验证
Run Code Online (Sandbox Code Playgroud)auth_nonce: includes an app generated alphanumeric nonce which can be used to provide replay protection. See how to check an auth_nonce更多.
以下是使用JavaScript SDK的示例,该SDK使用auth_type of reauthenticate触发重新身份验证:
FB.login(函数(响应){//原始FB.login代码},{auth_type:'reauthenticate'})
请注意,响应的主体包含您指定的auth_type参数,例如:
=的access_token&USER_ACCESS_TOKEN期满= SECONDS_UNTIL_TOKEN_EXPIRES&AUTH_TYPE =重新验证
如何通过iOS SDK将"auth_type = rerequest"传递给Facebook的服务器?那有什么特别的方法吗?
Pre*_*ani 15
我通过回忆方法解决了问题:
[login logInWithReadPermissions:@ [@"email"] handler:^(FBSDKLoginManagerLoginResult*result,NSError*error)
我需要再次请求时传递auth_type:'rerequest',我在这个方法的文档中得到它我得到描述:
在要求读取权限时使用此方法.您应该只在需要时请求权限并向用户解释该值.您可以检查result.declinedPermissions,以便在用户拒绝权限时向用户提供更多信息.
如果
[FBSDKAccessToken currentAccessToken]不是nil,则将其视为该用户的重新授权,并将"rerequest"标志传递给登录对话框.
只是问题是我正在调用FbSDKLoginManager类的logout方法.这将清除令牌,它将把它作为旧权限而不是重新请求的权限.
| 归档时间: |
|
| 查看次数: |
5378 次 |
| 最近记录: |