2016-02-03 2 views
4

EDIT: ДОРОГОЙ ЛЮДЕЙ ИЗ БУДУЩЕГО, trey-jones исправил эту проблему, реализовав setLoginBehavior, FBSDKLoginNative, похоже, имеет проблемы с FB, а не с модулем.Ti.Facebook не открывается с помощью установленного приложения FB

Окружающая среда:

MacOS X 10.10.5 
Ti SDK 5.1.1.GA - 5.1.2.GA 
iOS 9.2 
Ti.Facebook 5.0.0 - 5.0.1 

настройки моего проекта (tiapp.xml) отлично (она работает на любом другом случае на обоих прошивкой и Android).

код я использую для вызова логин:

var fb = require('facebook'); 
fb.initialize(); 
fb.authorize(); 

Если приложение Facebook установлена ​​в коммуникаторе fb.authorize() не открывает. Когда это произошло, я не видел сообщений на уровне системы iOS.

Кому-то еще повезло с помощью fb.authorize с новым sdk на устройствах iOS. С установленным приложением. Без приложения fb в системе он правильно открывает браузерный вид.

EDIT: Мне удалось обходное решение для этого (это не так), основанный на том, что логин работает с KitchenSink от AppC.

Обходной путь заключается в том, чтобы добавить код входа Ti.FB в код, неважно, не будет ли его невидимым, инициализируя это, будет исправлено все, что заставляет пользовательский вход .authorize() не работать.

//Workaround button: 
if(OS_IOS){ 
    var fbHaxBtn = fb.createLoginButton({ 
     readPermissions: ['email'], 
     visible: false 
    }); 
} 
//It needs to be added to the window/doesn't need to be visible though 
$.login_window.add(fbHaxBtn); 

//Then in our custom button's code, we can fire as normal: 
function doLoginClick{ 
    fb.initialize(); //I was having unexpected issues dropping this line on Android, although the docs say its deprecated. 
    fb.authorize(); 
} 

Сохранит этот билет, если/когда эта вещь получит официальное исправление.

+1

Отличная находка, боролись с этим в течение многих дней! Также стоит упомянуть, что на Android fb.initialize() не работает для меня, если я не добавлю к нему тайм-аут: i.fb.initialize (5000); –

+1

Благодарим за сообщение об этом. Если есть одна вещь, которую мне напомнили, пытаясь использовать модуль FB, это не должно доверять документам appc. У меня была такая же ситуация, но мне не нужно было добавлять кнопку. Я не вызывал 'initialize' и добавлял, что строка разрешала авторизоваться, как и раньше. Более странно, как только я удалил вызов 'initialize', он продолжал функционировать. В последнее время мне интересно, развивается ли титан на самом деле быстрее, чем родной ... – threeve

ответ

1

Это мой второй ответ на этот вопрос. Я считаю, что мой первоначальный ответ предлагает определенную ценность разговору, и именно поэтому я его оставляю, но он все еще не постоянно решает проблему отсутствия авторизации в facebook.

Согласованное решение оказалось модифицирующим официальный модуль Ti.Facebook. Я представлю запрос нагрузочный для этого изменения (1 линия), но на данный момент, вы можете получить рабочий модуль здесь:

Source

Pre-built

Это последовательно позволяет пользователям разрешать явным образом установив поведение входа для использования браузера, а не собственное приложение facebook через быстрое переключение приложений. This is actually the intent of Facebook's developers.

Мне не удалось определить, что заставляет его нервничать при попытке использовать собственное приложение для входа в систему - он должен попробовать следующий вариант, который является браузером, - но это работает и не требует использования TiFacebookButton ,

Надеюсь, это поможет кому-то еще!

+0

А, я прокомментировал запрос на тяну, не понимая, что это вы. Также отправил AppC ссылку на pr на билет для продажи, надеюсь, они скоро посмотрят на него. Еще раз спасибо. – boarnoah

+0

Спасибо за попытку помочь. Кажется важным! – threeve

1

EDIT: Этот ответ не решает исходный вопрос. Я оставил его здесь, если он помогает связанным с этим трудностям с использованием модуля Ti.Facebook. См. Мой другой ответ, чтобы решить проблему. END EDIT

я заметил выше, но после того, как делать так, возникли некоторые более странное поведение, с результатом того, что я не мог надежно использовать обходной путь, учитывая (fbHaxButton). Я хочу объяснить, что происходит в моем случае, и показать мое собственное обходное решение (что тоже не очень хорошо). Возможно, первопричина одинакова для нас обоих.

Я еще не потрудился с Android, поэтому этот ответ относится к iOS.

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

facebook = require('facebook'); 

Ti.App.addEventListener('resumed', function (e) { 
    var launchOptions = Ti.App.getArguments(); 
    if(!launchOptions.url) { 
     return console.warn('Ignoring resume event with no url argument.'); 
    } 

    // this lib = https://github.com/garycourt/uri-js 
    var URI = require('vendor/uri'), 
     uriComponents = URI.parse(launchOptions.url), 
     expectedScheme = 'fb', 
     expectedHost = 'authorize'; 

    // I would like to be more specific about the uri, but we are limited 
    // in Titanium, and this will allow us to pretty certain 
    // that FB is sending us back to our app 
    if(uriComponents.scheme.search(expectedScheme) < 0 || uriComponents.host !== expectedHost) { 
     return console.warn('Resume event received, but scheme is incorrect. Ignoring.'); 
    } 

    // synthesize login event 
    facebook.fireEvent('myapp:login', { 
     success: 1, 
     token: facebook.getAccessToken(), 
     uid: result.id 
    }); 
}); 

facebook.addEventListener('myapp:login', function onFacebookAuth(e) { 
    facebook.removeEventListener('myapp:login', onFacebookAuth); 
    if(!e.success) { 
    // do fail action 
    } 
    // do success action 
}); 

facebook.initialize(); 
facebook.authorize(); 

Так, первоначально я стрелял и прослушивает событие под названием «Логин», который модуль facebook предположительно (в соответствии с Документами) будет срабатывать после авторизации завершена ,

В моем случае это событие запускалось, когда мое приложение находилось в фоновом режиме, после того как авторизовалось разрешение, но до того, как пользователь на самом деле нажал «ОК» в facebook. Мой слушатель ответит на это событие (ведение журнала и т. Д.), Но, похоже, произошел в отдельном потоке или каким-то образом отключился от моего приложения, так как он никогда не передавал его результат вместе с пользовательским интерфейсом. Я использую Q.js (kriw-kowal), и я верю в то, что происходит разрыв.

Прекращение прослушивания «входа» и просто обработка моего собственного синтезированного события исправили мою проблему.

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

Смежные вопросы