Хорошо, это может показаться дубликат, но я прошел через все вопросы, которые стоят вокруг проблемы, и я все еще не могу заставить это работать для моего приложения.
Я следил за учебником iOS на сайте разработчиков Facebook, и я сделал следующее:
- Создал приложение Facebook, чтобы получить идентификатор приложения Facebook.
- Я назначил этот идентификатор приложения константе, и я использую ее для инициализации объекта Facebook в своем приложении.
- Я удостоверился, что мое приложение помечено для многозадачности
- Я установил fbAPP_ID в plist в раскрывающемся списке URL
- Я сделал свой AppDelegate FBSessionDelegate и реализовал очень простые методы делегирования fbDidLogin и fbDidNotLogin.
Версии: XCode 4.3.2 на Lion, iOS 5.1, Facebook iOS 4.1.1
Все это и я до сих пор не могу заставить Facebook возвращать управление обратно в мое приложение, когда оно разрешает. Он просто остается в Facebook вместо этого.
Код: (Примечание FB_APP_ID изменено на базовое число для просмотра здесь)
AppDelegate.h:
#import <UIKit/UIKit.h>
#import "FBConnect.h"
#define FB_APP_ID @"1234567890"
@interface AppDelegate : UIResponder <UIApplicationDelegate, FBSessionDelegate>
@property (strong, nonatomic) UIWindow *window;
@property (nonatomic, strong) Facebook* facebook;
@end
AppDelegate.m:
#import "AppDelegate.h"
@implementation AppDelegate
@synthesize window = _window;
@synthesize facebook = _facebook;
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
_facebook = [[Facebook alloc] initWithAppId:FB_APP_ID andDelegate:self];
if (![_facebook isSessionValid])
{
[_facebook authorize:nil];
}
}
- (BOOL)application:(UIApplication*)application handleOpenURL:(NSURL *)url
{
return [_facebook handleOpenURL:url];
}
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
return [_facebook handleOpenURL:url];
}
- (void)fbDidLogin
{
NSLog(@"App logged in");
}
- (void)fbDidNotLogin:(BOOL)cancelled
{
NSLog(@"App did not login");
}
@end
Соответствующий порт Info.plist:
Экран приложения Facebook (в основном выцветший):
Примечание. Я попробовал его только с базовыми настройками, а также с настройками собственного приложения iOS с фальшивым идентификатором магазина iTunes, но с тем же идентификатором пакета из моего профиля подготовки.
Независимо от того, что я делаю, он всегда загружает Facebook и просит авторизовать мое приложение, а затем просто закрывает окно экрана auth и сидит там на моем экране Facebook вместо того, чтобы возвращаться в мое приложение.
Также обратите внимание: я знаю, что он всегда будет спрашивать, потому что я не проверяю токен аутентификации и дату истечения срока действия..... что следующий шаг... пока я хочу, по крайней мере, получить его, чтобы вернуться в мое приложение, прежде чем я беспокоюсь об этом.
Я что-то пропустил? Что-нибудь еще я могу попытаться заставить Facebook вернуться в мое приложение?
EDIT: Также при отладке я не могу найти места, где по какой-либо причине вызывается либо openURL.
EDIT # 2: при запуске на симуляторе он загружает диалог FB через Safari (как и ожидалось), а затем, когда я авторизуюсь, сафари выдает ошибку, как если бы URL-адрес, который они пытаются использовать, чтобы вернуться к моему приложение недействительно:
Это все еще не говорит о многом, так как мой fb1234567890 настроен правильно, насколько я знаю в Info.plist.