Ios 即使从Facebook应用程序设置中删除应用程序,用户也可以访问应用程序
我有一个同时使用Parse和FacebookSDK的应用程序。目前遇到的问题是,用户即使在进入其Facebook帐户应用程序设置并从访问其Facebook数据中删除我的应用程序时,仍然能够访问我的应用程序 所以:Ios 即使从Facebook应用程序设置中删除应用程序,用户也可以访问应用程序,ios,swift,facebook-login,facebook-sdk-4.0,Ios,Swift,Facebook Login,Facebook Sdk 4.0,我有一个同时使用Parse和FacebookSDK的应用程序。目前遇到的问题是,用户即使在进入其Facebook帐户应用程序设置并从访问其Facebook数据中删除我的应用程序时,仍然能够访问我的应用程序 所以: 1:新用户重新安装。 2:用户通过Facebook登录并访问应用程序注册 3:用户进入Facebook.com>应用程序设置>删除我的应用程序 4:回到iPhone,用户关闭应用程序,重新打开并再次获得访问权限 在这里,我检查用户的当前状态,如果他们持有currentAccessTok
1:新用户重新安装。
2:用户通过Facebook登录并访问应用程序注册
3:用户进入Facebook.com>应用程序设置>删除我的应用程序
4:回到iPhone,用户关闭应用程序,重新打开并再次获得访问权限 在这里,我检查用户的当前状态,如果他们持有
currentAccessToken
override func viewDidLoad() {
super.viewDidLoad()
if FBSDKAccessToken.currentAccessToken() != nil{
moveToNextView() //Segue to next viewController
}
}
和我的AppDelegate.swift
:
import UIKit
import Parse
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject : AnyObject]?) -> Bool {
Parse.setApplicationId("ID", clientKey:"KEY")
PFFacebookUtils.initializeFacebookWithApplicationLaunchOptions(launchOptions)
FBSDKProfile.enableUpdatesOnAccessTokenChange(true)
return FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions)
}
func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject?) -> Bool {
return FBSDKApplicationDelegate.sharedInstance().application(application, openURL: url, sourceApplication: sourceApplication, annotation: annotation)
}
}
我猜
currentAccessToken
缓存在应用程序或设备的某个位置,但不确定如何清除/刷新该缓存。我找到了解决此问题的方法。这并不像人们想象的那么直截了当。Facebook开发者控制台允许您设置取消授权回调URL,可在此处找到:
<?php
function parse_signed_request($signed_request) {
list($encoded_sig, $payload) = explode('.', $signed_request, 2);
$secret = "appsecret"; // Use your app secret here
// decode the data
$sig = base64_url_decode($encoded_sig);
$data = json_decode(base64_url_decode($payload), true);
// confirm the signature
$expected_sig = hash_hmac('sha256', $payload, $secret, $raw = true);
if ($sig !== $expected_sig) {
error_log('Bad Signed JSON signature!');
return null;
}
return $data;
}
$signed_request = $_POST['signed_request'];
$data = parse_signed_request($signed_request);
$user_id = $data['user_id'];
//now use the user_id to look up your user in your database
//update a field called deauthorized to true so that you
//can check this value upon next login
?>
希望这能对将来的人有所帮助。嗨,凯尔,你能想出解决办法吗?我也面临着同样的问题,我想知道如果浏览器中的内容发生了变化,应用程序将如何得到通知。有趣的是,facebook记录了这一点,在第5点中说“有人通过应用程序设置从facebook删除了你的应用程序,并重新访问了你的应用程序。你的应用程序应该检测到这一点,并提示该人重新登录。”但我不知道当currentAccessToken保持有效时,我们应该如何检测到这一点。如果我能想出如何解决这个问题,我会回来回答这个问题。
- (void)viewDidLoad
{
[super viewDidLoad];
if ([FBSDKAccessToken currentAccessToken]) {
// User is logged in, but they may have
// removed the app so we have to check our
// db using a REST API call to see if is deauthorized
// If the user has deauthorized then log them out
// send them back to the login/signup page
// if not, carry on as usual
//also don't forget to set the deauthorized value to 0
//whenever a user successfully logs into facebook
}
}