#ios #angular #typescript #nativescript #angular2-nativescript
#iOS #angular #typescript #nativescript #angular2-nativescript
Вопрос:
Я пытаюсь реализовать логин поставщика идентификаторов Google в Nativescript с помощью плагина nativescript-social-login, пока он хорошо работает в Android, но совсем не работает в iOS.
Следуя инструкциям создателя плагина, я заметил, что некоторым классам требуются дополнительные файлы определений для typescript, поэтому, исследуя проблему, я натолкнулся на мысль, что подход к достижению входа в систему с помощью Google недавно изменился в iOS, а некоторые модули устарели. Я пытался следовать новому методу, я сам определил общий файл.ts для делегата GIDSignIn следующим образом
declare class GIDSignIn{
public static sharedInstance(): GIDSignIn;
public handleURLSourceApplication(url: NSURL, sourceApplication:NSString, annotiation: id): boolean;
}
Но даже если таким образом приложение компилируется, оно выходит из строя, как только я нажимаю кнопку входа.
Проверяя сборку в xcode, я получаю предупреждение, в котором говорится, что Firebase instace не настроен, как мне его настроить в коде Typescript
Комментарии:
1. Можете ли вы поделиться минимальным образцом проекта, в котором можно воспроизвести проблему? Между ними есть другие плагины, такие как nativescript-plugin-firebase или nativescript-oauth2 , которые также реализуют вход в Google.
Ответ №1:
Используйте плагин nativescript-oauth для входа в систему с помощью social.
Пример
login.component.ts:-
`import * as tnsOAuthModule from 'nativescript-oauth';
public login() {
tnsOAuthModule.login()
.then(() => {
let tokenModule = JSON.stringify(tnsOAuthModule);
let refereshToken = JSON.parse(tokenModule).instance.tokenResult.refreshToken;
this.getRefereshActiveToken(refereshToken);
})
.catch((er) => {
console.error('error logging in');
console.dir(er);
});
}`
Добавьте конфигурацию аутентификации Google в файл main.ts, например.
`import * as tnsOAuthModule from 'nativescript-oauth';
var myInitOptions: tnsOAuthModule.ITnsOAuthCredentials = {
authority: '',
authorizeEndpoint: '',
tokenEndpoint: '',
clientId: '',
redirectUri: 'urn:ietf:wg:oauth:2.0:oob',
responseType: "code",
scope: 'openid',
};
tnsOAuthModule.initCustom({
credentials: myInitOptions,
cookieDomains: ['http://demoweb.net'],
});`
Для IOS добавляйте этот код для перенаправления только после успешной аутентификации в Google в файле App_Resources -> iOS -> info.plist.
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>CFBundleURLName</key>
<string>app_id</string>
<key>CFBundleURLSchemes</key>
<array>
<string>appauth</string>
</array>
</dict>
</array>
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>