比較的問題の少ない別のプロジェクトでFacebookConnectを使用しましたが、現在のプロジェクトでは、呼び出し[facebook logout];
てもユーザーの詳細が削除されないようです。その後、アプリを再起動すると、didFinishLaunchingWithOptions関数に次のようになります。
facebook = [[Facebook alloc] initWithAppId:@"XXXXXXXXXXXXX" andDelegate:self];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
if([defaults objectForKey:@"FBAccessTokenKey"]
&& [defaults objectForKey:@"FBExpirationDateKey"]){
facebook.accessToken = [defaults objectForKey:@"FBAccessTokenKey"];
facebook.expirationDate = [defaults objectForKey:@"FBExpirationDateKey"];
}
NSLog(@"startup login");
[self loginToFacebook];//attempt to login automatically on startup
私のloginToFacebook関数はこれです:
- (void)loginToFacebook
{
NSLog(@"Logging into facebook");
//set up facebook and login in automatically if possible
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
if([defaults objectForKey:@"FBAccessTokenKey"]
&& [defaults objectForKey:@"FBExpirationDateKey"]){
facebook.accessToken = [defaults objectForKey:@"FBAccessTokenKey"];
facebook.expirationDate = [defaults objectForKey:@"FBExpirationDateKey"];
}
if (![facebook isSessionValid]){
//get permissions that user will need to agree to us using
NSArray *permissions = [[NSArray alloc] initWithObjects:
@"user_likes",@"read_friendlists",@"offline_access", @"publish_stream",
nil];
//authorise our login
[facebook authorize:permissions];
[permissions release];
}
else
{
[facebook authorize:nil];
}
}
私に関する限り、今回は自分の電子メールとパスワードを使用してログインするように求められるはずです。私は主にシミュレーターを使用しているので、Facebookアプリ自体は原因ではなく、Facebook.hクラスで変更しました
[self authorizeWithFBAppAuth:NO safariAuth:YES];
に
[self authorizeWithFBAppAuth:NO safariAuth:NO];
ただし、Facebookウィンドウが一時的に点滅して消えます。これは、すでにログインしているときに予想されるとおりです。次に、以前のログインの詳細からID、名前、友達リストなどが読み込まれます。ユーザーを変更することはできなくなりました。'logout'に応じて出力する次のコードがあることを追加する必要があります。
- (void)fbDidLogout{
NSLog(@"Logged out of facebook");
}
...[facebooklogout]が呼び出されたときにコンソールに出力されます。また、正しいURLスキームを使用しているので、問題はありません。
私が言ったように、私はこれを別のアプリで動作させていますが、今回は見落としていたものがわかりません。ばかばかしいほど単純なものだと思うので、どんな提案も歓迎します。
編集:デバイスでテストしたところ、Facebookにログインしようとするとアプリがクラッシュします。「保存された」情報を使用してログインしようとしているためだと思われますが、デバイスにまだログインしていないため、この情報は存在しません。私はまだ調査中ですが、明らかな欠陥が見られる場合は、非常に感謝しています。
Edit2:セーフケースの例を使用してCookieを削除してみました。また、a)didFinishLaunchingWithOptionsおよびb)fbDidLogout中にすべてのCookieを印刷すると、次のようになります。
a) `2012-05-18 10:40:40.665 MyApp [15545:17003](" "、
"<NSHTTPCookie version:0 name:\"c_user\" value:\"634361620\" expiresDate:2012-06-17 09:34:33 +0000 created:2012-05-18 09:34:34 +0000 (3.59026e+08) sessionOnly:FALSE domain:\".facebook.com\" path:\"/\" isSecure:TRUE>",
"<NSHTTPCookie version:0 name:\"csm\" value:\"2\" expiresDate:2012-06-17 09:34:33 +0000 created:2012-05-18 09:34:34 +0000 (3.59026e+08) sessionOnly:FALSE domain:\".facebook.com\" path:\"/\" isSecure:FALSE>",
"<NSHTTPCookie version:0 name:\"datr\" value:\"gxe2T8ZyBzMGb5w3LS29Q0kJ\" expiresDate:2014-05-18 09:34:33 +0000 created:2012-05-18 09:34:34 +0000 (3.59026e+08) sessionOnly:FALSE domain:\".facebook.com\" path:\"/\" isSecure:FALSE>",
"<NSHTTPCookie version:0 name:\"locale\" value:\"en_US\" expiresDate:2012-05-25 09:36:43 +0000 created:2012-05-18 09:36:44 +0000 (3.59027e+08) sessionOnly:FALSE domain:\".facebook.com\" path:\"/\" isSecure:FALSE>",
"<NSHTTPCookie version:0 name:\"lu\" value:\"RgayA7CMIlsAl-lOD2-Y-O3g\" expiresDate:2014-05-18 09:34:33 +0000 created:2012-05-18 09:34:34 +0000 (3.59026e+08) sessionOnly:FALSE domain:\".facebook.com\" path:\"/\" isSecure:FALSE>",
"<NSHTTPCookie version:0 name:\"m_user\" value:\"0%3A0%3A0%3A0%3Av_1%2Cajax_1%2Cwidth_320%2Cpxr_1%2Cgps_1%3A1337333673%3A2\" expiresDate:2012-08-16 09:34:33 +0000 created:2012-05-18 09:34:34 +0000 (3.59026e+08) sessionOnly:FALSE domain:\".facebook.com\" path:\"/\" isSecure:FALSE>",
"<NSHTTPCookie version:0 name:\"s\" value:\"Aa4WdKU-oOFathmK\" expiresDate:2012-06-17 09:34:33 +0000 created:2012-05-18 09:34:34 +0000 (3.59026e+08) sessionOnly:FALSE domain:\".facebook.com\" path:\"/\" isSecure:TRUE>",
"<NSHTTPCookie version:0 name:\"xs\" value:\"125%3AFFIWXjAXDXUMmw%3A2%3A1337333673\" expiresDate:2012-06-17 09:34:33 +0000 created:2012-05-18 09:34:34 +0000 (3.59026e+08) sessionOnly:FALSE domain:\".facebook.com\" path:\"/\" isSecure:TRUE>"
)`
b)
2012-05-18 10:41:16.530 MyApp[15545:17003] (
)
空に変わるので削除されたと思います。しかし、アプリを再度開くと、それらはすべて再びそこにあります。
Edit3:これを回避する唯一の方法は、アプリケーションが開いたらすぐにすべてのCookieを削除することです。ただし、これは、ユーザーが最後にアプリを開いたときにログインしたままにした場合でも、毎回ログインする必要があることを意味します。これは今のところ一時的な修正ですが、なぜ正常に機能しないのかはまだわかりません。