Подтвердить что ты не робот

Native iOS Facebook SSO не вернется в приложение

Хорошо, это может показаться дубликат, но я прошел через все вопросы, которые стоят вокруг проблемы, и я все еще не могу заставить это работать для моего приложения.

Я следил за учебником 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:

enter image description here

Экран приложения Facebook (в основном выцветший):

Facebook App screen

Примечание. Я попробовал его только с базовыми настройками, а также с настройками собственного приложения iOS с фальшивым идентификатором магазина iTunes, но с тем же идентификатором пакета из моего профиля подготовки.

Независимо от того, что я делаю, он всегда загружает Facebook и просит авторизовать мое приложение, а затем просто закрывает окно экрана auth и сидит там на моем экране Facebook вместо того, чтобы возвращаться в мое приложение.

Также обратите внимание: я знаю, что он всегда будет спрашивать, потому что я не проверяю токен аутентификации и дату истечения срока действия..... что следующий шаг... пока я хочу, по крайней мере, получить его, чтобы вернуться в мое приложение, прежде чем я беспокоюсь об этом.

Я что-то пропустил? Что-нибудь еще я могу попытаться заставить Facebook вернуться в мое приложение?

EDIT: Также при отладке я не могу найти места, где по какой-либо причине вызывается либо openURL.

EDIT # 2: при запуске на симуляторе он загружает диалог FB через Safari (как и ожидалось), а затем, когда я авторизуюсь, сафари выдает ошибку, как если бы URL-адрес, который они пытаются использовать, чтобы вернуться к моему приложение недействительно:

simulator safari error

Это все еще не говорит о многом, так как мой fb1234567890 настроен правильно, насколько я знаю в Info.plist.

4b9b3361

Ответ 1

Ваш info.plist, похоже, неверно отформатирован

Убедитесь, что схема URL вложена в элемент (точнее, в массив), который называется "Схемы URL"

Этот массив должен содержать все возможные схемы URL, которые могут запускать ваше приложение

См. прилагаемое изображение для лучшего объяснения схем URL

url scheme

Кроме того, "идентификатор URL" должен быть вашим идентификатором пакета: напр. com.mycompany.myapp Это должно соответствовать идентификатору, который вы указали в своих профилях обеспечения

.надеюсь это поможет!

Ответ 2

Все, что вам нужно выполнить следующие шаги

ШАГ 1:

Материал разработчика для разработчиков Facebook:

Если ваше приложение уже отправлено, заполните iphone/ipad appstore id, иначе оставьте его пустым. facebook developer account app id settings

ШАГ 2:

Далее в вашем XCode:

Goto Target > Info > URL Types > щелкните значок плюс и добавьте элементы, подобные этому, URL Scheme settings

В моем приложении были оба варианта входа в систему через facebook и google, поэтому я создал два типа URL. Вы можете видеть, что вторая - это настройки типа URL-адреса Facebook. URL-схема будет вашим идентификатором приложения facebook с учетной записи разработчика facebook с fb при запуске. Поэтому, если ваш идентификатор приложения для вашего facebook 9876543267575645, тогда URL-схема станет fb9876543267575645.

ШАГ 3:

Затем вам нужно добавить новый ключ в info.plist. Поэтому оставайтесь на одном экране и добавьте FacebookAppID, как этот экран: info.plist settings

Все это приведет ваше приложение обратно после успешной фейсбуки oauth.

ШАГ 4:

Отдохните в своем классе AppDelegate. Просто добавьте этот метод в AppDelegate.m

NSString *retURL = [NSString stringWithFormat:@"%@", url];    
if ([retURL rangeOfString:facebookid].location != NSNotFound)
{
    // if your application is coming back from facebook native app.
    return [_facebook handleOpenURL:url];
}
else
{
    // if your app is coming back from google plus oauth.
    return [GPPURLHandler handleURL:url sourceApplication:sourceApplication annotation:annotation];
}

во время всего этого, необходимо ввести и синтезировать экземпляр facebook в AppDelegate.m

@synthesize facebook = _facebook;

и didFinishLaunchingWithOptions

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    _facebook = [[Facebook alloc] initWithAppId:facebookid];
    // rest of your code is already here......
}

Еще одна важная вещь. Во время выполнения этих шагов я также делал слишком много исследований для достижения этой цели, и, наконец, рабочий материал здесь. Я сделал эти настройки в двух моих приложениях.

Но пока я создавал третье приложение, я начал с самого начала и не следил за STEP 1 и STEP 3, а voila.... перенаправление работает! Поэтому я не думаю, что настройки учетной записи developerWorks Native iOS App необходимы, когда вы создаете Facebook в своем приложении.

Ответ 3

Я столкнулся с другой проблемой. Я отредактировал необработанный файл Info.plist и добавил:

<key>URL Types</key>
<array>
    <dict>
        <key>URL Schemes</key>
        <array>
             <string>fbxxxxxxxxx</string>
        </array>
    </dict>
</array>

Это не сработало, потому что ключи не являются "URL-адресами", "URL-схемами" и "Идентификатор URL", вместо этого "CFBundleURLTypes", "CFBundleURLSchemes" и "CFBundleURLIdentifier". Xcode переименует это в редакторе на "Типы URL", "Схемы URL" и "Идентификатор URL".

Чтобы убедиться, что вы выбрали Info.plist в xcode, щелкните правой кнопкой мыши- > показать исходные ключи/значения.

enter image description here

Ответ 4

Ни один из вышеперечисленных, или другие ответы на SO, не работал у меня, хотя у меня, похоже, была такая же проблема.

Однако, когда я включил "Deep Linking", он работал отлично, поэтому, возможно, это была комбинация всех вышеперечисленных И, включив этот параметр.