質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

Flutter

Flutterは、iOSとAndroidのアプリを同じコードで開発するためのフレームワークです。オープンソースで開発言語はDart。双方のプラットフォームにおける高度な実行パフォーマンスと開発効率を提供することを目的としています。

Firebase Authentication

Firebase Authenticationは、Firebaseを利用したユーザーの認証機能です。バックエンドサービス、SDK、アプリでのユーザー認証に使用できるUIライブラリが用意されています。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Twitter

Twitterは、140文字以内の「ツイート」と呼ばれる短文を投稿できるサービスです。Twitter上のほぼ全ての機能に対応するAPIが存在し、その関連サービスが多く公開されています。

Q&A

0回答

633閲覧

androidアプリで、Twitterログイン時からのコールバック時に、アプリが再起動するので、認証結果を受け取れず、ログインできない

murapon

総合スコア22

Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

Flutter

Flutterは、iOSとAndroidのアプリを同じコードで開発するためのフレームワークです。オープンソースで開発言語はDart。双方のプラットフォームにおける高度な実行パフォーマンスと開発効率を提供することを目的としています。

Firebase Authentication

Firebase Authenticationは、Firebaseを利用したユーザーの認証機能です。バックエンドサービス、SDK、アプリでのユーザー認証に使用できるUIライブラリが用意されています。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Twitter

Twitterは、140文字以内の「ツイート」と呼ばれる短文を投稿できるサービスです。Twitter上のほぼ全ての機能に対応するAPIが存在し、その関連サービスが多く公開されています。

0グッド

0クリップ

投稿2022/04/12 09:18

編集2022/04/12 11:56

発生している問題

FlutterでFirebase Authenticationを用いてTwitterログインを実装しています。
FlutterでFirebaseのTwitterログインを実装する
を参考に実装し、Twitterのログイン画面が表示されてるところまでは確認できたのですが、認証後にコールバックでアプリに戻った際に、アプリが再起動し、最初からプログラムが起動されてしまうので、

dart

1final authResult = twitterLogin.login();

の結果を受け取ることができません。

dart

1final twitterLogin = TwitterLogin( 2 apiKey: 'fsaf7893nkva0df', 3 apiSecretKey: 'l0n7zqrgerg93sd0f9723lg90u734', 4 redirectURI: 'example://', 5);

までは実行され、Twitterログイン画面が表示されますが、
コールバックでアプリに戻った際は、最初から実行されるので、この後の、

dart

1final authResult = twitterLogin.login();

以降の処理が動きません。

ソース

login.dart

dart

1import 'package:flutter/material.dart'; 2import 'package:firebase_auth/firebase_auth.dart'; 3import 'package:google_sign_in/google_sign_in.dart'; 4import 'package:self_scoring_app/views/pages/top_page.dart'; 5 6import 'package:twitter_login/twitter_login.dart'; 7 8import '../../cache/CacheUpdateStatus.dart'; 9import '../../utility/Config.dart'; 10import '../../utility/Messages.dart'; 11import '../widgets/PageStyle.dart'; 12 13class LoginPage extends StatefulWidget { 14 const LoginPage({ 15 Key key, 16 }) : super(key: key); 17 18 19 _LoginPageState createState() => _LoginPageState(); 20} 21 22class _LoginPageState extends State<LoginPage> { 23 final GlobalKey<FormState> _formKey = GlobalKey<FormState>(); 24 bool isUser = false; 25 26 27 void initState() { 28 super.initState(); 29 _load(); 30 } 31 32 33 Widget build(BuildContext context) { 34 bool _return = false; 35 if (this.isUser) { 36 _return = true; 37 } 38 return Scaffold( 39 appBar: AppBar( 40 backgroundColor: PageStyle.headerColor, 41 automaticallyImplyLeading: _return, 42 title: Padding( 43 padding: EdgeInsets.only(left: 5), 44 child: Text(Messages.pageLoginTitle, style: PageStyle.defaultTextStyle), 45 ), 46 titleSpacing: 0, 47 ), 48 body: Container( 49 child: Column( 50 children: <Widget>[ 51 Form( 52 key: _formKey, 53 child: Center( 54 child: Padding( 55 padding: const EdgeInsets.symmetric(horizontal: 24), 56 child: Column( 57 mainAxisAlignment: MainAxisAlignment.center, 58 mainAxisSize: MainAxisSize.min, 59 children: _getButtons(), 60 ), 61 ), 62 ), 63 ) 64 ], 65 ), 66 ), 67 ); 68 } 69 70 void _load() { 71 final FirebaseAuth firebaseAuth = FirebaseAuth.instance; 72 if (firebaseAuth.currentUser != null) { 73 this.isUser = true; 74 } 75 } 76 77 List<Widget> _getButtons() { 78 List<Widget> buttons = []; 79 80 buttons.add( 81 SizedBox( 82 child: ElevatedButton( 83 style: ElevatedButton.styleFrom( 84 primary: Colors.blue, 85 onPrimary: Colors.white, 86 ), 87 onPressed: () => _onSignInWithTwitter(), 88 child: Text(Messages.buttonTwitterLogin, style: PageStyle.buttonTextStyle), 89 ), 90 ), 91 ); 92 return buttons; 93 } 94 95 Future _onSignInWithTwitter() async { 96 print(Config.twitterConsumerKey); 97 print(Config.twitterSecretKey); 98 try { 99 final twitterLogin = TwitterLogin( 100 apiKey: Config.twitterConsumerKey, 101 apiSecretKey: Config.twitterSecretKey, 102 redirectURI: 'test-log://', 103 ); 104 print("test1--------1"); 105 final authResult = await twitterLogin.loginV2(); 106 print("test1--------2"); 107 print(authResult.status); 108 switch (authResult.status) { 109 case TwitterLoginStatus.loggedIn: 110 // success 111 print('====login success===='); 112 final credential = TwitterAuthProvider.credential( 113 accessToken: authResult.authToken, 114 secret: authResult.authTokenSecret, 115 ); 116 await FirebaseAuth.instance.signInWithCredential(credential); 117 break; 118 case TwitterLoginStatus.cancelledByUser: 119 // cancel 120 print('====login cancel===='); 121 break; 122 case TwitterLoginStatus.error: 123 // error 124 print('====login error===='); 125 break; 126 } 127 } catch (e) { 128 await showDialog( 129 context: context, 130 builder: (context) { 131 return AlertDialog( 132 title: Text(Messages.errorCommon, style: PageStyle.defaultTextStyle), 133 content: Text(e.toString(), style: PageStyle.defaultTextStyle), 134 ); 135 }, 136 ); 137 } 138 } 139} 140

AndroidManifest.xml

xml

1<application 2 android:icon="@mipmap/ic_launcher" 3 android:label="@string/app_name"> 4 <activity> 5 <省略> 6 <intent-filter> 7 <action android:name="android.intent.action.VIEW" /> 8 <category android:name="android.intent.category.DEFAULT" /> 9 <category android:name="android.intent.category.BROWSABLE" /> 10 <data android:scheme="example" /> <!-- host is option --> 11 </intent-filter> 12 </activity> 13</application>

試したこと

  • AndroidManifest.xmlの、intent-filterの値を変えてみました。
  • 「flutter_twitter」などの他のpackageが使えないか試したのですが、「The plugin flutter_twitter uses a deprecated version of the Android embedding.」というエラーが出て、インストール自体できませんでした。

起動中のアプリにそのまま戻して、結果を受け取れるようにするにはどうしたらよいでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2022/04/12 10:38

コードを提示しよう
murapon

2022/04/13 03:01 編集

返信ありがとうございます。 ほぼほぼ、参考サイトに記載されているソースと同じなんですが追記しました。
hoshi-takanori

2022/04/13 01:32

redirectURI は自分のアプリ名か何かにして、Twitter Developer サイトにも登録してますか?
murapon

2022/04/13 03:04

返信ありがとうございます。 はい、exampleの部分をアプリ名にしていて、Twitter Developer サイトにも登録しています。 この部分が間違っていると、Twitterのログイン画面に遷移しなかったり、認証後にエラーになりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問