非推奨の Facebook クラスをまだ使用して Facebook に接続しているアプリがあります。拡張アクセス許可なしで承認すると、すべて正常に動作します。しかし、パーミッションを含めた場合、承認するための最初のラウンドトリップは常に失敗します (有効なトークンを取得しても!)。手順がありませんか?
アプリの Facebook 認証を開始するコードは次のとおりです。
- (IBAction) doConnect:(id)sender
{
NSArray* permissions = [NSArray arrayWithObjects:
@"email",@"publish_actions",nil];
[self.facebook authorize:permissions];
}
ユーザーがアクセス許可を付与し、制御がアプリに戻った後に呼び出されるコードを次に示します。URL には、初めてでも、見栄えの良いトークンが常に含まれています。
// handle the incoming url from app switching
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url
sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
return [self.facebook handleOpenURL:url];
}
そして、接続が成功した後に呼び出される FBSessionDelegate メソッドを次に示します。上記の URL にはトークンが含まれていましたが、最初にここにアクセスしたときにはトークンがありません。しかし、上記の doConnect メソッドを呼び出すと、ここに到達した時点でトークンが存在します。
// FBSessionDelegate
- (void)fbDidLogin
{
if( [self.facebook accessToken] == nil )
{
NSLog(@"Had an access token above, but not now!");
// If I reinvade the doConnect: method again, it will work!!!
}
// ...
}
FBSession.m の sdk コードを詳しく調べると、要求されたアクセス許可が最初から新しいトークンに関連付けられていないため、セッションが新しいトークンを無視しているようです。最初は、cachedPermissions は常に空のリストです
// get the cached permissions, and do a subset check
NSArray *cachedPermissions = [tokenInfo objectForKey:FBTokenInformationPermissionsKey];
BOOL isSubset = [FBSession areRequiredPermissions:permissions
aSubsetOfPermissions:cachedPermissions];