3

ユーザーが Facebook にサインインして Open Graph オブジェクトに「いいね」できるようにするネイティブ iOS アプリを作成しています。組み込みの likes を実行するコードの単体テストを作成しようとしています。Facebook アプリの管理者用 Web ページにテスト ユーザーを作成しました。単体テストでやりたいことは、テスト ユーザーとしてサインインし、開いているグラフ オブジェクトに「いいね」を付け、「いいね」の数を確認することです' 変更された場合は、それとは異なります。

私は Facebook iOS SDK を使用しています。これには FBTestSession が付属しており、私のニーズにぴったりだと思いました。私の理解では、サインインするテスト ユーザーをランダムに取得します (または、必要に応じて一時的なユーザーを作成します)。ただし、いくつかの問題があり、それを説明するドキュメントはありません。

最初の問題: Documents ディレクトリから FacebookSDK-UnitTestConfig.plist をロードして、AppID と AppSecret を読み取ろうとします。この問題を修正するために、このようなファイルを作成し、テストの開始時に Documents ディレクトリにコピーしました。これは正しいことですか?

2 つ目の問題は、テスト セッションを開こうとするとエラーがスローされ、応答コード 400 が表示され、役立つメッセージが表示されないことです。作成しようとしているリクエストを見ると、fql を使用してすべてのテスト アカウントを照会しているようです。Web ブラウザに適切な URL を入力すると

https://graph.facebook.com/fql?access_token=ACCESS_TOKEN&q=SELECT id,access_token FROM test_account WHERE app_id = APP_ID)

「(#15) このメソッドはネイティブ アプリではサポートされていません」というエラー メッセージが表示されます。しかし、明らかに FBTestSession はネイティブ アプリを対象としています。では、何が起こっているのでしょうか?

4

3 に答える 3

1

FBTestSession の使用は簡単です。開くとテスト ユーザーが作成され、閉じると破棄されます。セッションを従来のセッションのように使用できるようになったら (内部的に FBTestSession は FBSession から継承します):

FBSession *fbSession = [FBTestSession sessionWithPrivateUserWithPermissions:@[@"publish_stream", @"email"]];
[fbSession openWithCompletionHandler:^(FBSession *session, FBSessionState status, NSError *error) {
    // Test here, you can use the session.accessToken attribute
}

で問題が発生しFacebookSDK-UnitTestConfig.plistました。Facebook SDK に何か変なものがあると思います。コードを調べて、ドキュメント ディレクトリを探しているこの plist へのパスを作成しました。

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *configFilename = [documentsDirectory stringByAppendingPathComponent:@"FacebookSDK-UnitTestConfig.plist"];

テスト中、ドキュメント ディレクトリは、シミュレータでアプリを実行したときと同じではありません。印刷すると、次のようになります。

/Users/{user}/Library/Application Support/iPhone Simulator/{iOS_version}/Documents/

そこに plist を配置すると、動作するはずです。plist ファイルには辞書構造があり、 と の 2 つのキーが含まれていFacebookAppIDますFacebookAppSecret

于 2012-12-26T23:59:58.870 に答える
1

彼らのドキュメントによると、アプリケーションコードでの使用は意図されていません:

http://developers.facebook.com/docs/reference/ios/3.0/class/FBTestSession

このメソッドはアプリケーション コードでは使用しないでください。ただし、Facebook SDK を使用する単体テストの作成には役立ちます。

于 2012-10-12T00:56:33.553 に答える
0

それが true であり、アプリケーションにセキュリティ リスクが存在しない限り、Facebook アプリの [詳細設定] で [クライアントのアプリ シークレット] の値を [いいえ] に変更します。これにより、アプリ アクセス トークンを使用してテスト ユーザー情報をリクエストできるようになります。

配布されたネイティブ コードにアプリ シークレットが含まれていると、アプリ シークレットが発見され、結果としてアプリのセキュリティが侵害される可能性があります。ネイティブ アプリがある場合、FB がデフォルトでこの設定をオンに切り替えるのはそのためだと思います。

于 2012-10-18T04:08:36.323 に答える