这是需要验证的测试用例之一。
- 有人通过应用设置从Facebook中移除您的应用并重新访问您的应用。您的应用应检测到此并提示该人 重新登录。转到您的应用并点按“使用Facebook登录” 按钮点击“确定”接受读取权限(再次单击“确定”接受 在适用的情况下写入权限)转到Facebook上的应用程序设置 删除您的应用程序重复步骤1-2并验证Facebook登录是否正常工作
醇>
我发现无法实现这一目标。当我在Facebook中删除应用程序时,我的iOS仍然认为会话有效。在Stackoverflow上似乎有一个discussion这个问题。但提供的解决方案似乎不起作用。
这是我到目前为止登录的内容。但我无法检测用户何时删除了Facebook上的应用程序。有什么建议吗?
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
if (FBSession.activeSession.state == FBSessionStateCreatedTokenLoaded) {
NSLog(@"Found a cached session");
// If there's one, just open the session silently, without showing the user the login UI
[FBSession openActiveSessionWithReadPermissions:@[@"public_profile"]
allowLoginUI:NO
completionHandler:^(FBSession *session, FBSessionState state, NSError *error) {
// Handler for session state changes
// This method will be called EACH time the session state changes,
// also for intermediate states and NOT just when the session open
[self sessionStateChanged:session state:state error:error];
}];
// If there's no cached session, we will show a login button
} else {
UIButton *loginButton = [self.customLoginViewController loginButton];
[loginButton setTitle:@"Log in with Facebook" forState:UIControlStateNormal];
}
}
- (void)sessionStateChanged:(FBSession *)session state:(FBSessionState) state error:(NSError *)error
{
// If the session was opened successfully
if (!error && state == FBSessionStateOpen){
NSLog(@"Session opened");
// Show the user the logged-in UI
[self userLoggedIn];
return;
}
if (state == FBSessionStateClosed || state == FBSessionStateClosedLoginFailed){
// If the session is closed
NSLog(@"Session closed");
// Show the user the logged-out UI
[self userLoggedOut];
}
}
答案 0 :(得分:0)
如果用户进入Facebook设置并删除了该应用,则Facebook会发布到您在应用设置中设置的“取消授权回拨网址”。这将包括与画布应用程序相同的签名请求,因此您可以从那里获取ID并执行任何操作以跟踪该用户已删除您的应用程序。
答案 1 :(得分:0)
正如@Tom Kincaid所说,您可以使用取消授权回调机制来接收从FB到您的后端端点之一的呼叫。请参阅https://developers.facebook.com/docs/facebook-login/manually-build-a-login-flow/v2.1#deauth-callback
上的文档您可以将user_ids存储在单独的表中,或者在现有用户表或对象结构中具有删除标记。
然后,您的应用可以在加载时检查用户是否仍处于“有效”状态,或者标记为已删除应用,并采取相应措施。