8

iPhoneアプリのFacebookAPIを使用していますが、2つの質問があります。

すべてのドキュメント/例は、すべてをappDelegateに配置しているようです。Facebookオブジェクトをインスタンス化し、appDidFinishLaunchingで承認し、application:handleOpenURLメソッドをオーバーライドします。

私のアプリでは、ユーザーが特定のビューに移動してボタンを押さない限り、何も起こらないようにしています。そのビューでは、Facebookオブジェクトをインスタンス化し、ボタンハンドラーメソッドで承認を開始することを理解していますが、application:handleOpenURLのオーバーライドを処理するのはどうですか?特定のViewControllerで使用されているものとは異なるFBオブジェクト(アプリデリゲートでインスタンス化されている)を使用する必要があります。

  1. この状況ではシングルトンが必要ですか?または、appDelegateでFBオブジェクトをインスタンス化し、プログラム内で必要な場所からFBオブジェクトにアクセスできるようにすることは、優れた設計ソリューションですか?

    FBドキュメントでは、application:handleOpenURLメソッドをオーバーライドするように指示されています。

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
    return [facebook handleOpenURL:url]; 
}
  1. 書かれているように、これはあなたのアプリケーションが1つのタイプのURLしか開くことができないという意味ではありませんか?アプリが複数の応答に応答する必要がある場合は、urlパラメーターを解析して、実行するアクションを特定する必要があります。

ありがとう!

4

1 に答える 1

9

1)どちらのソリューションも問題ありません。ただし、シングルトンを使用する方がもちろんクリーンです。特に、アプリケーション全体でシングルトンを再利用する場合はなおさらです。

2)application:handleOpenURL method:アプリケーションを外部から呼び出す方法です。FBsdkは、インストールされているかサファリの場合、Facebookアプリからの認証を許可します。認証されると、このハンドラーを使用してアプリがコールバックされます。マルチタスクをサポートするデバイスでのみそのように機能 します。ログインと共有セッションを容易にするための推奨される方法です。ただし、必須ではありません...アプリは、アプリケーションで宣言されたいくつかのURLスキームをサポートでき、チェックできます(テストされていませんが、そのようなものである必要があります)。

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
  if ([url.scheme isEqualToString:@"fb<yourid>"])
    return [facebook handleOpenURL:url];
  else {
    // do what you want
    return YES;
  }
}
于 2011-02-22T06:18:54.203 に答える