2

古い iOS FB SDK (GitHub アカウントでホストされているもの) から .framework (パッケージベースのインストーラー) に移行するためのヒントはありますか? 既存の認証トークンと有効期限オブジェクトを新しい FBSession オブジェクトに対して検証する際に問題が発生しています。

状況は次のとおりです。

古い SDK/手法では、Facebook iOS SDK では認証などを保存する必要がありました。独自のストレージ メカニズムを介して手動でトークンと有効期限を管理します。新しいフレームワーク ベースの SDK では、これが処理されますが、ユーザーを移行する (つまり、ユーザーが再ログインしないようにする) ために、この情報を新しい SDK に提供する必要があります。

結局、Facebook は K-V を NSUserDefaults に保存しており、この情報を保存するために使用する辞書のネストされた K-V のすべてのキーだけでなく、ルート キーの名前も教えてくれます。

彼らのトークン クラスFBSessionTokenCachingStrategyには、NSDictionary が使用可能な Facebook セッションを確立する適切なディクショナリに対して検証するかどうかを検証するクラス メソッドさえあります。

+ (BOOL)isValidTokenInformation:(NSDictionary*)tokenInformation;

したがって、既存の認証を取得しました。トークンと有効期限、それらを新しい辞書に入れ、適切なキーの場所に保存し、NSUserDefaults を同期します。

これまでのところ、とても良いですよね?FBSessionオブジェクトを初期化したら

- (id)initWithAppID:(NSString*)appID permissions:(NSArray*)permissions urlSchemeSuffix:(NSString*)urlSchemeSuffix tokenCacheStrategy:(FBSessionTokenCachingStrategy*)tokenCachingStrategy;

キー全体が NSUserDefaults から削除され、セッション オブジェクトのstateプロパティの状態FBSessionStateCreated(つまり、既存の状態がない) と本来あるべき状態FBSessionStateCreatedTokenLoaded(つまり、ローカルに保存されたプロパティがあり、オンラインでチェックする準備ができていることがわかっている) になります。

なぜ削除されているのですか?クラスメソッドに対して検証されました。

ありがとう

4

1 に答える 1

2

新しい Facebook SDK のローカル ストレージ オブジェクトも、トークンに関連するアクセス許可リストを保持していることがわかりました。これは以前は必要なかったので、ローカルに保存していませんでしたが、権限リストは変更されませんでした。そのため、権限リストも新しいストレージ オブジェクトに保存しました (合計 3 つのキー: 認証トークン、有効期限、および権限リスト)。

これを行った後、オブジェクトを作成/初期化してFBSessionも、ローカルに保存されたオブジェクトは削除されず、呼び出すopenWithCompletionHandler:と、予想されるセッション状態が に確立されましたFBSessionStateOpen

于 2012-11-01T14:41:50.270 に答える