2015-11-22 7 views
11

を使用してFacebookを利用してアクセスするとき、私はこの1つ上のいくつかの助けが必要です....リミット権限アカウントフレームワーク

だから私は直面しています問題はACAccountからFacebookアカウントをフェッチしている間に、アラートビューは、あまりにも多くの権限を知らせることです。私はFacebookのACAccountログインを使用するときに警告ボックスを取得しています。

それは私の権限セットが空の配列である場合でも、これが現れるAPP_NAME would like to access your basic profile info and list of friends

言います。

NSArray * FB_PERMISSIONS = @[]; 
// or FB_PERMISSIONS = @[@"public_profile", @"likes", @"email"]; 
// It does not matter what the array is -> The alert has extra sentences. 

ACAccountType *FBaccountType= [_accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierFacebook]; 
NSString *key = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"FacebookAppID"];; 
NSDictionary *dictFB = [NSDictionary dictionaryWithObjectsAndKeys:key,ACFacebookAppIdKey,FB_PERMISSIONS,ACFacebookPermissionsKey, nil]; 
[_accountStore requestAccessToAccountsWithType:FBaccountType options:dictFB completion: 

私はここで何をしようとしていますか?私はちょうど "メール "と" が好き" @ "public_profile" を、必要としています

。アラートにはAPP_NAME would like to access your profile, and likes on your behalf. In addition, APP_NAME would like to access your basic profile info and list of friends

なぜ2番目の文があるのですか?どのように私はそれを取り除くのですか?私は基本的なプロフィールと友人のリストについて語る第二の行が現れないいくつかのアプリを見ることができます。

期待される結果:

APP_NAME would like to access your profile and likes.

更新:

ソリューションのための私の答えをチェックしてください。

+0

完了ブロックで実行しているアカウントまたはソーシャルアクションで質問を更新してください。 – quellish

答えて

4

これを説明するFB SDKドキュメントには何もありません。彼らはこのようにして、ユーザーがFacebookのポップUIを使用して、許可する権限を選択できるようにしました。 Facebookデザインの考え方は、ユーザーに多くの制御と透過性を与えることだと思います。しかし、OSのポップアップでは、その下にたくさんの権限が隠されています。最小限の情報を表示するのはアップルの設計哲学だと思う。これは、開発者のシナリオに最も適しています。なぜなら、ユーザーは通常、アプリケーションによって多くの権限が要求されているのを知っているからです。

とにかく、FBSDKLoginManager+Internal.hを見ると、システムログインの機能をチェックアウトすることができます。さらに深く掘り下げて、私はFBSDKLoginButtonが無意味であることを発見しました。これについては、独自のFBSDKLoginManagerインスタンスを使用し、システムアカウントのタイプをネイティブに設定し、error code 306を取得した場合は、デフォルトのログインメカニズムに戻ります。

どういうわけか - >>この方法では追加のアクセス許可は表示されません。私はどのように考えている。私が知っているのは、すべてが今すぐに収まるということです。

さらに、いくつかのエッジケースを縛ることができるように、ACAccountStoreDidChangeNotificationのリスナーを別途設定する必要があります。しかし、はい、\ m/

2

この問題に

修正を修正するには、ビューのヘッダファイルにコードを追加するだけでなく、あなたのビューファイルにコードを追加する必要が。コード例を以下に示します。

ビューのヘッダファイルに追加:

// ViewController.h 
#import <FBSDKLoginKit/FBSDKLoginKit.h> 
@interface ViewController : UIViewController 
@property (weak, nonatomic) IBOutlet FBSDKLoginButton *loginButton; 
@end 

とビューファイルを追加するには、次

loginButton.readPermissions = 
@[@"public_profile", @"email", @"likes"]; 

注最初の例ではコメントは参考値であったことを。

どうしてですか?

あなたの問題が起こった理由は、アカウントフレームワークとFacebook APIがデフォルトではすべての権限を意味すると考えるからです。コード内でより具体的にする必要があります。私はあなたのビューヘッダーファイルに入るはずのコードの最初の例を行う必要があると確信しています。上記のコードはあなたが作業しているファイルに書き込むものではないことを理解していますが、それを行う上で大まかなアイデアがあります。

まだ混乱していますか?

まだ混乱している場合は、以下にコメントしてください。私は自分の答えを更新しようとします。空の配列ではなく、あなたが行っていたコードを送ることができれば本当に役に立ちます。私が明確でない場合は教えてください。ご迷惑をおかけして申し訳ありません!https://developers.facebook.com/docs/facebook-login/permissions/overviewとこっち:

ソース

は主に、私はここで情報を見つけhttps://developers.facebook.com/docs/facebook-login/ios#permissions Facebookはかなり信頼できると立派です。私は思う...

+0

これは間違っています。 – Legolas

+0

ご迷惑をおかけして申し訳ございません。私は正しく見ていませんでした。 – makertech81

0

代わりにFacebook APIを使用していない理由はありますか? iOS API経由でのアクセスを要求するには、ユーザーがiOS設定でFacebookにログインする必要があります。 FacebookのAPIを使用して同じリクエストを行うと、ユーザーが設定、FBアプリ、またはSafariを使用してログインしているかどうかを検出できます。 https://developers.facebook.com/docs/facebook-login/ios/permissions

FBSDKLoginManager *loginManager = [[FBSDKLoginManager alloc] init]; 
[loginManager logInWithReadPermissions:@[@"public_profile", @"likes", @"email"] 
       fromViewController:self 
          handler:^(FBSDKLoginManagerLoginResult *result, NSError *error) { 
    //TODO: process error or result 
}]; 
:ユーザーがログインしていない場合、それは

バージョン4.xを(ちょうどerroringや設定を経由して、そうするためにそれらを伝えるために反対に)そうするためにそれらを促します

バージョン3.X

[FBSession openActiveSessionWithReadPermissions: @[@"public_profile", @"likes", @"email"] 
            allowLoginUI:YES 
           completionHandler: 
^(FBSession *session, FBSessionState state, NSError *error) { 
    // Handle completion by calling AppDelegate 
}]; 
+0

このapiは存在しません。どのバージョンのグラフSDKをお使いですか? – Legolas

+0

ああ、悪いです。私は3.xを指していました。私は4.xを含めるように私のソリューションを更新しました。しかし、同じアイデア。 – Oren

+0

"代わりにFacebook APIを使用しない理由はありますか?" - 私の答えをチェックしてください。 「ユーザーがログインしていない場合は、ログインするよう促します」 - そうではありません。 FBSDKLoginManagerからの明示的な呼び出しが必要です。とにかく、私の答えをチェックしてください。 – Legolas