2011-08-12 4 views
2

私のアプリケーションでaccess_tokenを保存する際に問題があります。問題は、iPhoneにFacebookアプリがインストールされていない場合、Safariがこれを処理して問題がないことです。しかし、iPhoneにFacebookアプリがインストールされるとすぐに。それはちょうどアクセストークンを保存しておらず、Facebookで何かをする必要があるたびにFacebookアプリを開きます。fbDidLoginに関する問題がiOSと呼ばれることはありません

:それから、許可...

これは私が許可を最初に尋ねると、ユーザデフォルトからアクセストークンを受け取るためのviewDidLoad中にやっているものです....あなたはすでに与えている、と言います

facebook = [[Facebook alloc] initWithAppId:@"APPID"]; 


    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
    if ([defaults objectForKey:@"FBAccessTokenKey"] 
     && [defaults objectForKey:@"FBExpirationDateKey"]) { 
     facebook.accessToken = [defaults objectForKey:@"FBAccessTokenKey"]; 
     facebook.expirationDate = [defaults objectForKey:@"FBExpirationDateKey"]; 
    } 

    NSArray* permissions = [[NSArray arrayWithObjects: 
           @"read_stream", @"offline_access", nil] retain]; 

    if (![facebook isSessionValid]) { 
     [facebook authorize:permissions delegate:self]; 
    } 

これは私がfbdidloginでやっているものです:

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

しかし、Facebookアプリだけでは動作しません。これを制御取るいくつかの方法のために...それは時に表示するたびに認可DOEウィル負荷がかかった、再度ロードします。

誰か手掛かりがありますか?

Thnx!

はところで:それは今何をするかだ

(BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url { return [[controller facebook] handleOpenURL:url]; } 
+0

Safariに行きますか、またはアプリケーションの「UIWebView」オーバーレイで開きますか? –

答えて

1

私はFacebookアプリを使用したほうがよい、回避策を見つけました。ユーザーがアプリを残していない、とすべてがFacebookのを使用せずに、ポップアップ内で処理される。この場合には、この

[self authorizeWithFBAppAuth:NO safariAuth:YES]; 

[self authorizeWithFBAppAuth:YES safariAuth:YES]; 

:Facebook.mファイルでは、私はこれを変更しましたアプリ。

0

:私はまた、次の行を持っています。それはインストールされている場合はFacebookアプリに、そうでない場合はSafariに救済される。明示的にダイアログインターフェイスを使用することはできますが、ライブラリに付属している最も単純なサンプルコードは、アプリケーションを残して認証業務を行い、FBアプリケーションが認証を処理した後に戻ります。それは大丈夫です、そしてあなたの周りにあなたの頭を持っていれば(それはあなたに戻って適切に設定されている)、それはいいです。

各セッションでの再認証を防止するには、アクセス許可トークン「offline_access」を要求します。

+0

OK!しかし、私は自分のアプリで正しい方法で動作しないので、Facebookのアプリの使用を防ぐ方法があります。私は思いついたコードを書き直すことができますが、ポップアップでサファリを使用するだけであればすべてOKです! – Jos

0

の参照をアプリデリゲートのhandleOpenURL:メソッドで確認してください。バックグラウンドでnilに設定されている可能性があるので、Facebookは返信を受け取ることはありません。

1

あなたのアプリでInfo.plistでマルチタスクを無効にしましたか? Facebook SDKはあなたのアプリがマルチタスクをサポートしていることを前提としています。

これは、「アプリケーションはバックグラウンドで実行されません」(UIApplicationExitsOnSuspend)が「はい」に設定されていることを意味します。

この場合は、アプリ内のブラウザからログインして投稿を更新し、コードサンプルを提供する必要があります。

5

私はこの問題を抱えており、あなたの解決策を見つけた可能性があります。 Facebookにアプリを作成するときは、アプリの設定を編集してネイティブiosアプリを許可する必要があります。選択したiosバンドルIDは、作成するアプリ内のバンドルIDと正確に一致する必要があります。Facebookはあなたのアプリを許可する前にこれをチェックしていると述べている。面白いのは、あなたがデバイスからFacebookブックアプリを削除してから、それを認証しようとすると、Webブラウザを使用して、この "セキュリティ"を完全にバイパスする場合です。これがJosソリューションが「機能する」理由です。 Facebookはエラーメッセージを返信しないので、追跡するのが楽しいものでした。私はいくつかの将来のdevsいくつかのトラブルを保存するために、この回答をそこに投げたいと思った。私はこれが役立つことを願っています

+0

ありがとう、それは私に役立ちました+1有用な情報 –

0

行: [self authorizeWithFBAppAuth:YES safariAuth:YES];

[:NO safariAuth:自己authorizeWithFBAppAuth YES]に変更される

たちは、Facebookの最新静的ライブラリを使用している場合

を、私たちはへのアクセスを得ることはありません(つまり、1が変更を行う必要があります場所なので)私たちはFacebook.mへのアクセス権を持っている場合のみ可能です.mファイル。その場合、同じ機能をどのように達成することができますか?

関連する問題