6

http://developers.facebook.com/docs/guides/mobile/#ios-は本当に便利なようですが、私のアプリはマルチタスクをサポートしていないため、この「クロスサファリ」方式は機能しません。

FBDialogs(このいわゆる「新しい」APIを使用)を介した認証プロセスの簡単な例がどこかにありますか(または誰かがここにコピーしてください)?このSDKを知り始めたばかりなので、できるだけ基本的なことをしてください。

4

2 に答える 2

10

数時間これを理解するのに苦労しました...

これがfbapp| background-safari認証をバイパスするソリューションであり、Facebook.mで変更するだけです。

[self authorizeWithFBAppAuth:YES safariAuth:YES]

[self authorizeWithFBAppAuth:NO safariAuth:NO]

メソッドで:

- (void)authorize:(NSArray *)permissions
     delegate:(id<FBSessionDelegate>)delegate

他に何も変更せずにサンプルコードで検証しました(もちろん、kAppIdを自分のものに設定します)

なぜ地球上でFBがこれを文書化していないのか私はかなり怒っていました...

それが役に立てば幸い、

乾杯

于 2011-04-15T22:11:30.847 に答える
8

すべての魔法があります

- (void)authorize:(NSArray *)permissions
     delegate:(id<FBSessionDelegate>)delegate

どの呼び出し[self authorizeWithFBAppAuth:YES safariAuth:YES]

  • FBAppAuth:YESインストールされている場合、Facebookアプリを使用して認証を試みます
  • safariAuth:YESデバイスがマルチタスクをサポートしている場合、Safariを使用して認証を試みます

だからあなたが欲しいのは[self authorizeWithFBAppAuth:NO safariAuth:NO]

Facebook SDKを変更せずに残したい場合は、プライベートAPIを「公開」するだけです。

@interface Facebook (Private)
- (void)authorizeWithFBAppAuth:(BOOL)tryFBAppAuth
                    safariAuth:(BOOL)trySafariAuth;
@end

そして、カテゴリがある場合は拡張します。

@interface Facebook (MyApp)
- (void)myAuthorize:(id<FBSessionDelegate>)delegate;
@end

@implementation Facebook (MyApp)

- (void)myAuthorize:(id<FBSessionDelegate>)delegate {
  _permissions = [[NSArray arrayWithObjects:@"email", *(whatever you need)*, nil] retain];
  _sessionDelegate = delegate;
  [self authorizeWithFBAppAuth:NO safariAuth:NO]; // force in app auth
}

@end

その後、ほぼ通常どおりに使用します。

 Facebook *facebook = [[Facebook alloc] initWithAppId:MY_APP_FB_ID];
 [facebook myAuthorize:self];

それは彼らが実装しなかった人気のあるリクエストであり、ソリューションを備えたプルリクエストもあります...

于 2011-04-15T23:57:31.910 に答える