Как я могу использовать SFAuthenticationSession из nativescript?
Я работаю над поведением SSO в приложении на нативном скрипте. У меня есть следующий код Swift, который работает правильно:
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
var webAuthSession: SFAuthenticationSession?
@IBAction func click(sender: AnyObject)
{
let authURL = URL(string: "http://localhost:5000/redirect.html");
let callbackUrlScheme = "myApp://"
self.webAuthSession = SFAuthenticationSession.init(url: authURL!, callbackURLScheme: callbackUrlScheme, completionHandler: { (callBack:URL?, error:Error?) in
// handle auth response
guard error == nil, let successURL = callBack else {
return
}
print(successURL.absoluteString)
})
self.webAuthSession?.start()
}
}
Из этого я придумал эквивалентный машинописный код (в файле.ios.ts)
function callback(p1: NSURL, p2: NSError) {
console.log('Got into the url callback');
console.log(p1);
console.log(p2);
};
public onTap() {
const session = new SFAuthenticationSession(
{
URL: NSURL.URLWithString('localhost:3500/redirect.html'),
callbackURLScheme: 'myApp://',
completionHandler: callback,
},);
console.log('session created');
console.log('the session is ', session);
console.log('the start method is ', session.start);
console.log('about to call it');
session.start();
console.log('After calling start');
}
Все это прекрасно компилируется и собирается, но при запуске происходит сбой при вызове session.start() через секунду или около того. Я получаю выходные данные до этого, включая метод "собираюсь вызвать", но ничего после, даже сообщение об ошибке или дамп стека.
Есть ли что-то очевидное, что я здесь делаю не так? Есть ли что-то особенное, что нужно сделать для вызова от машинописного текста до нативных методов общей библиотеки ios?
2 ответа
Я нашел проблему сегодня, и это смущающая тривиальная ошибка.
когда я сделал перевод, мне удалось удалить http:// из исходного кода.
URL: NSURL.URLWithString('localhost:3500/redirect.html'),
при запуске на компьютере коллеги мы получили более подробную информацию в журнале, и оказалось, что единственными поддерживаемыми схемами являются http или https. Он должен быть явно добавлен в URL.
так что это исправляет (в дополнение к изменению Маноя выше)
URL: NSURL.URLWithString('http://localhost:3500/redirect.html'),
Я думаю, что вы должны хранить ссылку на session
переменная где-то глобально в файл. Поскольку его область действия локальна для функции, она может быть уничтожена, как только onTap
область действия функции закончена. Вы могли бы попробовать,
function callback(p1: NSURL, p2: NSError) {
console.log('Got into the url callback');
console.log(p1);
console.log(p2);
};
let session;
public onTap() {
session = new SFAuthenticationSession(
{
URL: NSURL.URLWithString('localhost:3500/redirect.html'),
callbackURLScheme: 'myApp://',
completionHandler: callback,
},);
console.log('session created');
console.log('the session is ', session);
console.log('the start method is ', session.start);
console.log('about to call it');
session.start();
console.log('After calling start');
}