回答編集履歴

5

内容変更。

2019/01/07 16:35

投稿

hameji001
hameji001

スコア639

test CHANGED
@@ -1,10 +1,6 @@
1
1
  ~~これでどうでしょう???
2
2
 
3
- ~~
4
-
5
- ~~
6
-
7
- Swift
3
+ Swift
8
4
 
9
5
  // currentUserがnilならログインしていない
10
6
 
@@ -39,6 +35,8 @@
39
35
  電話番号ごとに「ユーザーUID」というものが作られることをFirebaseのconsoleで確認できるでしょうか?
40
36
 
41
37
  なので、このユーザーUIDを用いることで、同じ本人(固有文字列を知っている人)かどうかを照合できます。
38
+
39
+ しかし、このUIDを他のデータベース等と照合するのはgoogleでは非推奨とされています。(どこかに書いてありました)
42
40
 
43
41
  コードは多少はしょりますが、
44
42
 
@@ -136,7 +134,7 @@
136
134
 
137
135
  FirebaseのAuthenticationの仕様上、
138
136
 
139
- 番号を入力ワンタイム和すワードを要求し、ログインした時点で、
137
+ 番号を入力ワンタイムパスワードを要求し、ログインした時点で、
140
138
 
141
139
  これまで登録がなくても、携帯番号は登録されますし、
142
140
 
@@ -146,7 +144,7 @@
146
144
 
147
145
 
148
146
 
149
- 上記コードの「success?.user.」と打ち込んでメソッドをみてみると、
147
+ ~~上記コードの「success?.user.」と打ち込んでメソッドをみてみると、
150
148
 
151
149
  userdefaults.standardのように
152
150
 
@@ -158,8 +156,36 @@
158
156
 
159
157
  fs_setFloatVariable("", forKey: "")
160
158
 
161
- などがあるので、これらを利用して、
159
+ などがあるので、これらを利用して、~~
162
160
 
161
+
162
+
163
+ 上記を試してみましたが、うまく利用できませんでした。
164
+
165
+ やはり、firebaseのrealtime databaseかfirestoreに自分でデータ登録するか、
166
+
167
+
168
+
169
+ もしくはfirebaseで与えられてるユーザーのemail, displayname, photoURL などの
170
+
163
- 回数や日付などの情報をユーザーに保持させて、呼び出せばいいと思ます。
171
+ 要素の初期値を変更したかうかで条件分岐するいいのではなでしょうか?
172
+
173
+
164
174
 
165
175
  これで解決できるのではないでしょうか???
176
+
177
+
178
+
179
+ ちなみに、調べた限り、firebaseのAuthenticationの
180
+
181
+ consoleに表示されている作成日とログイン日は
182
+
183
+ Administer権限がないと取得できないみたいなので、
184
+
185
+ 実際にアプリのコード内で利用することはできないと思います。
186
+
187
+ [参考URL] https://firebase.google.com/docs/auth/admin/manage-users?hl=ja
188
+
189
+
190
+
191
+ 長くなってしまいました。

4

最後

2019/01/07 16:35

投稿

hameji001
hameji001

スコア639

test CHANGED
@@ -120,23 +120,29 @@
120
120
 
121
121
  もう一度、質問を読んでみましたが、
122
122
 
123
+ もしかして、自分でログイン画面と登録画面を実装し、場合分けし、
124
+
123
- 自分でログイン画面と登録画面を分けて、表示を変えたいということですか?
125
+ 表示を変えたい・アプリ特有のユーザーの設定情報を保存したいということですか?
124
126
 
125
127
 
126
128
 
127
- その場合は、どこかにログイン回数や最終ログイン日などの
129
+ その場合は、Firebaseにログイン回数や最終ログイン日
128
130
 
131
+ 場合によってはアプリの設定情報なども
132
+
129
- ユーザー情報保存した方がいいのではないでしょうか?
133
+ ユーザー情報として保存した方がいいのではないでしょうか?
130
134
 
131
135
 
132
136
 
133
137
  FirebaseのAuthenticationの仕様上、
134
138
 
135
- 番号を入力ログインした時点で、これまで登録がなくても、
139
+ 番号を入力ワンタイム和すワードを要求し、ログインした時点で、
136
140
 
137
- 携帯番号は登録されますし、uidも作成されてしまうので、
141
+ これまで登録がなくても、携帯番号は登録されますし、
138
142
 
143
+ uidも作成されてしまうので、その後でそれらを取得しても、
144
+
139
- その後でそれらを取得しても、区別はできないと思われます。
145
+ 区別はできないと思われます。
140
146
 
141
147
 
142
148
 

3

今度こそ最終

2019/01/07 15:27

投稿

hameji001
hameji001

スコア639

test CHANGED
@@ -1,8 +1,10 @@
1
- これでどうでしょう???
1
+ ~~これでどうでしょう???
2
2
 
3
+ ~~
3
4
 
5
+ ~~
4
6
 
5
- ``` Swift
7
+ Swift
6
8
 
7
9
  // currentUserがnilならログインしていない
8
10
 
@@ -16,7 +18,7 @@
16
18
 
17
19
  }
18
20
 
19
- ```
21
+ ~~
20
22
 
21
23
 
22
24
 

2

最終版

2019/01/07 15:21

投稿

hameji001
hameji001

スコア639

test CHANGED
@@ -34,7 +34,7 @@
34
34
 
35
35
  まず、1度電話番号でユーザー登録すると
36
36
 
37
- 電話番号ごとに「ユーザーUID」というものが作られることをconsoleで確認できるでしょうか?
37
+ 電話番号ごとに「ユーザーUID」というものが作られることをFirebaseのconsoleで確認できるでしょうか?
38
38
 
39
39
  なので、このユーザーUIDを用いることで、同じ本人(固有文字列を知っている人)かどうかを照合できます。
40
40
 
@@ -113,3 +113,45 @@
113
113
 
114
114
 
115
115
  これで答えになるでしょうか???
116
+
117
+
118
+
119
+ もう一度、質問を読んでみましたが、
120
+
121
+ 自分でログイン画面と登録画面を分けて、表示を変えたいということですか?
122
+
123
+
124
+
125
+ その場合は、どこかにログイン回数や最終ログイン日などの
126
+
127
+ ユーザー情報を保存した方がいいのではないでしょうか?
128
+
129
+
130
+
131
+ FirebaseのAuthenticationの仕様上、
132
+
133
+ 番号を入力ログインした時点で、これまで登録がなくても、
134
+
135
+ 携帯番号は登録されますし、uidも作成されてしまうので、
136
+
137
+ その後でそれらを取得しても、区別はできないと思われます。
138
+
139
+
140
+
141
+ 上記コードの「success?.user.」と打ち込んでメソッドをみてみると、
142
+
143
+ userdefaults.standardのように
144
+
145
+ fs_setBoolVariable("", forKey: ""),
146
+
147
+ fs_setIntegerVariable("", forKey: ""),
148
+
149
+ fs_setVariable("", forKey: ""),
150
+
151
+ fs_setFloatVariable("", forKey: "")
152
+
153
+ などがあるので、これらを利用して、
154
+
155
+ 回数や日付などの情報をユーザーに保持させて、呼び出せばいいと思います。
156
+
157
+ これで解決できるのではないでしょうか???

1

再検証、書き直しました。

2019/01/07 15:20

投稿

hameji001
hameji001

スコア639

test CHANGED
@@ -17,3 +17,99 @@
17
17
  }
18
18
 
19
19
  ```
20
+
21
+
22
+
23
+ /_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
24
+
25
+
26
+
27
+ Firebase Authentication で 携帯番号認証 を 実装して試してみました。
28
+
29
+
30
+
31
+ すると、hirukoさん、の言っているような挙動は認められませんでした。
32
+
33
+
34
+
35
+ まず、1度電話番号でユーザー登録すると
36
+
37
+ 電話番号ごとに「ユーザーUID」というものが作られることをconsoleで確認できるでしょうか?
38
+
39
+ なので、このユーザーUIDを用いることで、同じ本人(固有文字列を知っている人)かどうかを照合できます。
40
+
41
+ コードは多少はしょりますが、
42
+
43
+
44
+
45
+ ```Swift
46
+
47
+ Auth.auth().signInAndRetrieveData(with: credential) { (success, error) in
48
+
49
+ if error != nil {
50
+
51
+ print("error:", error)
52
+
53
+ } else {
54
+
55
+ print("success:", success)
56
+
57
+ print(success?.user.uid) // <-この文字列が携帯番号ごとに一意となります。
58
+
59
+ }
60
+
61
+ }
62
+
63
+ ```
64
+
65
+
66
+
67
+ で、本題はここからですが、想定している2通りの場面を考えると
68
+
69
+
70
+
71
+ ①既にユーザー登録した人が他の端末でアプリを使用する時 
72
+
73
+ これは、携帯電話番号が変わらず本人のものかどうかが大事になります。
74
+
75
+ もし、本人のものである場合は、その携帯に送られてくるワンタイムパスワード番号を入力してもらえれば、
76
+
77
+ 本人の情報を取得でき、本人としてログインできます。
78
+
79
+ ex) 携帯を手元に持ってて、たまたまパソコンからサービスにログイン、
80
+
81
+ 送られてくるワンタイムパスワードをその場で見て入力するパターン
82
+
83
+
84
+
85
+ 一方、もし携帯電番号がすでに本人のものでなくなった場合ですが、
86
+
87
+ この場合はワンタイムパスワードをもらえないので、他のログイン方法を確保しておく必要があります。
88
+
89
+ それを利用して携帯電話番号を修正できるようにしておかなければなりません。
90
+
91
+
92
+
93
+ ②ユーザー登録済みの人が一旦アプリを削除して、再インストールした時
94
+
95
+ 自分の環境で行ってみましたが、同じ番号を用いている限り、
96
+
97
+ 登録画面(絵を実際に選ぶ作業???)に飛ばされることはなかったです。
98
+
99
+ 本当に番号を初めて入力する初回のみ、Robotじゃない確認で絵を選ばされましたが、
100
+
101
+ それ以外はRobotじゃない確認をしています。って表示されるだけで、
102
+
103
+ 勝手に自動認証してくれて、ワンタイムパスワードが送られてきましたよ。
104
+
105
+ それはアプリを一度削除し、インストールし直したとしてもです。
106
+
107
+
108
+
109
+ 仕様上、botじゃないという検証の自動認証ページに関しては、
110
+
111
+ 飛ばすことはできないと思います。
112
+
113
+
114
+
115
+ これで答えになるでしょうか???