2016-05-11 14 views
0

私はFBSDKLoginManagerを使用して手動でFacebookにログインしています。コードは主に動作しますが、それはすべてのエラーをスローしませんが、時にはそれがログインウィンドウ(サファリ)をトリガしませんreact-native logInWithReadPermissionsがサファリを呼び出さない場合があります。エラーはスローされず、handle(コールバック)は呼び出されません。

#import "FacebookLoginManager.h" 
#import "FBSDKCoreKit/FBSDKCoreKit.h" 
#import "FBSDKLoginKit/FBSDKLoginKit.h" 

@implementation FacebookLoginManager 

RCT_EXPORT_MODULE(); 

RCT_EXPORT_METHOD(newSession:(RCTResponseSenderBlock)callback) { 


    dispatch_async(dispatch_get_main_queue(), ^{ 

    FBSDKLoginManager *login = [[FBSDKLoginManager alloc] init]; 


    [login logInWithReadPermissions:@[@"public_profile", @"email"] fromViewController: nil handler:^(FBSDKLoginManagerLoginResult *result, NSError *error) { 

    if (error) { 
     callback(@[@"Error", [NSNull null]]); 
    } else if (result.isCancelled) { 
     callback(@[@"Canceled", [NSNull null]]); 
    } else { 
     FBSDKAccessToken *token = result.token; 
     NSString *tokenString = token.tokenString; 
     NSString *userId = token.userID; 
     NSDictionary *credentials = @{ @"token" : tokenString, @"userId" : userId }; 
     callback(@[[NSNull null], credentials]); 
    } 
    }]; 

    }); 

}; 

: 私は、次のコードを持っているネイティブメソッドを作成しました。 この場合、ハンドラコードは決して呼び出されません。私がアプリケーションを閉じて、それを再び開くと、すべてが再び機能します。

時間が経過すると問題が発生するため、タイムアウトやトークンの期限切れに関係する可能性がありますが、わかりません。

どうすればこの問題を解決できますか?

答えて

0

ログアウト時にFacebookのアクセストークンを取り消すと問題が解決されたことに気付きました。おそらくFBSDKLoginManagerには、ユーザーが既にあなたのアプリケーションを承認していて、もう一度認証を求めようとしたときにいくつかの問題があったでしょう。 トークンを取り消すにはfacebookのPHP SDKを持っている私のサーバにリモートコールを行います:

<?php 
    $fb = new Facebook(array(
         'app_id'    => 'YOUR_FB_APP_ID', 
         'app_secret'   => 'YOUR_FB_APP_SECRET', 
         'default_graph_version' => 'v2.5', 
         )); 

         try 
         { 
          $userFbToken  = 'user-fb-token-stored-somewhere'; 
          $appsecret_proof = hash_hmac('sha256', $userFbToken, 'YOUR_FB_APP_SECRET'); 
          $response  = $fb->delete("/me/permissions", array('appsecret_proof'=>$appsecret_proof),$userFbToken); 
         } 
         catch(FacebookResponseException $e) 
         { 
          // exception handling... 
         } 
関連する問題