Вопрос по xcode, facebook, objective-c, ios – Родной iOS Facebook SSO не вернется в приложение

12

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

Я ознакомился с руководством по iOS на сайте разработчика Facebook и сделал следующее:

  1. Created a Facebook App to get the Facebook App ID.
  2. I've assigned this App ID to a constant and I use it to initialize the Facebook object within my app.
  3. I've made sure my app is flagged for multitasking
  4. I've setup the fbAPP_ID in the plist under the URLs drop down
  5. I've made my AppDelegate a FBSessionDelegate and implemented very simple fbDidLogin and fbDidNotLogin delegate methods.

Версии: 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

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

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

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

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

РЕДАКТИРОВАТЬ: Кроме того, при отладке, я не могу найти ни одного места, где по какой-либо причине вызывается либо openURL.

РЕДАКТИРОВАТЬ # 2: при запуске его на симуляторе, он загружает диалог FB через Safari (как и ожидалось), а затем, когда я авторизуюсь, safari выдает ошибку, как будто URL-адрес, который они пытаются использовать, чтобы вернуться к моему приложению, является недействительным :

simulator safari error

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

Вам удалось войти хотя бы один раз? Amogh Talpallikar
Кажется, что ни один из вызовов handleOpenUrl не вызывается при отладке. Что касается уникального URL, я подумал, что для чего нужна часть plist (как показано выше), где я использую fbAPP_ID? И шаг 6 и далее идет в График и Ленты. На данный момент я просто пытаюсь заставить работать базовую систему единого входа. valheru
developers.facebook.com/docs/mobile/ios/build Читайте после шага 6. Amogh Talpallikar
поставить точку останова или NSLog в handleOpenURL и проверить, вызывается ли он вообще, а также дали ли вашему приложению уникальный URL-адрес, на который будет перенаправляться сафари? Amogh Talpallikar
Проблема не в том, что вы входите в систему. Facebook просто всплывает, и я могу нажать Авторизовать или что-то еще ... но оно никогда не возвращается в приложение ... оно просто остается в Facebook valheru

Ваш Ответ

4   ответа
3

All you have to follow these steps

STEP 1:

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

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

STEP 2:

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

Идти к Target > Info > URL Types & GT; нажмите значок плюс и добавьте элементы, как это- URL Scheme settings

В моем приложении были оба варианта входа через Facebook и Google, поэтому я создал два типа URL. Вы можете увидеть второй настройки типа URL Facebook. URL Scheme будет идентификатором вашего приложения в Facebook из учетной записи разработчика сfb в начале. Так что, если ваш идентификатор приложения разработчика Facebook9876543267575645 тогда схема URL станетfb9876543267575645.

STEP 3:

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

Все эти вещи вернут ваше приложение после успешного выхода в Facebook.

STEP 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 и вуаля .... перенаправление работает! Так что я не думаю, что аккаунт разработчика FacebookNative iOS App настройки необходимы, когда вы делаете вход в Facebook в вашем приложении.

0

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

Однако, когда я включил «Глубокие ссылки», он работал отлично, так что это могло быть сочетание всего вышеперечисленного И включение этой опции тоже.

19

Ваш info.plist, кажется, отформатирован неправильно

Убедитесь, что схема URL вложена в элемент (точнее, в массив), называемый «Схемы URL».

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

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

схема URL http://f.cl.ly/items/243G1D0H39151q472V1t/Screen%20Shot%202012-05-16%20at%206.52.06%20PM.png

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

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

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit ExceededURL IdentifierError: User Rate Limit ExceededOkayError: User Rate Limit ExceededURL IdentifierError: User Rate Limit Exceeded
Error: User Rate Limit Exceeded valheru
Error: User Rate Limit Exceededstackoverflow.com/questions/29390170/…)
2

Я столкнулся с другой проблемой. Я отредактировал необработанный файл 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

Похожие вопросы