1

最近、アプリに Facebook 統合を追加しましたが、ユーザーがアプリを再起動した場合を除いて、すべて正常に動作します。アプリを再起動するたびに、Facebook は認証プロセスに戻る必要があります。これには、アプリから Safari/Facebook に切り替えてから、アプリに戻ることが含まれます。Facebook に情報を保存させるにはどうすればよいですか? または、アプリの包括的なアクセス許可を取得して、常に再承認しないようにするにはどうすればよいですか?

applicationDidFinishLaunchingWithOptions:メソッドからの私のコードは次のとおりです。

facebook = [[Facebook alloc] initWithAppId:@"203604286395694" andDelegate:self];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
if ([defaults objectForKey:@"FBAccessTokenKey"] 
    && [defaults objectForKey:@"FBExpirationDateKey"]) {
    facebook.accessToken = [defaults objectForKey:@"FBAccessTokenKey"];
    facebook.expirationDate = [defaults objectForKey:@"FBExpirationDateKey"];
}
if (![facebook isSessionValid]) {
    [facebook authorize:nil];
}

関連する Facebook デリゲート メソッド:

- (void)fbDidLogin {
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [defaults setObject:[facebook accessToken] forKey:@"FBAccessTokenKey"];
    [defaults setObject:[facebook expirationDate] forKey:@"FBExpirationDateKey"];
    [defaults synchronize];

}

- (void) requestDialogButtonClicked {
    NSMutableDictionary* params = 
    [NSMutableDictionary dictionaryWithObjectsAndKeys:
     @"invites you to check out cool stuff",  @"message",
     @"Check this out", @"notification_text",
     nil];  
    [facebook dialog:@"apprequests"
           andParams:params
         andDelegate:self];
}

- (void)dialogDidComplete:(FBDialog *)dialog {
    NSLog(@"dialog completed successfully");
}
4

2 に答える 2

0

これは、アプリを承認するときに許可を求めていないためです..「offline_access」は長期的なアクセストークンを提供するため、ユーザーがFacebookを使用するたびに新しいアクセストークンを取得する必要はありません..だから必要なものこのようにアプリを承認するには

if (![facebook isSessionValid]) {
    NSArray *permissions = [[NSArray alloc] initWithObjects:
            @"user_likes", 
            @"read_stream",
            @"offline_access"
            nil];
        [facebook authorize:permissions];
        [permissions release];
}

編集: 実装で以下を確認してください:

1. アプリケーション デリゲートに次の関数を追加する必要があります (ここでの Facebook オブジェクトは、FaceBook クラスのインスタンス値です)。

// Pre 4.2 support
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url 
{
   return [facebook handleOpenURL:url]; 
}

// For 4.2+ support
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url
sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
   return [facebook handleOpenURL:url]; 
}

2. info.plist で、URL タイプ > URL スキーム > Facebook アプリ ID に fb プレフィックスを追加します (最終的に、値は例 fb313714*** のようになります)。

于 2012-04-14T20:55:23.303 に答える
0

Facebook Authorize: どこかで呼び出していますか? それが fbDidLogin がトリガーされる方法です。あなたがそうであると仮定すると、動作は、トークンまたは日付 (またはその両方) が nil であるか、日付が有効期限を過ぎている (可能性は低い) ことを示しています。

ユーザーデフォルトの書き込みおよび読み取り時に値をログに記録します。私の推測では、承認が呼び出されなかったか、(アプリ キーまたはコードに表示されていないその他の問題が原因で) 失敗し、fbDidLogin メソッドが呼び出されないか、nil 値が保存されたままになっていると思われます。

于 2012-04-14T19:10:47.940 に答える