2014年12月26日

[iOS]Facebook SDK でログインできなかったときの対処法

Facebook SDK でログインがうまくいかなくてハマったので備忘メモ。

@Facebook SDK に添付される「FriendPickerSample」から、ログイン処理を抜粋して
 それだけを実行してみた
 ※パーミッションはサンプルとは変えています
if (!FBSession.activeSession.isOpen) {
[FBSession openActiveSessionWithReadPermissions:@[@"public_profile"]
allowLoginUI:YES
completionHandler:^(FBSession *session,
FBSessionState state,
NSError *error) {
if (error) {
NSLog(@"ログイン失敗");
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Error"
message:error.localizedDescription
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alertView show];
} else if (session.isOpen) {
NSLog(@"ログイン成功");
}
}];
return;
}


A実行してみた
・Facebookの認証画面が表示されます ※Facebookアプリでサインアウトしていること!
・認証が終わるとページが変わるのですが、エラー画面 orz
 「この機能は現在ご利用いただけません:リクエスト処理中にエラーが発生しました。しばらくしてからもう一度お試しください。」
Screen Shot 2014-12-26 at 7.50.28.png

Bデベロッパー画面を確認する(Status & Review)
Status & Review の Approved Items を確認してみると、ログインに必要な権限(デフォルト)が無効になってました
スクリーンショット 2014-12-26 7.52.50.png

・これを解決するには、画面上の「Do you want to make this app and all its live features available to the general public?」を有効にする必要があるらしい。
 でも、トグルが押せない。。。

Cメールアドレスを登録する(Settings)
・Settings の Contact Email が入力されていると、有効になるらしい!
スクリーンショット 2014-12-26 7.54.51.png

Dアプリを公開にする(Status & Review)
・Status & Review に戻ると、さっきは押せなかったトグルが押せるようになっているので押す
・「公開する?」と聞かれるので、[確認]を押して先に進む
スクリーンショット 2014-12-26 7.56.39.png

・ログインに必要な権限が有効になった!
スクリーンショット 2014-12-26 7.56.55.png

以上で、無事ログインすることができました。


先の記事 にもあるように、
ログインするユーザーがテストユーザー登録(あるいは開発者/管理者)されていなくても
同じエラー画面が出ます。
これで丸一日潰れました orz


参考:
・Facebookへの投稿をFacebook SDKとSocial.frameworkで比較
 http://qiita.com/nofrmm/items/54f6086bf0606f4530ad

・FriendPickerSample
 →Facebook SDK に添付されているサンプルプロジェクトです。
posted by be-style at 08:23| Comment(0) | iOS

2014年12月24日

[iOS]Facebook SDK で認証エラー(102)になったときの対処

iOS(Objective-C)用の Facebook SDK のサンプルを動かそうとしたときに
ハマったので備忘メモ。

■エラー
・Facebookのデベロッパー画面の情報に誤りがあり、認証できない↓
---------------------------------------------------------
Error: Error Domain=com.facebook.Facebook.platform Code=102
"The operation couldn’t be completed. (com.facebook.Facebook.platform error 102.)"
UserInfo=0x1700efd80 {error_reason=The operation couldn’t be completed.
(FBAPIErrorDomain error 1.), error_description=An error occurred during publishing., app_id=1524168697838827, error_code=102}
---------------------------------------------------------

■状況
@デベロッパー画面(https://developers.facebook.com/docs/ios/jp?locale=ja_JP)にて、
 「Display Name」「Bundle ID」「Single Sine On(有効)」を設定している
A「.plist」に「FacebookAppID」「FacebookDisplayName」「URLスキーム」を設定している
B最新のSDKをダウンロードし、そのサンプルを使っている
Cサンプルは正常に動作。それを自分で登録したAの情報に書き換えると上記のエラーになる

■原因
・Facebookアプリ用で使っているFacebookアカウントの設定が完了していなかった。

ずっとデベロッパー画面とプログラムを確認していたけど、まさかこんなところに
原因があったとはー。
みなさんもお気をつけください。。。


上記は誤りでしたorz
原因は、デベロッパー登録したアカウントとチェックで使っていたアカウントが別だったからでした。
確かに、開発中のアプリなのにテストユーザー登録をしていないアカウントに見えてしまうのは問題です。

当たり前のことですが、気づくのが遅かった。。。

【参考】
・Facebook SDK iOSを使うおさらい
 http://uehi.info/2014/02/post-551/

・Facebook SDK - iOS - Fail to share URL (Error 102)
 http://stackoverflow.com/questions/18541510/facebook-sdk-ios-fail-to-share-url-error-102
posted by be-style at 18:08| Comment(0) | iOS

2014年12月09日

[iOS] iOS8でUITableViewのセルどうしの境目で左側が切れるときの対処

iOS8でUITableViewを使っているときに、セルの境目の左側が15pxほど切れるのはデフォルトらしいということを知ったのですが、それでも画面左まで目一杯線を引きたいときの対処。

UITableViewの記載ルールについては割愛してます。

- (void)viewDidLoad {
...
// セパレーターの左端が切れないように
if ([self.tableView respondsToSelector:@selector(setSeparatorInset:)]) {
[self.tableView setSeparatorInset:UIEdgeInsetsZero];
}
self.tableView.separatorInset = UIEdgeInsetsZero;
if ([self.tableView respondsToSelector:@selector(layoutMargins)]) {
self.tableView.layoutMargins = UIEdgeInsetsZero;
}
...
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
...
// セパレーターの左端が切れないように
if ([cell respondsToSelector:@selector(separatorInset)]) {
cell.separatorInset = UIEdgeInsetsZero;
}
if ([cell respondsToSelector:@selector(preservesSuperviewLayoutMargins)]) {
cell.preservesSuperviewLayoutMargins = false;
}
if ([cell respondsToSelector:@selector(layoutMargins)]) {
cell.layoutMargins = UIEdgeInsetsZero;
}
...
}

参考:
http://dev.classmethod.jp/smartphone/iphone/ios-8-uitableview-layoutmargins/

これで少しハマった。。。
posted by be-style at 09:08| Comment(0) | Android