サインインに新しい 6.0 Facebook 統合を使用するために、次のチュートリアルを使用しました。 iOS 6 チュートリアル: Facebook をアプリケーションに統合する
ここでは、Apple の新しいソーシャル フレームワークだけで Facebook SDK は必要なく、うまく機能します。
私の質問は、ストーリーボードでこのシングル サインオンをどのように構成するかです。私のログインビューは、検証が成功した後、ユーザーを次のビューにリダイレクトし、実際には二度と表示されないようにする必要があります。
シーク ソリューションの準備を検討してきましたが、ユーザーのログイン ステータスを取得する方法と、次にユーザーがアプリケーションを開いたときにそれがどのようにチェックされるかがわかりません。
ログインボタンが押されると、次の機能がトリガーされます。
- (IBAction)advancedButtonPressed:(id)sender {
self.accountStore = [[ACAccountStore alloc]init];
ACAccountType *FBaccountType= [self.accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierFacebook];
NSString *key = @"270430619733847";
NSDictionary *dictFB = [NSDictionary dictionaryWithObjectsAndKeys:key,ACFacebookAppIdKey,@[@"email"],ACFacebookPermissionsKey, nil];
[self.accountStore requestAccessToAccountsWithType:FBaccountType options:dictFB completion:
^(BOOL granted, NSError *e) {
if (granted) {
NSArray *accounts = [self.accountStore accountsWithAccountType:FBaccountType];
//it will always be the last object with single sign on
self.facebookAccount = [accounts lastObject];
NSLog(@"facebook account =%@",self.facebookAccount);
[self get];
} else {
//Fail gracefully...
NSLog(@"error getting permission %@",e);
}
}];
get メソッドは次のとおりです。
-(void)get
{
NSURL *requestURL = [NSURL URLWithString:@"https://graph.facebook.com/me"];
SLRequest *request = [SLRequest requestForServiceType:SLServiceTypeFacebook
requestMethod:SLRequestMethodGET
URL:requestURL
parameters:nil];
request.account = self.facebookAccount;
[request performRequestWithHandler:^(NSData *data,
NSHTTPURLResponse *response,
NSError *error) {
if(!error)
{
list =[NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];
NSLog(@"Dictionary contains: %@", list );
if([list objectForKey:@"error"]!=nil)
{
[self attemptRenewCredentials];
}
dispatch_async(dispatch_get_main_queue(),^{
nameLabel.text = [list objectForKey:@"username"];
});
}
else{
//handle error gracefully
NSLog(@"error from get%@",error);
//attempt to revalidate credentials
}
}];