プロバイダーの写真を取得するように、仕様を変更しました。
<追記 2020/08/03>
以下のように仕様を変更しました。
プロフィール写真はファイル名にユーザー識別子(user!.uid
)をつけ、FirebaseStorageにアップ。
Swift
1// カメラロールから写真を選ぶ
2 func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
3
4 dismiss(animated: true, completion: nil)
5 //保存のアラートを出す
6 let alert: UIAlertController = UIAlertController(title: "保存しますか?", message: "Want to save?", preferredStyle: UIAlertController.Style.alert)
7
8 // OKの場合
9 let defaultAction: UIAlertAction = UIAlertAction(title: "OK", style: UIAlertAction.Style.default, handler:{
10
11 (action: UIAlertAction!) -> Void in
12 print("OK")
13
14 if let pickedImage = info[.originalImage] as? UIImage {
15 self.imageView.contentMode = .scaleAspectFit
16 self.imageView.image = pickedImage
17 }
18
19 self.upload()
20 self.SuccessAlert()
21 })
22
23 //キャンセルの場合
24 let cancelAction: UIAlertAction = UIAlertAction(title: "キャンセル", style: UIAlertAction.Style.cancel, handler:{
25
26 (action: UIAlertAction!) -> Void in
27 print("選択をキャンセルしました")
28 })
29
30
31 alert.addAction(defaultAction)
32 alert.addAction(cancelAction)
33
34
35 self.present(alert, animated: true, completion: nil)
36 }
37
38 // Firebaseにアップロード
39 fileprivate func upload() {
40
41 let storageRef = Storage.storage().reference(forURL: "gs://XXXXXXXXXXXXXXXXXXX.appspot.com").child("users").child("profile").child("(user!.uid).jpg")
42 let metaData = StorageMetadata()
43 metaData.contentType = "image/jpg"
44 if let uploadData = self.imageView.image?.jpegData(compressionQuality: 0.3) {
45 storageRef.putData(uploadData, metadata: metaData) { (metadata , error) in
46 if error != nil {
47 print("error: (error!.localizedDescription)")
48 return
49 }
50 storageRef.downloadURL(completion: { (url, error) in
51 if error != nil {
52 print("error: (error!.localizedDescription)")
53 }
54 print("url: (url!.absoluteString)")
55 let changeRequest = self.firebaseAuth.currentUser?.createProfileChangeRequest()
56 if let photoURL = URL(string: url!.absoluteString){
57 changeRequest?.photoURL = photoURL
58 }
59 changeRequest?.commitChanges { (error) in
60 // ...
61 }
62
63 })
64 }
65 }
66 }
67
68 // 写真を選ぶのをキャンセル
69 func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
70 dismiss(animated: true, completion: nil)
71 print("キャンセルされました")
72 }
73
74
75 func SuccessAlert() {
76
77 var errortitle = "Save complete."
78 var message = "Saved to camera roll."
79 var errorok = "OK"
80
81 errortitle = NSLocalizedString("Save complete.", comment: "")
82 message = NSLocalizedString("Saved to camera roll.", comment: "")
83 errorok = NSLocalizedString("OK", comment: "")
84
85
86 let alert: UIAlertController = UIAlertController(title: errortitle, message: message, preferredStyle: UIAlertController.Style.alert)
87
88 let defaultAction: UIAlertAction = UIAlertAction(title: errorok, style: UIAlertAction.Style.default, handler:{
89 // ボタンが押された時の処理を書く(クロージャ実装)
90 (action: UIAlertAction!) -> Void in
91 print("OK")
92 })
93
94 // ③ UIAlertControllerにActionを追加
95 alert.addAction(defaultAction)
96
97 // ④ Alertを表示
98 present(alert, animated: true, completion: nil)
99
100 }