{"id":3192,"date":"2019-06-28T11:38:30","date_gmt":"2019-06-28T03:38:30","guid":{"rendered":"http:\/\/blog.hoyo.idv.tw\/?p=3192"},"modified":"2019-06-28T11:38:30","modified_gmt":"2019-06-28T03:38:30","slug":"google-firebase","status":"publish","type":"post","link":"https:\/\/blog.hoyo.idv.tw\/?p=3192","title":{"rendered":"Google Firebase"},"content":{"rendered":"<p>\u76f8\u95dc\u5f8c\u53f0\u7ba1\u7406\u7db2\u5740<\/p>\n<ul>\n<li><a href=\"https:\/\/console.cloud.google.com\" target=\"_blank\" rel=\"noopener\">Google Cloud Platform<\/a><\/li>\n<li><a href=\"https:\/\/console.firebase.google.com\/\" target=\"_blank\" rel=\"noopener\">Firebase Console<\/a><\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul>\n<li><a href=\"https:\/\/firebase.google.com\/\" target=\"_blank\" rel=\"noopener\">Firebase<\/a><\/li>\n<li><a href=\"https:\/\/www.firebase.com\/docs\/rest\/api\/\" target=\"_blank\" rel=\"noopener\">REST API - Firebase<\/a><\/li>\n<\/ul>\n<p>--<\/p>\n<h2>Database<\/h2>\n<p><strong>\u65b0\u589e\u3001\u4fee\u6539<\/strong><\/p>\n<pre class=\"lang:default decode:true\">curl -X PUT -d '{\"alanisawesome\": {\"name\": \"Alan Turing\",\"birthday\": \"June 23, 1912\"}}' https:\/\/fbtest-d047e.firebaseio.com\/rest\/securing-data\/example.json<\/pre>\n<p>\u5728 Firebase \u7684\u5f8c\u53f0\u53ef\u4ee5\u5373\u6642\u770b\u5230\u4ee5\u4e0b\u7d50\u679c<\/p>\n<p><a href=\"\/\/blog.hoyo.idv.tw\/wp-content\/uploads\/2016\/08\/Image-276.png\" data-rel=\"lightbox-image-0\" data-rl_title=\"\" data-rl_caption=\"\" title=\"\"><img loading=\"lazy\" class=\"alignnone wp-image-3233 size-medium\" src=\"https:\/\/blog.hoyo.idv.tw\/wp-content\/uploads\/2016\/08\/Image-276-300x140.png\" alt=\"Image 276\" width=\"300\" height=\"140\" srcset=\"https:\/\/blog.hoyo.idv.tw\/wp-content\/uploads\/2016\/08\/Image-276-300x140.png 300w, https:\/\/blog.hoyo.idv.tw\/wp-content\/uploads\/2016\/08\/Image-276-500x233.png 500w, https:\/\/blog.hoyo.idv.tw\/wp-content\/uploads\/2016\/08\/Image-276.png 941w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>\u4f7f\u7528\u76f8\u540c\u7684\u8def\u5f91\u7d66\u65bc\u4e0d\u540c\u7684 value \u5c31\u6703\u76f4\u63a5\u66f4\u65b0\u503c<\/p>\n<h2>\u4f7f\u7528 jQuery<\/h2>\n<ul>\n<li><a href=\"http:\/\/stackoverflow.com\/questions\/2153917\/how-to-send-a-put-delete-request-in-jquery\">How to send a PUT\/DELETE request in jQuery?<\/a><\/li>\n<\/ul>\n<pre class=\"lang:js decode:true\">    var Post = '{\"alanisawesome\": {\"name\": \"Alan Turing\",\"birthday\": \"June 23, 1912\"}}';\r\n    $.ajax({\r\n        url: 'https:\/\/fbtest-d047e.firebaseio.com\/rest\/securing-data\/example.json',\r\n        type: 'PUT',\r\n        data: Post,\r\n        success: function(data) { }\r\n    });\r\n<\/pre>\n<p><strong>\u8b80\u53d6<\/strong><\/p>\n<p>\u7db2\u9801\u524d\u7aef<\/p>\n<pre class=\"lang:default decode:true\">firebase.database().ref(\"\/member\/\").limitToLast(3).on('child_added', function(data) {\r\n    \/\/console.log(data.val());\r\n    var val = data.val();\r\n    console.log(val.name);\r\n\r\n    html = '&lt;div class=\"message-container visible\"&gt;' +\r\n    '&lt;div class=\"spacing\"&gt;&lt;div class=\"pic\" style=\"background-image: url('+ val.ImageUrl +');\"&gt;&lt;\/div&gt;&lt;\/div&gt;' +\r\n    '&lt;div class=\"message\"&gt;'+ val.message +'&lt;\/div&gt;' +\r\n    '&lt;div class=\"name\"&gt;'+ val.name +'&lt;\/div&gt;' +\r\n    '&lt;\/div&gt;';\r\n    \r\n    var MessageList = $('#message-filler');\r\n    MessageList.append(html);\r\n    $('#messages').scrollTop( MessageList.prop(\"scrollHeight\") );\r\n});    \r\n<\/pre>\n<p>&nbsp;<\/p>\n<p>\u4f7f\u7528 curl \u6307\u4ee4<\/p>\n<pre class=\"lang:default decode:true\">curl \"https:\/\/fbtest-d047e.firebaseio.com\/rest\/securing-data\/example.json\"<\/pre>\n<pre class=\"lang:default decode:true \">{\"alanisawesome\":{\"birthday\":\"June 23, 1922\",\"name\":\"Alan Turing\"}}<\/pre>\n<p>&nbsp;<\/p>\n<p>\u52a0\u4e0a ?print= \u53ef\u4ee5\u8a2d\u5b9a\u4e0d\u540c\u7684\u8f38\u51fa\u683c\u5f0f<\/p>\n<pre class=\"lang:default decode:true\">curl 'https:\/\/fbtest-d047e.firebaseio.com\/rest\/securing-data\/example.json?print=pretty'<\/pre>\n<pre class=\"lang:default decode:true\">{\r\n  \"alanisawesome\" : {\r\n    \"birthday\" : \"June 23, 1922\",\r\n    \"name\" : \"Alan Turing\"\r\n  }\r\n}<\/pre>\n<p>&nbsp;<\/p>\n<p>--<\/p>\n<h2>\u522a\u9664<\/h2>\n<ul>\n<li><a href=\"https:\/\/www.firebase.com\/docs\/rest\/api\/\">API Reference<\/a><\/li>\n<\/ul>\n<p>\u60f3\u8981\u522a\u9664 birthday \u8cc7\u6599\u6642\uff0c\u53ef\u4ee5\u4f7f\u7528\u4ee5\u4e0b\u6307\u4ee4<\/p>\n<pre class=\"lang:default decode:true \">curl -X DELETE https:\/\/fbtest-d047e.firebaseio.com\/rest\/securing-data\/example\/alanisawesome\/birthday.json<\/pre>\n<p>&nbsp;<\/p>\n<p>--<\/p>\n<h2>Storage - \u6a94\u6848\u5132\u5b58<\/h2>\n<p>&nbsp;<\/p>\n<p>\u958b\u653e\u5168\u90e8\u4f7f\u7528\u8005\u53ef<\/p>\n<pre class=\"lang:default decode:true\">service firebase.storage {\r\n  match \/b\/fbtest-d047e.appspot.com\/o {\r\n    match \/{allPaths=**} {\r\n      allow read, write: if true == true;\r\n    }\r\n  }\r\n}<\/pre>\n<p>\u6700\u7c21\u55ae\u7684\u4e0a\u50b3\u7bc4\u4f8b<\/p>\n<pre class=\"lang:default decode:true \">&lt;!doctype html&gt;\r\n&lt;html lang=\"en\"&gt;\r\n&lt;head&gt;\r\n    &lt;meta charset=\"utf-8\"&gt;\r\n    &lt;meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\"&gt;\r\n    &lt;meta name=\"description\" content=\"Learn how to use the Firebase platform on the Web\"&gt;\r\n    &lt;meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"&gt;\r\n    &lt;title&gt;Firebase&lt;\/title&gt;\r\n&lt;\/head&gt;\r\n&lt;body&gt;\r\n\r\n&lt;form id=\"image-form\" action=\"#\"&gt;\r\n    &lt;input id=\"mediaCapture\" type=\"file\" accept=\"image\/*\"&gt;\r\n\r\n    &lt;button type=\"button\" onclick=\"ss()\"&gt;aaa&lt;\/button&gt;\r\n&lt;\/form&gt;\r\n\r\n&lt;!-- Firebase --&gt;\r\n&lt;script src=\"js\/firebase.js\"&gt;&lt;\/script&gt;\r\n&lt;script&gt;\r\n    \/\/ Initialize Firebase\r\n    var config = {\r\n        apiKey: \"AIzaSyCfV0A1Q-Ln-evzUScnnq_kLedOB0BAl7Q\",\r\n        authDomain: \"fbtest-d047e.firebaseapp.com\",\r\n        databaseURL: \"https:\/\/fbtest-d047e.firebaseio.com\",\r\n        storageBucket: \"fbtest-d047e.appspot.com\",\r\n    };\r\n    firebase.initializeApp(config);\r\n\r\n    \/\/ Get a reference to the storage service, which is used to create references in your storage bucket\r\n    function ss() {\r\n\r\n        var storage = firebase.storage();\r\n\r\n        var storageRef = firebase.storage().ref();\r\n\r\n        var metadata = {\r\n            contentType: 'image\/jpeg',\r\n        };\r\n\r\n        var file = document.getElementById('mediaCapture').files[0];\r\n\r\n        \/\/ Upload the file and metadata\r\n        var uploadTask = storageRef.child('mountains.jpg').put(file, metadata);\r\n\r\n        uploadTask.on('state_changed', function(snapshot){\r\n            \/\/ Observe state change events such as progress, pause, and resume\r\n            \/\/ See below for more detail\r\n        }, function(error) {\r\n            \/\/ Handle unsuccessful uploads\r\n        }, function() {\r\n            \/\/ Handle successful uploads on complete\r\n            \/\/ For instance, get the download URL: https:\/\/firebasestorage.googleapis.com\/...\r\n            var downloadURL = uploadTask.snapshot.downloadURL;\r\n\r\n            console.log(downloadURL);\r\n        });\r\n    }\r\n&lt;\/script&gt;\r\n\r\n&lt;\/body&gt;\r\n&lt;\/html&gt;<\/pre>\n<p>&nbsp;<\/p>\n<p>--<\/p>\n<h2>Google \u4f7f\u7528\u8005\u8a8d\u8b49<\/h2>\n<ul>\n<li><a href=\"https:\/\/firebase.google.com\/docs\/auth\/web\/google-signin\" target=\"_blank\" rel=\"noopener\">Authenticate Using Google Sign-In with JavaScript<\/a><\/li>\n<li><a href=\"http:\/\/stackoverflow.com\/questions\/37344066\/firebase-this-domain-is-not-authorized\" target=\"_blank\" rel=\"noopener\">Firebase: This domain is not authorized<\/a><\/li>\n<\/ul>\n<pre class=\"lang:js decode:true \">function Login() {\r\n    var provider = new firebase.auth.GoogleAuthProvider();\r\n    \/\/provider.addScope('https:\/\/www.googleapis.com\/auth\/plus.login');\r\n    firebase.auth().signInWithPopup(provider).then(function (result) {\r\n\r\n        \/\/ This gives you a Google Access Token. You can use it to access the Google API.\r\n        var token = result.credential.accessToken;\r\n        \/\/ The signed-in user info.\r\n        user = result.user;\r\n        \/\/console.log(user);\r\n\r\n        if ( user['uid'] ) {\r\n            $('#message-form').removeAttr('hidden');\r\n            $('#image-form').removeAttr('hidden');\r\n            $('#sign-out').removeAttr('hidden');\r\n            $('#sign-in').attr('hidden', '');\r\n        }\r\n\r\n        \/\/ ... \r\n    });\r\n}\r\n<\/pre>\n<p>--<\/p>\n<h2>Google Firebase \u5f8c\u7aef\u652f\u63f4<\/h2>\n<ul>\n<li><a href=\"https:\/\/firebase.google.com\/pricing\/\" target=\"_blank\" rel=\"noopener\">Pricing<\/a><\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p>--<\/p>\n<h2>\u6a94\u6848\u5b58\u5132<\/h2>\n<ul>\n<li><a href=\"https:\/\/console.cloud.google.com\/storage\/\" target=\"_blank\" rel=\"noopener\">Google\u00a0Bucket<\/a><\/li>\n<\/ul>\n<p>\u5728\u7bc4\u4f8b\u7684\u8a2d\u5b9a\u5167\uff0c\u6709\u4e00\u500b\u00a0storageBucket \u5132\u5b58\u7a7a\u9593\u7684\u9078\u9805\uff0c\u4e26\u4e0d\u662f\u8b93\u4f60\u8f38\u5165 Firebase \u7684\u8def\u5f91\u6216\u8cc7\u6599\u593e\u540d\u7a31\u7684\uff0c\u5fc5\u9808\u8981\u5230 Google Cloud Platform \u7684 Storge \u5167\u53d6\u5f97 Bucket \u5b8c\u6574\u8def\u5f91\u5f8c\u586b\u5165\uff0c\u4f8b\u5982<\/p>\n<pre class=\"lang:default decode:true \">storageBucket: \"test-chat-f15dd.appspot.com\",<\/pre>\n<p>&nbsp;<\/p>\n<p>--<\/p>\n<h2><\/h2>\n<div class=\"pvc_clear\"><\/div>\n<p class=\"pvc_stats all \" data-element-id=\"3192\" style=\"\"><i class=\"pvc-stats-icon medium\" aria-hidden=\"true\"><svg aria-hidden=\"true\" focusable=\"false\" data-prefix=\"far\" data-icon=\"chart-bar\" role=\"img\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"svg-inline--fa fa-chart-bar fa-w-16 fa-2x\"><path fill=\"currentColor\" d=\"M396.8 352h22.4c6.4 0 12.8-6.4 12.8-12.8V108.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v230.4c0 6.4 6.4 12.8 12.8 12.8zm-192 0h22.4c6.4 0 12.8-6.4 12.8-12.8V140.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v198.4c0 6.4 6.4 12.8 12.8 12.8zm96 0h22.4c6.4 0 12.8-6.4 12.8-12.8V204.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v134.4c0 6.4 6.4 12.8 12.8 12.8zM496 400H48V80c0-8.84-7.16-16-16-16H16C7.16 64 0 71.16 0 80v336c0 17.67 14.33 32 32 32h464c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16zm-387.2-48h22.4c6.4 0 12.8-6.4 12.8-12.8v-70.4c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v70.4c0 6.4 6.4 12.8 12.8 12.8z\" class=\"\"><\/path><\/svg><\/i> &nbsp;1,944&nbsp;total views, &nbsp;1&nbsp;views today<\/p>\n<div class=\"pvc_clear\"><\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u76f8\u95dc\u5f8c\u53f0\u7ba1\u7406\u7db2\u5740 Google...<\/p>\n<div class=\"pvc_clear\"><\/div>\n<p class=\"pvc_stats all \" data-element-id=\"3192\" style=\"\"><i class=\"pvc-stats-icon medium\" aria-hidden=\"true\"><svg aria-hidden=\"true\" focusable=\"false\" data-prefix=\"far\" data-icon=\"chart-bar\" role=\"img\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"svg-inline--fa fa-chart-bar fa-w-16 fa-2x\"><path fill=\"currentColor\" d=\"M396.8 352h22.4c6.4 0 12.8-6.4 12.8-12.8V108.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v230.4c0 6.4 6.4 12.8 12.8 12.8zm-192 0h22.4c6.4 0 12.8-6.4 12.8-12.8V140.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v198.4c0 6.4 6.4 12.8 12.8 12.8zm96 0h22.4c6.4 0 12.8-6.4 12.8-12.8V204.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v134.4c0 6.4 6.4 12.8 12.8 12.8zM496 400H48V80c0-8.84-7.16-16-16-16H16C7.16 64 0 71.16 0 80v336c0 17.67 14.33 32 32 32h464c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16zm-387.2-48h22.4c6.4 0 12.8-6.4 12.8-12.8v-70.4c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v70.4c0 6.4 6.4 12.8 12.8 12.8z\" class=\"\"><\/path><\/svg><\/i> &nbsp;1,944&nbsp;total views, &nbsp;1&nbsp;views today<\/p>\n<div class=\"pvc_clear\"><\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[31],"tags":[],"_links":{"self":[{"href":"https:\/\/blog.hoyo.idv.tw\/index.php?rest_route=\/wp\/v2\/posts\/3192"}],"collection":[{"href":"https:\/\/blog.hoyo.idv.tw\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.hoyo.idv.tw\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.hoyo.idv.tw\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.hoyo.idv.tw\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=3192"}],"version-history":[{"count":12,"href":"https:\/\/blog.hoyo.idv.tw\/index.php?rest_route=\/wp\/v2\/posts\/3192\/revisions"}],"predecessor-version":[{"id":6011,"href":"https:\/\/blog.hoyo.idv.tw\/index.php?rest_route=\/wp\/v2\/posts\/3192\/revisions\/6011"}],"wp:attachment":[{"href":"https:\/\/blog.hoyo.idv.tw\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3192"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.hoyo.idv.tw\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=3192"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.hoyo.idv.tw\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=3192"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}