2017年10月30日 星期一
2017年10月25日 星期三
iOS 串接 Firebase 的 Database 無網路狀況
•會同步
•畫面在app內,斷線又恢復網路
•跳回桌面(短時間過後),有網路會直接同步
•跳回桌面(長時間過後),回到app(不從應用程式佇列滑掉)
•同步失敗
•從應用程式佇列滑掉,離線時做的事情就會不見
•假裝依然有網路
將資料寫入手機,沒網路依然可以動作,且將app從應用程式佇列滑掉,重開app又有網路後,依然會把斷線做的事同步。
Database.database().isPersistenceEnabled = true
將資料寫入手機,沒網路依然可以動作,且將app從應用程式佇列滑掉,重開app又有網路後,依然會把斷線做的事同步。
Database.database().isPersistenceEnabled = true
2017年10月17日 星期二
Google Admob V.S. AdSense
Admob 是手機 App 使用的廣告
AdSense 可以放在網頁的廣告
AdSense 可以放在網頁的廣告
iOS 串接 Firebase 的 Database
Firebase 官方網站:https://firebase.google.com/
要實作分為兩個部分:
第一部分:為專案加入 Firebase
第二部分:實作 Database 基礎功能
第一部分:
要實作分為兩個部分:
第一部分:為專案加入 Firebase
第二部分:實作 Database 基礎功能
第一部分:
- 先創專案
- 為專案安裝 Firebase,並在專案中實現
- 官方講解如何安裝 Firebase,示範CocoaPods步驟如下
- CocoaPods
- SDK
2.進入你的專案位置
cd 你的專案位置
cd 是進入後面位置的指令
ls 看現在的資料夾底下有什麼(就 ls ,後面不需接其他字)
*可以從 Finder 到專案底下,對檔案按右鍵 -> 取得資訊
把位置直接複製貼上終端機
終端機進入資料夾後:
3.創建 Podfile
已經有就不用創,創過再創一次也不會怎樣
pod init
4. Podfile 這時候會出現在你的專案底下,把下面這行加入你的 Podfile
pod 'Firebase/Core'
我自己多加了 Database 進來,但我沒有試過沒打會怎樣~
5.最後要安裝你的 Podfile裡面的東西
pod install
這時 Firebase 就在你的專案裡了
要開專案要點 . xcworkspace
不是上面的 .xcodeproj
要在專案中實現:
在 AppDelegate.swift 中實現
import Firebase
在application:didFinishLaunchingWithOptions:函式底下
FirebaseApp.configure()
第二部分:
官方的基礎功能文件
Firebase的設定:
!記得要把 Firebase 創出的 GoogleService-Info.plist 放到專案裡
不需登入就開放讀寫權限:
我範例的 JSON 格式:
Get a FIRDatabaseReference
var ref: DatabaseReference!
ref = Database.database().reference()
修改
修改時會先判斷現在資料庫有沒有這個 key 的值,
沒有的話會變成新增,
所以修改可以當新增用。
self.ref.child("users/(user.uid)/username").setValue(username)
更新內容:
let key = ref.child("posts").childByAutoId().key
let post = ["uid": userID,
"author": username,
"title": title,
"body": body]
let childUpdates = ["/posts/\(key)": post,
"/user-posts/\(userID)/\(key)/": post]
ref.updateChildValues(childUpdates)
新增
self.ref.child("users").child(user.uid).setValue(["username": username])
可以把不需要的拿掉,驗證身份、child...等
會把原本其他的全部蓋掉
會把原本其他的全部蓋掉
查詢
let userID = Auth.auth().currentUser?.uidref.child("users").child(userID!).observeSingleEvent(of: .value, with: { (snapshot) in
// Get user value
let value = snapshot.value as? NSDictionary
let username = value?["username"] as? String ?? ""
let user = User.init(username: username)
// ...
}) { (error) in
print(error.localizedDescription)
}
取出的是 snapshot
監聽 Database 是否有異動:
監聽 Database 是否有異動:
// Listen for new comments in the Firebase database
commentsRef.observe(.childAdded, with: { (snapshot) -> Void in
self.comments.append(snapshot)
self.tableView.insertRows(at: [IndexPath(row: self.comments.count-1, section: self.kSectionComments)], with: UITableViewRowAnimation.automatic)
})
異動分類:刪除
把值改成 nil 或是 remove 都可以刪除。
DEMO
我的範例專案:Github