├── .github └── ISSUE_TEMPLATE │ ├── ---bug-report.md │ ├── ---docs-fix-improvement-report.md │ ├── ---feature-request.md │ └── ---missing-content.md ├── .gitignore ├── .husky └── pre-commit ├── .nvmrc ├── .rvmrc ├── CNAME ├── CODE_OF_CONDUCT.md ├── Gemfile ├── Gemfile.lock ├── LICENSE ├── README.md ├── _app ├── UI.js ├── echo.js └── main.js ├── _config.yml ├── _includes ├── android │ ├── analytics.md │ ├── config.md │ ├── files.md │ ├── geopoints.md │ ├── getting-started.md │ ├── handling-errors.md │ ├── local-datastore.md │ ├── objects.md │ ├── push-notifications.md │ ├── queries.md │ ├── roles.md │ ├── user-interface.md │ └── users.md ├── arduino │ ├── analytics.md │ ├── cloud-code.md │ ├── getting-started.md │ ├── objects.md │ ├── other.md │ ├── push-notifications.md │ ├── queries.md │ ├── requests.md │ └── users.md ├── cloudcode │ ├── cloud-code-advanced.md │ ├── cloud-code.md │ └── getting-started.md ├── common │ ├── data.md │ ├── errors.md │ ├── performance.md │ ├── relations.md │ ├── security.md │ ├── server-customize.md │ └── sessions.md ├── dart │ ├── cloud-code.md │ ├── config.md │ ├── files.md │ ├── getting-started.md │ ├── objects.md │ ├── other-features.md │ ├── queries.md │ ├── storage.md │ └── users.md ├── defined-schema │ ├── class-level-permissions.md │ ├── core-classes-fields.md │ ├── fields.md │ ├── getting-started.md │ ├── how-to-use-on-existing-parse-server.md │ ├── indexes.md │ └── options.md ├── dotnet │ ├── analytics.md │ ├── config.md │ ├── files.md │ ├── geopoints.md │ ├── getting-started.md │ ├── handling-errors.md │ ├── objects.md │ ├── push-notifications.md │ ├── queries.md │ ├── roles.md │ └── users.md ├── embedded_c │ ├── cloud-code.md │ ├── getting-started.md │ ├── handling-errors.md │ ├── objects.md │ ├── push-notifications.md │ ├── requests.md │ ├── sample-app.md │ └── users.md ├── flutter │ ├── getting-started.md │ └── push-notifications.md ├── graphql │ ├── api-doc.md │ ├── classes.md │ ├── customisation.md │ ├── files.md │ ├── getting-started.md │ ├── graphql.md │ ├── health-check.md │ ├── learning-more.md │ ├── objects.md │ ├── optimization.md │ ├── queries.md │ ├── relay.md │ └── users.md ├── head.html ├── header.html ├── helpful_box.html ├── ios │ ├── analytics.md │ ├── config.md │ ├── extensions.md │ ├── files.md │ ├── geopoints.md │ ├── getting-started.md │ ├── handling-errors.md │ ├── in-app-purchases.md │ ├── local-datastore.md │ ├── objects.md │ ├── push-notifications.md │ ├── queries.md │ ├── roles.md │ ├── user-interface.md │ └── users.md ├── js │ ├── analytics.md │ ├── config.md │ ├── files.md │ ├── geopoints.md │ ├── getting-started.md │ ├── handling-errors.md │ ├── live-queries.md │ ├── local-datastore.md │ ├── objects.md │ ├── promises.md │ ├── push-notifications.md │ ├── queries.md │ ├── roles.md │ ├── schema.md │ └── users.md ├── menu.html ├── parse-server │ ├── best-practice.md │ ├── cache-adapters.md │ ├── class-level-permissions.md │ ├── database.md │ ├── deploying-aws-ubuntu.md │ ├── deploying-back4app.md │ ├── deploying-glitch-mlab.md │ ├── deploying-heroku-mlab.md │ ├── deploying.md │ ├── development.md │ ├── file-adapters.md │ ├── getting-started.md │ ├── keys.md │ ├── live-query.md │ ├── mongo-read-preference.md │ ├── push-notifications-android.md │ ├── push-notifications-clients.md │ ├── push-notifications-ios.md │ ├── push-notifications.md │ ├── third-party-auth.md │ ├── usage.md │ └── using-parse-sdks.md ├── php │ ├── analytics.md │ ├── cloud.md │ ├── config.md │ ├── files.md │ ├── geopoints.md │ ├── getting-started.md │ ├── handling-errors.md │ ├── installation.md │ ├── logs.md │ ├── objects.md │ ├── push-notifications.md │ ├── queries.md │ ├── roles.md │ ├── schema.md │ ├── server-info.md │ ├── setup.md │ └── users.md ├── rest │ ├── analytics.md │ ├── cloud-code.md │ ├── config.md │ ├── files.md │ ├── geopoints.md │ ├── getting-started.md │ ├── hooks.md │ ├── objects.md │ ├── push-notifications.md │ ├── queries.md │ ├── quick-reference.md │ ├── roles.md │ ├── schemas.md │ ├── sessions.md │ └── users.md ├── toc.html └── unity │ ├── analytics.md │ ├── config.md │ ├── files.md │ ├── geopoints.md │ ├── getting-started.md │ ├── handling-errors.md │ ├── objects.md │ ├── push-notifications.md │ ├── queries.md │ ├── roles.md │ └── users.md ├── _layouts ├── default.html ├── docs.html ├── guide.html └── redirected.html ├── android-api.md ├── android-push-tutorial.md ├── android.md ├── arduino.md ├── assets ├── fonts │ ├── InputMono.woff │ ├── d94de4bd-16a6-4c19-81bd-ed8f4e1624c6-3.woff │ ├── din17sbop-regular-webfont.woff │ ├── ttfah-AlrightSubLPWebfontUseOnly-Bold.woff │ ├── ttfah-AlrightSubLPWebfontUseOnly-Light.woff │ ├── ttfah-AlrightSubLPWebfontUseOnly-Medium.woff │ └── ttfah-AlrightSubLPWebfontUseOnly-Regular.woff ├── images │ ├── all_screens.png │ ├── alright-quotes.png │ ├── basic_login.png │ ├── build-together.png │ ├── client_push_settings.png │ ├── clp_vs_acl_diagram.png │ ├── config_editor.png │ ├── epilogue-build-together.png │ ├── experiment_enable.png │ ├── experiment_launch.png │ ├── experiment_results.png │ ├── extensions_capabilities.png │ ├── graphql │ │ ├── dashboard-graphql-playground.png │ │ ├── graphql-docs.png │ │ ├── graphql-playground.png │ │ ├── parse-graphql-server.png │ │ └── session-token.png │ ├── heros │ │ ├── analytics.jpg │ │ ├── core.png │ │ ├── desktop.jpg │ │ ├── gradient_blue-gray.png │ │ ├── home.svg │ │ ├── mobile.jpg │ │ └── push.jpg │ ├── images_table.png │ ├── installation_channel.png │ ├── ios_push │ │ ├── experiment_enable.png │ │ ├── experiment_launch.png │ │ └── experiment_results.png │ ├── login_diagram.png │ ├── login_with_dispatch.png │ ├── lq_heroku.png │ ├── lq_local.png │ ├── lq_multiple.png │ ├── new_webhook.png │ ├── pagination.png │ ├── products_table_screenshot.png │ ├── pull_to_refresh.png │ ├── restaurants_app.png │ ├── search.png │ ├── signup_diagram.png │ ├── social.jpg │ └── todo_view.png ├── js │ ├── bundle.js │ └── bundle.js.LICENSE.txt ├── svgs │ ├── plus.svg │ └── quotes.svg └── symbols.svg ├── cloudcode.md ├── css ├── docs.scss ├── guide.scss ├── lib │ ├── docs │ │ ├── components │ │ │ ├── _custom-server.scss │ │ │ ├── _docs-platform.scss │ │ │ ├── _docsearch.scss │ │ │ └── _live-toc.scss │ │ └── views │ │ │ └── _detail.scss │ ├── marketing │ │ ├── components │ │ │ ├── _____example.scss │ │ │ ├── _available-on.scss │ │ │ ├── _banner-ctas.scss │ │ │ ├── _blog-thumbs.scss │ │ │ ├── _buttons.scss │ │ │ ├── _case-study-tabs.scss │ │ │ ├── _community-graphic.scss │ │ │ ├── _customer-grid.scss │ │ │ ├── _divider-ctas.scss │ │ │ ├── _event-card.scss │ │ │ ├── _forms-range.scss │ │ │ ├── _forms.scss │ │ │ ├── _fullscreen-video.scss │ │ │ ├── _heros.scss │ │ │ ├── _herosDocs.scss │ │ │ ├── _legal-sections.scss │ │ │ ├── _lists.scss │ │ │ ├── _logo-stacks.scss │ │ │ ├── _modals.scss │ │ │ ├── _photo-panel.scss │ │ │ ├── _platforms-graphic.scss │ │ │ ├── _pricing-card.scss │ │ │ ├── _pricing-graphic.scss │ │ │ ├── _product-teaser.scss │ │ │ ├── _read-more.scss │ │ │ ├── _sdk-versions.scss │ │ │ ├── _split-ctas.scss │ │ │ ├── _stat-block.scss │ │ │ ├── _team-photos.scss │ │ │ ├── _timeline.scss │ │ │ └── _video-player.scss │ │ ├── globals │ │ │ ├── _defaults.scss │ │ │ ├── _helpers.scss │ │ │ ├── _icons.scss │ │ │ ├── _keyframes.scss │ │ │ └── _typography.scss │ │ └── views │ │ │ ├── _about.scss │ │ │ ├── _community.scss │ │ │ ├── _customers.scss │ │ │ ├── _help.scss │ │ │ ├── _home.scss │ │ │ ├── _platform-desktop.scss │ │ │ ├── _platform-mobile.scss │ │ │ ├── _platforms.scss │ │ │ ├── _pricing.scss │ │ │ ├── _product-analytics.scss │ │ │ ├── _product-core.scss │ │ │ ├── _product-push.scss │ │ │ ├── _products-platforms.scss │ │ │ ├── _products.scss │ │ │ └── _styleguide.scss │ ├── multisite │ │ ├── _base-layout.scss │ │ ├── _codebook.scss │ │ ├── _fonts.scss │ │ ├── _footer.scss │ │ ├── _grid.scss │ │ ├── _hamburger.scss │ │ ├── _header.scss │ │ ├── _menu.scss │ │ ├── _mixins.scss │ │ ├── _normalize-original.scss │ │ ├── _normalize.scss │ │ ├── _variables.scss │ │ └── _wysiwyg.scss │ └── vendor │ │ ├── _highlight.scss │ │ ├── custom_prism-okaidia.css │ │ ├── prism-line-numbers.css │ │ ├── prism.css │ │ └── swiper.css └── normalize.css ├── dart-api.md ├── dart.md ├── defined-schema.md ├── dotnet-api.md ├── dotnet.md ├── embedded_c-api.md ├── embedded_c.md ├── flutter-api.md ├── flutter.md ├── graphql.md ├── img ├── .gitignore ├── android.svg ├── arduino.svg ├── arrowRight.svg ├── background.svg ├── blueBG.jpg ├── c.svg ├── cloudcode.svg ├── dart.svg ├── facebook.svg ├── favicon.svg ├── favicon │ ├── android-chrome-192x192.png │ ├── apple-touch-icon-114x114.png │ ├── apple-touch-icon-120x120.png │ ├── apple-touch-icon-144x144.png │ ├── apple-touch-icon-152x152.png │ ├── apple-touch-icon-180x180.png │ ├── apple-touch-icon-57x57.png │ ├── apple-touch-icon-60x60.png │ ├── apple-touch-icon-72x72.png │ ├── apple-touch-icon-76x76.png │ ├── favicon-160x160.png │ ├── favicon-16x16.png │ ├── favicon-192x192.png │ ├── favicon-32x32.png │ └── favicon-96x96.png ├── flutter.svg ├── forks.svg ├── forksDark.svg ├── github.svg ├── google.svg ├── header │ ├── craneBackground.svg │ ├── craneLine.svg │ ├── cranePivot.svg │ ├── hoist.svg │ ├── hoistWheel.svg │ ├── left.svg │ ├── middleLine.svg │ ├── pushOne.svg │ ├── right.svg │ ├── rightBackground.svg │ ├── rightBackground2 2.svg │ ├── rightBackground2.svg │ ├── skyline.svg │ ├── truckBackground.svg │ └── video.svg ├── ios.svg ├── javascript.svg ├── logo.svg ├── net.svg ├── openSourceIllustration.svg ├── osx.ai ├── osx.svg ├── overflow.svg ├── php.svg ├── preview.png ├── repos.svg ├── stars.svg ├── starsDark.svg ├── twitter.svg └── unity.svg ├── index.md ├── ios-api.md ├── ios-push-tutorial.md ├── ios.md ├── js-api.md ├── js.md ├── macos.md ├── package-lock.json ├── package.json ├── parse-server-api.md ├── parse-server.md ├── php-api.md ├── php.md ├── rest.md ├── unity-api.md ├── unity.md ├── webpack.config.js └── win8-push-tutorial.md /.github/ISSUE_TEMPLATE/---bug-report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: "\U0001F41B Bug report" 3 | about: Create a report to help us improve 4 | title: "\U0001F41B " 5 | labels: Bug 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Describe the bug** 11 | A clear and concise description of what the bug is. 12 | 13 | **To Reproduce** 14 | Steps to reproduce the behavior: 15 | 1. Go to '...' 16 | 2. Click on '....' 17 | 3. Scroll down to '....' 18 | 4. See error 19 | 20 | **Expected behavior** 21 | A clear and concise description of what you expected to happen. 22 | 23 | **Screenshots** 24 | If applicable, add screenshots to help explain your problem. 25 | 26 | **Desktop (please complete the following information):** 27 | - OS: [e.g. iOS] 28 | - Browser [e.g. chrome, safari] 29 | - Version [e.g. 22] 30 | 31 | **Smartphone (please complete the following information):** 32 | - Device: [e.g. iPhone6] 33 | - OS: [e.g. iOS8.1] 34 | - Browser [e.g. stock browser, safari] 35 | - Version [e.g. 22] 36 | 37 | **Additional context** 38 | Add any other context about the problem here. 39 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/---docs-fix-improvement-report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: "\U0001F4D9 Docs fix/improvement report" 3 | about: Bring attention to an area of the docs with code samples that need updating 4 | or wording that could be improved 5 | title: "\U0001F4D9 " 6 | labels: Documentation Improvement 7 | assignees: '' 8 | 9 | --- 10 | 11 | __Link to section:__ 12 | Please provide a specific link to the section in question. In the docs, you can click on a heading and then copy the relative link from the address bar. 13 | 14 | __What is the issue?__ 15 | Please provide a detailed explanation of the problem, quoting parts of the docs or using screenshots if appropriate. 16 | 17 | __Can you propose a solution?__ 18 | What changes do you think should be made? Have you considered multiple solutions? Will this be suitable for all use cases? 19 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/---feature-request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: "\U0001F4A1 Feature request" 3 | about: Suggest an idea for this project 4 | title: "\U0001F4A1 " 5 | labels: Feature 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Is your feature request related to a problem? Please describe.** 11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] 12 | 13 | **Describe the solution you'd like** 14 | A clear and concise description of what you want to happen. 15 | 16 | **Describe alternatives you've considered** 17 | A clear and concise description of any alternative solutions or features you've considered. 18 | 19 | **Additional context** 20 | Add any other context or screenshots about the feature request here. 21 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/---missing-content.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: "\U0001F4D5 Missing content" 3 | about: Bring attention to features that are undocumented 4 | title: "\U0001F4D5" 5 | labels: Missing Content 6 | assignees: '' 7 | 8 | --- 9 | 10 | __References:__ 11 | Please provide links to the relevant PRs in the Parse Server repo and SDK repos where applicable. 12 | 13 | __Proposed solution:__ 14 | Can you provide links to the sections in the relevant guides where the new content should go? 15 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Generated site 2 | _site/ 3 | .jekyll-metadata 4 | 5 | # Logs 6 | logs/ 7 | *.log 8 | npm-debug.log* 9 | 10 | # Dependency directories 11 | node_modules 12 | 13 | # Optional npm cache directory 14 | .npm 15 | 16 | # OS X 17 | .DS_Store 18 | 19 | # IntelliJ related 20 | *.iml 21 | *.ipr 22 | *.iws 23 | .idea/ 24 | 25 | .jekyll-metadata 26 | -------------------------------------------------------------------------------- /.husky/pre-commit: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | . "$(dirname -- "$0")/_/husky.sh" 3 | 4 | npm run husky-pre-commit 5 | -------------------------------------------------------------------------------- /.nvmrc: -------------------------------------------------------------------------------- 1 | 8.10 2 | -------------------------------------------------------------------------------- /.rvmrc: -------------------------------------------------------------------------------- 1 | rvm use 2.1 2 | -------------------------------------------------------------------------------- /CNAME: -------------------------------------------------------------------------------- 1 | docs.parseplatform.org -------------------------------------------------------------------------------- /Gemfile: -------------------------------------------------------------------------------- 1 | source 'https://rubygems.org' 2 | gem 'jekyll' 3 | gem 'github-pages', group: :jekyll_plugins 4 | gem 'jekyll-redirect-from' 5 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | BSD License 2 | 3 | For Parse Server software 4 | 5 | Copyright (c) 2015-present, Parse, LLC. All rights reserved. 6 | 7 | Redistribution and use in source and binary forms, with or without modification, 8 | are permitted provided that the following conditions are met: 9 | 10 | * Redistributions of source code must retain the above copyright notice, this 11 | list of conditions and the following disclaimer. 12 | 13 | * Redistributions in binary form must reproduce the above copyright notice, 14 | this list of conditions and the following disclaimer in the documentation 15 | and/or other materials provided with the distribution. 16 | 17 | * Neither the name Parse nor the names of its contributors may be used to 18 | endorse or promote products derived from this software without specific 19 | prior written permission. 20 | 21 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 22 | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 23 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 24 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR 25 | ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 26 | (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 27 | LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 28 | ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 29 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 30 | SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 31 | 32 | ----- 33 | 34 | As of April 5, 2017, Parse, LLC has transferred this code to the parse-community organization, and will no longer be contributing to or distributing this code. 35 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Parse Docs 2 | 3 | [![Join The Conversation](https://img.shields.io/discourse/https/community.parseplatform.org/topics.svg)](https://community.parseplatform.org/c/parse-server) 4 | [![Backers on Open Collective](https://opencollective.com/parse-server/backers/badge.svg)][open-collective-link] 5 | [![Sponsors on Open Collective](https://opencollective.com/parse-server/sponsors/badge.svg)][open-collective-link] 6 | [![License][license-svg]][license-link] 7 | [![Twitter Follow](https://img.shields.io/twitter/follow/ParsePlatform.svg?label=Follow%20us%20on%20Twitter&style=social)](https://twitter.com/intent/follow?screen_name=ParsePlatform) 8 | 9 | 10 | These are the markdown sources for all of the [Parse SDK guides](https://parse-community.github.io/#sdks). The content for the guides is stored in this repo, and we use Jekyll to generate a static site that is hosted on GitHub Pages. 11 | 12 | ## Repository Structure 13 | 14 | The guides are organized by platform inside the _includes directory. Each platform directory contains a set of markdown files, one for each main section in the guide. 15 | 16 | . 17 | └── _includes 18 | ├── {platform} 19 | │ └── {section} 20 | └── common 21 | └── {section} 22 | 23 | For example, `/_includes/ios/` contains all of sections for the iOS guide. There is also a `/_includes/common` folder that contains content that is shared amongst all of the guides. It helps us avoid duplicating content unnecessarily. 24 | 25 | ## Can I Access The Docs Offline? 26 | 27 | This repository is public and all the files are in markdown. If you'd like to keep a copy locally, please do! 28 | 29 | ## How Do I Contribute? 30 | 31 | If you have any fixes or suggestions, simply send us a pull request! 32 | 33 | ### Running The Site Locally 34 | 35 | You will need [Ruby](https://www.ruby-lang.org/en/documentation/installation/), [Bundler](http://bundler.io/), and [npm](https://www.npmjs.com/get-npm). 36 | 37 | Clone this repository, then install Jekyll and node packages: 38 | 39 | ``` 40 | bundle install 41 | npm install 42 | ``` 43 | 44 | Then run webpack and Jekyll: 45 | 46 | Start in Linux/OS X: 47 | ``` 48 | npm start 49 | ``` 50 | 51 | Start in Windows command prompt: 52 | ``` 53 | npm run dev-win 54 | ``` 55 | 56 | Finally, open http://localhost:4000/ in your web browser. 57 | File changes will be output to `_site` folder and the browser will auto refresh. 58 | 59 | ----- 60 | 61 | As of April 5, 2017, Parse, LLC has transferred this code to the parse-community organization, and will no longer be contributing to or distributing this code. 62 | 63 | [license-svg]: https://img.shields.io/badge/license-BSD-lightgrey.svg 64 | [license-link]: LICENSE 65 | [open-collective-link]: https://opencollective.com/parse-server 66 | -------------------------------------------------------------------------------- /_config.yml: -------------------------------------------------------------------------------- 1 | # Welcome to Jekyll! 2 | # 3 | # This config file is meant for settings that affect your whole blog, values 4 | # which you are expected to set up once and rarely need to edit after that. 5 | # For technical reasons, this file is *NOT* reloaded automatically when you use 6 | # 'jekyll serve'. If you change this file, please restart the server process. 7 | 8 | # Site settings 9 | name: Parse Platform Docs 10 | title: Parse Docs 11 | email: community@parseplatform.org 12 | description: The open source docs for the Parse platform SDKs & other guides. 13 | url: "http://docs.parseplatform.org" # the base hostname & protocol for your site 14 | repository: parse-community/docs 15 | twitter_username: parseplatform 16 | github_username: parseplatform 17 | stackoverflow_tag: parse-platform 18 | serverfault_tag: parse 19 | support_url: https://community.parseplatform.org 20 | apis: 21 | osx: https://parseplatform.org/Parse-SDK-iOS-OSX/api/ 22 | android: https://parseplatform.org/Parse-SDK-Android/api/ 23 | js: https://parseplatform.org/Parse-SDK-JS/api/ 24 | php: https://parseplatform.org/parse-php-sdk/ 25 | dotnet: https://parseplatform.org/Parse-SDK-dotNET/api/ 26 | flutter: https://parseplatform.org/Parse-SDK-Flutter/flutter/flutter_parse_sdk_flutter/flutter_parse_sdk_flutter-library.html 27 | dart: https://parseplatform.org/Parse-SDK-Flutter/dart/flutter_parse_sdk/flutter_parse_sdk-library.html 28 | parse-server: https://parseplatform.org/parse-server/api/ 29 | 30 | # Build settings 31 | markdown: kramdown 32 | exclude: [ Gemfile, Gemfile.lock, README.md, config.codekit, webpack.config.js, node_modules, npm-debug.log, package.json ] 33 | sass: 34 | sass_dir: css 35 | 36 | # Gems 37 | plugins: 38 | - jekyll-redirect-from 39 | 40 | whitelist: 41 | - jekyll-redirect-from 42 | -------------------------------------------------------------------------------- /_includes/android/getting-started.md: -------------------------------------------------------------------------------- 1 | # Getting Started 2 | 3 | Note that we support Android 4.0 and higher. You can also check out our [API Reference]({{ site.apis.android }}) for more detailed information about our SDK. 4 | 5 | ## Installation 6 | **Step 1:** Download `Parse-SDK-Android` 7 | 8 | ## Dependency 9 | Add this in your root `build.gradle` file (**not** your module `build.gradle` file): 10 | 11 | ```gradle 12 | allprojects { 13 | repositories { 14 | ... 15 | maven { url "https://jitpack.io" } 16 | } 17 | } 18 | ``` 19 | 20 | Then, add the library to your project `build.gradle` 21 | ```gradle 22 | dependencies { 23 | implementation "com.github.parse-community.Parse-SDK-Android:parse:latest.version.here" 24 | } 25 | ``` 26 | with the latest version being [![](https://jitpack.io/v/parse-community/Parse-SDK-Android.svg)](https://jitpack.io/#parse-community/Parse-SDK-Android) 27 | 28 | **Step 2:** Setup Parse 29 | Initialize Parse using your server configuration: 30 | ```java 31 | import com.parse.Parse; 32 | import android.app.Application; 33 | 34 | public class App extends Application { 35 | @Override 36 | public void onCreate() { 37 | super.onCreate(); 38 | Parse.initialize(new Parse.Configuration.Builder(this) 39 | .applicationId("YOUR_APP_ID") 40 | // if defined 41 | .clientKey("YOUR_CLIENT_KEY") 42 | .server("http://localhost:1337/parse/") 43 | .build() 44 | ); 45 | } 46 | } 47 | ``` 48 | 49 | The custom `Application` class must be registered in `AndroidManifest.xml`: 50 | ```xml 51 | 54 | ... 55 | 56 | ``` 57 | 58 | Note that if you are testing with a server using `http`, you will need to add `android:usesCleartextTraffic="true"` to your above `` definition, but you should only do this while testing and should use `https` for your final product. 59 | -------------------------------------------------------------------------------- /_includes/android/handling-errors.md: -------------------------------------------------------------------------------- 1 | # Handling Errors 2 | 3 | Many of the methods on `ParseObject`, including `save()`, `delete()`, and `get()` will throw a `ParseException` on an invalid request, such as deleting or editing an object that no longer exists in the database, or when there is a network failure preventing communication with your Parse Server. You will need to catch and deal with these exceptions. 4 | 5 | For more details, look at the [Android API]({{ site.apis.android }}). 6 | -------------------------------------------------------------------------------- /_includes/arduino/analytics.md: -------------------------------------------------------------------------------- 1 | # Analytics 2 | 3 | Some examples: 4 | 5 | ```cpp 6 | ParseTrackEvent trackEvent; 7 | trackEvent.setEventName("ButtonPress"); 8 | trackEvent.send(); 9 | ``` 10 | -------------------------------------------------------------------------------- /_includes/arduino/cloud-code.md: -------------------------------------------------------------------------------- 1 | # Cloud Functions 2 | 3 | Cloud Functions allow you to run custom app logic on your Parse Server. This is especially useful for running complex app logic in the cloud so that you can reduce the memory footprint of your code on the IoT device. In a Cloud Function, you can query/save Parse data, send push notifications, and log analytics events. 4 | 5 | You write your Cloud Code in JavaScript using the Parse JavaScript SDK. We provide a command-line tool to help you deploy your Cloud Code. See our [Cloud Code guide]({{ site.baseUrl }}/cloudcode/guide) for details. 6 | 7 | For example, you define a Cloud Function as below. 8 | 9 | ```javascript 10 | Parse.Cloud.define("hello", request => { 11 | return request.body; 12 | }); 13 | ``` 14 | 15 | Then you can invoke this Cloud Function from your device: 16 | 17 | ```cpp 18 | ParseCloudFunction cloudFunction; 19 | cloudFunction.setFunctionName("hello"); 20 | cloudFunction.add("value", "echo from hello"); 21 | ParseResponse response = cloudFunction.send(); 22 | ``` 23 | -------------------------------------------------------------------------------- /_includes/arduino/other.md: -------------------------------------------------------------------------------- 1 | # REST API 2 | 3 | Because the Arduino SDK was designed to minimize memory footprint, it doesn't provide direct functions for all the Parse features that are present in the mobile SDKs. However, it does have the capability to call the REST API, which offers the full range of functionality. 4 | 5 | For example, you could sign up a user from Arduino through a REST call: 6 | 7 | ```cpp 8 | ParseResponse response = Parse.sendRequest("POST", "/parse/users", "{\"username\":\"cooldude6\",\"password\":\"p_n7!-e8\"}", ""); 9 | ``` 10 | 11 | In this case, the response will contain the objectId of the created user, assuming it was created successfully. 12 | 13 | Head on over to the [REST API documentation]({{ '/rest' | prepend: site.baseurl }}) to discover what's possible. For each code sample, you can switch it to Arduino to see what the function call would look like. 14 | -------------------------------------------------------------------------------- /_includes/arduino/requests.md: -------------------------------------------------------------------------------- 1 | # Requests 2 | 3 | Because the Arduino SDK was designed to minimize memory footprint, it doesn't provide direct functions for all the Parse features that are present in the mobile SDKs. However, it does have the capability to call the REST API, which offers the full range of functionality. 4 | 5 | For example, you could sign up a user from Arduino through a REST call: 6 | 7 | ```cpp 8 | ParseResponse response = Parse.sendRequest("POST", "/parse/users", "{\"username\":\"cooldude6\",\"password\":\"p_n7!-e8\"}", ""); 9 | ``` 10 | 11 | In this case, the response will contain the objectId of the created user, assuming it was created successfully. 12 | 13 | Head on over to the [REST API documentation]({{ site.baseUrl }}/rest) to discover what's possible. For each code sample, you can switch it to cURL to see what the endpoint and payload would look like. 14 | -------------------------------------------------------------------------------- /_includes/arduino/users.md: -------------------------------------------------------------------------------- 1 | # Users and Sessions 2 | 3 | At the core of many apps, there is a notion of user accounts that lets users access their information in a secure manner. In our other SDKs, we provide a specialized user class that automatically handles much of the functionality required for user account management. Users are a special class of Parse Objects and has all the same features, such as flexible schema, automatic persistence, and a key value interface. 4 | 5 | The Arduino SDK does not provide methods to directly sign in as a user. If you want to have the Arduino device act on behalf of a user, you will need to [create a Session through a companion app]({{ site.baseUrl }}/ios/guide/#sessions) or another Parse SDK and pass a Restricted Session to the device. You can read more about users in our [REST API]({{ site.baseUrl }}/rest/guide/#users) or one of our other [SDK guides]({{ site.baseUrl }}). 6 | 7 | ## Setting a Session 8 | 9 | Once you have created a Restricted Session via the companion app or through the REST API, you can send the Session Token to the Arduino using push notifications, BLE, or some other appropriate method. After that, you can set it: 10 | 11 | ```cpp 12 | Parse.setSessionToken("r:olqZkbv8fefVFNjWegyIXIggd"); 13 | ``` 14 | 15 | From then on, the device will act on behalf of the user. 16 | 17 | ## `User` Security 18 | 19 | Parse uses ACLs to make sure objects can be accessed by users who are authorized with access. When creating objects, you can set the ACL field of the object to restrict access to a set of users. Read about this and more in the [REST API documentation]({{ site.baseUrl }}/rest/guide/#access-control-lists). 20 | -------------------------------------------------------------------------------- /_includes/cloudcode/getting-started.md: -------------------------------------------------------------------------------- 1 | # Getting Started 2 | 3 | Cloud Code is [built into Parse Server]({{ site.baseUrl }}/parse-server/guide/). The default entry point for your Cloud Code is at `./cloud/main.js`. 4 | 5 | ## What is Cloud Code? 6 | 7 | For complex apps, sometimes you just need a bit of logic that isn't running on a mobile device. Cloud Code makes this possible. 8 | 9 | Cloud Code is easy to use because it's built on the same Parse JavaScript SDK that powers thousands of apps. The only difference is that this code runs in your Parse Server rather than running on the user's mobile device. When you update your Cloud Code, it becomes available to all mobile environments instantly. You don't have to wait for a new release of your application. This lets you change app behavior on the fly and add new features faster. 10 | 11 | Even if you're only familiar with mobile development, we hope you'll find Cloud Code straightforward and easy to use. 12 | -------------------------------------------------------------------------------- /_includes/dart/cloud-code.md: -------------------------------------------------------------------------------- 1 | # Cloud Code 2 | 3 | The SDK supports calling [Cloud Functions](https://docs.parseplatform.org/cloudcode/guide/#cloud-functions). 4 | 5 | Execute a Cloud Function that returns a `ParseObject`: 6 | 7 | ```dart 8 | final ParseCloudFunction function = ParseCloudFunction('hello'); 9 | final ParseResponse result = 10 | await function.executeObjectFunction(); 11 | if (result.success) { 12 | if (result.result is ParseObject) { 13 | final ParseObject parseObject = result.result; 14 | print(parseObject.className); 15 | } 16 | } 17 | ``` 18 | 19 | Execute a Cloud Function with parameters: 20 | 21 | ```dart 22 | final ParseCloudFunction function = ParseCloudFunction('hello'); 23 | final Map params = {'plan': 'paid'}; 24 | function.execute(parameters: params); 25 | ``` 26 | -------------------------------------------------------------------------------- /_includes/dart/config.md: -------------------------------------------------------------------------------- 1 | # Config 2 | 3 | The SDK supports [Parse Config](https://docs.parseplatform.org/cloudcode/guide/#config). A map of config parameters can be retrieved from Parse Server with: 4 | 5 | ```dart 6 | var response = await ParseConfig().getConfigs(); 7 | ``` 8 | 9 | To add a new parameter to Parse Config: 10 | 11 | ```dart 12 | ParseConfig().addConfig('TestConfig', 'testing'); 13 | ``` -------------------------------------------------------------------------------- /_includes/dart/files.md: -------------------------------------------------------------------------------- 1 | # Files 2 | 3 | There are three different file classes in this SDK: 4 | 5 | - `ParseFileBase` is an abstract class and is the foundation of every file class that can be handled by the SDK. 6 | - `ParseFile` extends `ParseFileBase` and is by default used as the file class on every platform but web. This class uses a `File` from `dart:io` for storing the raw file. The class was formerly the only file class in the SDK. 7 | - `ParseWebFile` is the equivalent of `ParseFile` used for Flutter Web. This class uses a `Uint8List` for storing the raw file data. 8 | 9 | The classes above are used by default to represent files, but you can also build your own class extending `ParseFileBase` and provide a custom `ParseFileConstructor` similar to the `SubClasses`. 10 | 11 | Have a look at the example application for a small (non web) example. 12 | 13 | When uploading or downloading a file, you can use the `progressCallback` parameter to track the progress of the HTTP request. 14 | 15 | The following is an example for showing an image from a `ParseFileBase`: 16 | 17 | ```dart 18 | Widget buildImage(ParseFileBase image){ 19 | return FutureBuilder( 20 | future: image.download(), 21 | builder: (BuildContext context, 22 | AsyncSnapshot snapshot) { 23 | if (snapshot.hasData) { 24 | if (kIsWeb) { 25 | return Image.memory((snapshot.data as ParseWebFile).file); 26 | } else { 27 | return Image.file((snapshot.data as ParseFile).file); 28 | } 29 | } else { 30 | return CircularProgressIndicator(); 31 | } 32 | }, 33 | ); 34 | } 35 | ``` 36 | 37 | A short example for storing a selected image: 38 | 39 | ```dart 40 | // Libraries: image_picker (https://pub.dev/packages/image_picker), image_picker_for_web (https://pub.dev/packages/image_picker_for_web) 41 | PickedFile pickedFile = await ImagePicker().getImage(source: ImageSource.gallery); 42 | 43 | ParseFileBase parseFile; 44 | 45 | if (kIsWeb) { 46 | // Get data from selected file as an Uint8List 47 | ParseWebFile file = ParseWebFile(null, name: null, url: pickedFile.path); 48 | await file.download(); 49 | parseFile = ParseWebFile(file.file, name: file.name); 50 | } else { 51 | parseFile = ParseFile(File(pickedFile.path)); 52 | } 53 | 54 | someParseObject.set("image", parseFile); 55 | // Save ParseObject and its children like the ParseFileBase 56 | await someParseObject.save(); 57 | ``` 58 | 59 | Example for using the progress callback: 60 | 61 | ```dart 62 | file.upload(progressCallback: (int count, int total) => print("$count of $total")); 63 | ``` -------------------------------------------------------------------------------- /_includes/dart/other-features.md: -------------------------------------------------------------------------------- 1 | # Other Features 2 | 3 | Main: 4 | * Installation (View the example application) 5 | * GeoPoints (View the example application) 6 | * Persistent storage 7 | * Debug Mode - Logging API calls 8 | * Manage Session ID's tokens 9 | 10 | User: 11 | * Queries 12 | * Anonymous (View the example application) 13 | * 3rd Party Authentication 14 | 15 | Objects: 16 | * Create new object 17 | * Extend Parse Object and create local objects that can be saved and retrieved 18 | * Queries 19 | -------------------------------------------------------------------------------- /_includes/dart/storage.md: -------------------------------------------------------------------------------- 1 | # Storage 2 | 3 | We now have 2 types of storage, secure and unsecure. We currently rely on 2 third party options: 4 | 5 | - SharedPreferences 6 | - Sembast 7 | 8 | Sembast offers secured storage, whilst `SharePreferences` wraps `NSUserDefaults` (on iOS) and `SharedPreferences` (on Android). 9 | 10 | The storage method is defined in the parameter `coreStore` in `Parse().initialize` -------------------------------------------------------------------------------- /_includes/defined-schema/class-level-permissions.md: -------------------------------------------------------------------------------- 1 | # Class Level Permissions 2 | 3 | Setting Class Level Permissions through Defined Schema is a good first step into security systems available on Parse Server. 4 | 5 | ## CLP Parameters 6 | 7 | These CLP parameters are available: 8 | 9 | - `find`: Control search permissions 10 | - `get`: Control direct ID get permission 11 | - `count`: Control counting objects permission 12 | - `create`: Create permission 13 | - `update`: Update permission 14 | - `delete`: Delete permission 15 | - `protectedFields`: Control get permission at field level 16 | 17 | You can set each CLP parameter to add a first strong security layer. This security layer will be applied on the Parse Class and will cover all Parse Objects of the Parse Class. 18 | 19 | Note: If you update CLP you do not need to update Parse Objects. CLP is a security layer at Class Level not Object Level. For Object Level permission you can look to ALCs. Use CLPs combined with ACLs to deeply secure your Parse Server. 20 | 21 | ## CLP Parameter Options 22 | 23 | Available options for CLP parameters: 24 | 25 | - `role:`: If you are making use of Parse Roles you can set the permission based on a role." 26 | - `requiresAuthentication`: If set to `true` only authenticated users will have the permission. 27 | - `*`: Everybody has the permission. 28 | - `{}`: If you set the CLP key to `{}`, for example: `create: {}`. Then only calls with Parse Server Master Key will have the permission. 29 | 30 | ## CLP Protected Fields Parameter 31 | 32 | This CLP parameter allows you to restrict access to fields to specific Parse users. 33 | 34 | We will take the Parse User Class as an example. 35 | 36 | ```js 37 | // className: '_User' 38 | { 39 | protectedFields: { 40 | "*": ["authData", "emailVerified", "password", "username"], 41 | }, 42 | } 43 | ``` 44 | 45 | Listed keys under `*` will be protected from all users. By default, `authData`, `emailVerified`, `password` are protected. But in the above example we protect `username` from all users. So a Parse User, even authenticated will not be able to get the `username` of a another Parse User. 46 | 47 | `protectedFields` could be also combined as in the following example: 48 | 49 | ```js 50 | { 51 | protectedFields: { 52 | "*": ["authData", "emailVerified", "password", "username", "phone", "score"], 53 | "role:Admin": ["password", "authData", "emailVerified"], 54 | "role:VerifiedUser": ["password", "authData", "emailVerified", "score"], 55 | }, 56 | } 57 | ``` 58 | 59 | In the example above, a Parse User who is a member of the Parse Role `Admin` will be able to get the `phone` and `score` of another Parse User. A Parse User member of the Parse Role `VerifiedUser` can only get `phone`. 60 | If a Parse User is member of `VerifiedUser` and `Admin`, he will have access to `phone` and `score`. 61 | -------------------------------------------------------------------------------- /_includes/defined-schema/core-classes-fields.md: -------------------------------------------------------------------------------- 1 | # Core Classes/Fields 2 | 3 | Parse will never delete these fields on **ALL** classes if not provided in a class schema 4 | 5 | - `objectId` 6 | - `createdAt` 7 | - `updatedAt` 8 | - `ACL` 9 | 10 | Parse Server will never delete the following fields from any class, even if these fields are not defined in a class schema. 11 | 12 | - `_User` 13 | 14 | - `username` 15 | - `password` 16 | - `email` 17 | - `emailVerified` 18 | - `authData` 19 | 20 | - `_Installation` 21 | 22 | - `installationId` 23 | - `deviceToken` 24 | - `channels` 25 | - `deviceType` 26 | - `pushType` 27 | - `GCMSenderId` 28 | - `timeZone` 29 | - `localeIdentifier` 30 | - `badge` 31 | - `appVersion` 32 | - `appName` 33 | - `appIdentifier` 34 | - `parseVersion` 35 | 36 | - `_Role` 37 | 38 | - `name` 39 | - `users` 40 | - `roles` 41 | 42 | - `_Session` 43 | 44 | - `user` 45 | - `installationId` 46 | - `sessionToken` 47 | - `expiresAt` 48 | - `createdWith` 49 | 50 | - `_Product` 51 | 52 | - `productIdentifier` 53 | - `download` 54 | - `downloadName` 55 | - `icon` 56 | - `order` 57 | - `title` 58 | - `subtitle` 59 | 60 | - `_PushStatus` 61 | 62 | - `pushTime` 63 | - `source` 64 | - `query` 65 | - `payload` 66 | - `title` 67 | - `expiry` 68 | - `expiration_interval` 69 | - `status` 70 | - `numSent` 71 | - `numFailed` 72 | - `pushHash` 73 | - `errorMessage` 74 | - `sentPerType` 75 | - `failedPerType` 76 | - `sentPerUTCOffset` 77 | - `failedPerUTCOffset` 78 | - `count` 79 | 80 | - `_JobStatus` 81 | 82 | - `jobName` 83 | - `source` 84 | - `status` 85 | - `message` 86 | - `params` 87 | - `finishedAt` 88 | 89 | - `_JobSchedule` 90 | 91 | - `jobName` 92 | - `description` 93 | - `params` 94 | - `startAfter` 95 | - `daysOfWeek` 96 | - `timeOfDay` 97 | - `lastRun` 98 | - `repeatMinutes` 99 | 100 | - `_Audience` 101 | - `objectId` 102 | - `name` 103 | - `query` 104 | - `lastUsed` 105 | - `timesUsed` 106 | - `_Idempotency` 107 | - `reqId` 108 | - `expire` 109 | -------------------------------------------------------------------------------- /_includes/defined-schema/fields.md: -------------------------------------------------------------------------------- 1 | # Fields 2 | 3 | These field types are available on a Parse Schema. 4 | 5 | `required`: `boolean`, forces the field to be set on create and update, is `false` by default. 6 | 7 | `defaultValue`: `any`, a value used by Parse Server when you create a Parse Object if the field is not provided. 8 | 9 | `targetClass`: `string`, a Parse Class name used by Parse Server to validate the `Pointer`/`Relation` 10 | 11 | ✅: Supported 12 | ❌: Not Supported 13 | 14 | | Type | -- required -- | -- defaultValue -- | -- targetClass -- | 15 | | -------- | -------------- | ------------------ | ----------------- | 16 | | String | ✅ | ✅ | ❌ | 17 | | Boolean | ✅ | ✅ | ❌ | 18 | | Date | ✅ | ✅ | ❌ | 19 | | Object | ✅ | ✅ | ❌ | 20 | | Array | ✅ | ✅ | ❌ | 21 | | GeoPoint | ✅ | ✅ | ❌ | 22 | | File | ✅ | ✅ | ❌ | 23 | | Bytes | ✅ | ✅ | ❌ | 24 | | Polygon | ✅ | ✅ | ❌ | 25 | | Relation | ❌ | ❌ | ✅ (required) | 26 | | Pointer | ✅ | ❌ | ✅ (required) | 27 | 28 | Example: 29 | 30 | ```js 31 | const UserSchema = { 32 | className: "_User", 33 | fields: { 34 | birthDate: { type: "Date" }, 35 | firstname: { type: "String", required: true }, 36 | lastname: { type: "String", required: true }, 37 | tags: { type: "Array" }, 38 | location: { type: "GeoPoint" }, 39 | city: { type: "Pointer", targetClass: "City" }, 40 | friends: { type: "Relation", targetClass: "_User" }, 41 | zone: { type: "Polygon" }, 42 | }, 43 | }; 44 | ``` 45 | -------------------------------------------------------------------------------- /_includes/defined-schema/indexes.md: -------------------------------------------------------------------------------- 1 | # Indexes 2 | 3 | To optimize the Parse Server performance you can define indexes and compound indexes. Parse Server does not support indexes on special `_Join` classes used under the hood by the `Relation` type. 4 | 5 | To define an index on a `Pointer` field you need to use the special notation `_p_`. For example, if you define city: `{ type: "Pointer", targetClass: "City" }` in your `fields` you can define an index on this pointer with `cityIndexExample: { _p_city: true }`. 6 | 7 | Example: 8 | 9 | ```js 10 | const UserSchema = { 11 | className: "_User", 12 | fields: { 13 | tags: { type: "Array" }, 14 | city: { type: "Pointer", targetClass: "City" }, 15 | }, 16 | indexes: { 17 | tagsIndex: { tags: 1 }, 18 | cityPointerIndex: { _p_city: 1 }, 19 | tagAndCityIndex: { _p_city: 1, tags: 1 }, 20 | }, 21 | }; 22 | ``` 23 | -------------------------------------------------------------------------------- /_includes/defined-schema/options.md: -------------------------------------------------------------------------------- 1 | # Options 2 | 3 | ## definitions 4 | 5 | An array of your Defined Parse Classes. 6 | 7 | ## strict 8 | 9 | You can set the `strict` option to `true` if you want Parse Server to delete all Parse Objects when you remove a Defined Parse Class from your `definitions`. Data stored in removed classes will be lost. 10 | 11 | By default `strict` is `false`. If you often change your schemas be aware that you will have stale data classes in your database. You will need to delete these classes (collection for MongoDB, table for Postgres) manually, through your database CLI/UI. 12 | 13 | ## deleteExtraFields 14 | 15 | You can set the `deleteExtraFields` option to `true` if you want Parse Server to delete a removed Defined Parse Class field from your database. Data stored in the removed field will be lost. 16 | 17 | By default `deleteExtraFields` is `false`. Be aware that you will have stale data fields in your database since Parse Server will not delete field data automatically. You will need to delete these fields manually. 18 | 19 | ## recreateModifiedFields 20 | 21 | You can set the `recreateModifiedFields` option to `true` if you want Parse Server to clean field data before updating the field type when the field type is modified. For example when changing from `String` to `Number`. Data stored under the modified field will be lost. 22 | 23 | `recreateModifiedFields` defaults to `false`. **Be aware that if you set `recreateModifiedFields` to `true` and do not perform some data migration, you can result with data type inconsistency on the modified field.** 24 | 25 | Good practice would be to create the new field of the new type, and then create a Parse Cloud Job to migrate old field data to the newly created field. 26 | 27 | ## lockSchemas 28 | 29 | You can set the `lockSchemas` option to `true` if you want to prevent any schema manipulation and to lock the schema as defined in the Parse Server configuration. If this options is `true` any create, update and delete request will be denied by the Parse Server API, even with the master key. You will not be able to manipulate `indexes`, `classLevelPermissions`, `fields`. 30 | 31 | ## beforeMigration 32 | 33 | A function called before Parse Server performs schema updates based on the `definitions` option 34 | 35 | ## afterMigration 36 | 37 | A function called after Parse Server performed schema updates based on the `definitions` option 38 | -------------------------------------------------------------------------------- /_includes/dotnet/analytics.md: -------------------------------------------------------------------------------- 1 | # Analytics 2 | 3 | Parse provides a number of hooks for you to get a glimpse into the ticking heart of your app. We understand that it's important to understand what your app is doing, how frequently, and when. 4 | 5 | While this section will cover different ways to instrument your app to best take advantage of Parse's analytics backend, developers using Parse to store and retrieve data can already take advantage of metrics on Parse. 6 | 7 | Without having to implement any client-side logic, you can view real-time graphs and breakdowns (by device type, Parse class name, or REST verb) of your API Requests in your app's dashboard and save these graph filters to quickly access just the data you're interested in. 8 | 9 | ## App-Open / Push Analytics 10 | 11 | Our initial analytics hook allows you to track your application being launched. By adding the following line to your Launching event handler, you'll be able to collect data on when and how often your application is opened. 12 | 13 | ```cs 14 | ParseAnalytics.TrackAppOpenedAsync(); 15 | ``` 16 | 17 | ## Custom Analytics 18 | 19 | `ParseAnalytics` also allows you to track free-form events, with a handful of `string` keys and values. These extra dimensions allow segmentation of your custom events via your app's Dashboard. 20 | 21 | Say your app offers search functionality for apartment listings, and you want to track how often the feature is used, with some additional metadata. 22 | 23 | ```cs 24 | var dimensions = new Dictionary { 25 | // Define ranges to bucket data points into meaningful segments 26 | { "priceRange", "1000-1500" }, 27 | // Did the user filter the query? 28 | { "source", "craigslist" }, 29 | // Do searches happen more often on weekdays or weekends? 30 | { "dayType", "weekday" } 31 | }; 32 | // Send the dimensions to Parse along with the 'search' event 33 | ParseAnalytics.TrackEventAsync("search", dimensions); 34 | ``` 35 | 36 | `ParseAnalytics` can even be used as a lightweight error tracker — simply invoke the following and you'll have access to an overview of the rate and frequency of errors, broken down by error code, in your application: 37 | 38 | ```cs 39 | var errDimensions = new Dictionary { 40 | { "code", Convert.ToString(error.Code) } 41 | }; 42 | ParseAnalytics.TrackEventAsync("error", errDimensions ); 43 | ``` 44 | 45 | Note that Parse currently only stores the first eight dimension pairs per call to `ParseAnalytics.TrackEventAsync()`. 46 | -------------------------------------------------------------------------------- /_includes/dotnet/getting-started.md: -------------------------------------------------------------------------------- 1 | # Getting Started 2 | 3 | The Parse platform provides a complete backend solution for your mobile application. Our goal is to totally eliminate the need for writing server code or maintaining servers. 4 | 5 | If you're familiar with web frameworks like ASP.NET MVC we've taken many of the same principles and applied them to our platform. In particular, our SDK is ready to use out of the box with minimal configuration on your part. 6 | 7 |
8 | This guide is for the .NET-based version of our SDK. If you are doing Windows 8 development using HTML and JavaScript, please see our JavaScript guide. 9 |
10 | 11 | If you haven't installed the SDK yet, please [head over to the QuickStart guide]({{ page.quickstart }}) to get our SDK up and running in Visual Studio or Xamarin Studio. Note that our SDK requires Visual Studio 2012 or Xamarin Studio and targets .NET 4.5 applications, Windows Store apps, Windows Phone 8 apps, and [Xamarin.iOS 6.3+](http://docs.xamarin.com/releases/ios/xamarin.ios_6/xamarin.ios_6.3) or [Xamarin.Android 4.7+](http://docs.xamarin.com/releases/android/xamarin.android_4/xamarin.android_4.7) apps. You can also check out our [API Reference]({{ site.apis.dotnet }}) for more detailed information about our SDK. 12 | 13 | Parse's .NET SDK makes heavy use of the [Task-based Asynchronous Pattern](http://msdn.microsoft.com/en-us/library/hh873175.aspx) so that your apps remain responsive. You can use the [async and await](http://msdn.microsoft.com/en-us/library/hh191443.aspx) keywords in C# and Visual Basic to easily use these long-running tasks. 14 | -------------------------------------------------------------------------------- /_includes/dotnet/handling-errors.md: -------------------------------------------------------------------------------- 1 | # Handling Errors 2 | 3 | Parse has a few simple patterns for surfacing errors and handling them in your code. 4 | 5 | There are two types of errors you may encounter. The first is those dealing with logic errors in the way you're using the SDK. These types of errors result in general `Exception` being raised. For an example take a look at the following code: 6 | 7 | ```cs 8 | var user = new ParseUser(); 9 | await user.SignUpAsync(); 10 | ``` 11 | 12 | This will throw an `InvalidOperationException` because `SignUpAsync` was called without first setting the required properties (`Username` and `Password`). 13 | 14 | The second type of error is one that occurs when interacting with Parse Server over the network. These errors are either related to problems connecting to the cloud or problems performing the requested operation. Let's take a look at another example: 15 | 16 | ```cs 17 | await ParseObject.GetQuery("Note").GetAsync("thisObjectIdDoesntExist"); 18 | ``` 19 | 20 | In the above code, we try to fetch an object with a non-existent `ObjectId`. Parse Server will return an error -- so here's how to handle it properly: 21 | 22 | ```cs 23 | try 24 | { 25 | await ParseObject.GetQuery("Note").GetAsync(someObjectId); 26 | // Everything went fine! 27 | } 28 | catch (ParseException e) 29 | { 30 | if (e.Code == ParseException.ErrorCode.ObjectNotFound) 31 | { 32 | // Uh oh, we couldn't find the object! 33 | } 34 | else 35 | { 36 | // Some other error occurred 37 | } 38 | } 39 | ``` 40 | 41 | By default, all connections have a timeout of 10 seconds, so tasks will not hang indefinitely. 42 | 43 | For a list of all possible `ErrorCode` types, scroll down to [Error Codes](#error-codes), or see the `ParseException.ErrorCode` section of the [.NET API]({{ site.apis.dotnet }}/html/T_Parse_ParseException_ErrorCode.htm). 44 | -------------------------------------------------------------------------------- /_includes/embedded_c/cloud-code.md: -------------------------------------------------------------------------------- 1 | # Cloud Functions 2 | 3 | Cloud Functions allow you to run custom app logic on your Parse Server. This is especially useful for running complex app logic in the cloud so that you can reduce the memory footprint of your code on the IoT device. In a Cloud Function, you can query/save Parse data, send push notifications, and log analytics events. 4 | 5 | You write your Cloud Code in JavaScript using the Parse JavaScript SDK. See our [Cloud Code guide]({{ site.baseUrl }}/cloudcode/guide/) for details. 6 | 7 | For example, you define a Cloud Function as below. 8 | 9 | ```cpp 10 | Parse.Cloud.define("hello", request => { 11 | return request.body; 12 | }); 13 | ``` 14 | 15 | Then you can invoke this Cloud Function from your device: 16 | 17 | ```cpp 18 | void myCloudFunctionCallback(ParseClient client, int error, int httpStatus, const char* httpResponseBody) { 19 | if (error == 0 && httpResponseBody != NULL) { 20 | // httpResponseBody holds the Cloud Function response 21 | } 22 | } 23 | parseSendRequest(client, "POST", "/parse/functions/hello", "{\"value\":\"echo\"}", myCloudFunctionCallback); 24 | ``` 25 | -------------------------------------------------------------------------------- /_includes/embedded_c/getting-started.md: -------------------------------------------------------------------------------- 1 | # Getting Started 2 | 3 | The Parse platform provides a complete backend solution for your hardware device. Our goal is to totally eliminate the need for writing server code or maintaining servers. Using our C SDKs, all it takes is a few lines of code to save and retrieve data from the Parse Server. 4 | 5 | We provide two open source reference implementations for embedded environments: 6 | 7 | 1. Embedded C SDK - Targeted for Linux. This can be adapted to target OSes like Ubuntu, Debian, and others. 8 | 2. Embedded RTOS C SDK - Targeted for Real Time OSes. This can be adapted for other embedded RTOS environments. 9 | 10 | Both these SDKs provide a consistent interface to interact with the [Parse REST API]({{ site.baseurl }}/rest/guide), but with different underlying implementations. 11 | 12 | On Parse, you create an App for each of your mobile and embedded applications. Each App has its own application ID and client key that you apply to your SDK install. Your account on Parse can accommodate multiple Apps. This is useful even if you have one application, since you can deploy different versions for test and production. 13 | 14 | ## Install the SDK on your device 15 | 16 | ### Install a few tools 17 | 18 | Run the following lines in your Linux terminal: 19 | ```bash 20 | sudo apt-get update 21 | sudo apt-get install autoconf automake libtool 22 | sudo apt-get install libcurl4-openssl-dev uuid-dev 23 | ``` 24 | 25 | ### Download the SDK 26 | 27 | ```bash 28 | git clone https://github.com/parse-community/parse-embedded-sdks.git 29 | ``` 30 | 31 | ### Build the SDK 32 | 33 | Next, navigate to the newly downloaded directory and run a few commands to build the SDK. After this, the C library will be available globally on device. 34 | 35 | ```bash 36 | cd parse-embedded-sdks 37 | touch README 38 | autoreconf -fi 39 | ./configure --prefix=/usr 40 | make 41 | sudo make install 42 | ``` 43 | 44 | ## Initialization 45 | 46 | In order for Parse to know which app is associated with the connected device, simply specify the application ID and client key in the device code: 47 | 48 | ```cpp 49 | ParseClient client = parseInitialize("${APPLICATION_ID}", "${CLIENT_KEY}"); 50 | ``` 51 | 52 | After this, all calls to the Parse Server will use the specified app. 53 | -------------------------------------------------------------------------------- /_includes/embedded_c/handling-errors.md: -------------------------------------------------------------------------------- 1 | # Handling Errors 2 | 3 | There are two main ways an error from the SDK can be propagated to the caller - as a return result of the method call, or through the request and push callbacks. 4 | 5 | All functions that return a result will return 0 on success and a non-zero value on error. The error value will be an OS-specific error (for example, socket errors). 6 | 7 | The errors passed through callbacks are again OS-specific errors. The one exception is if there is an HTTP error status (4xx or 5xx) for a request, in which case, the HTTP status will be passed as separate parameters to the request callback. 8 | 9 | In the case of an HTTP error status, you should also check the request body. If the request body contains a valid JSON document, the document will contain a Parse error code, as defined by the [REST API documentation]({{ site.baseUrl }}/rest). 10 | 11 | For a list of all possible error codes, scroll down to [Error Codes](#error-codes). 12 | -------------------------------------------------------------------------------- /_includes/embedded_c/objects.md: -------------------------------------------------------------------------------- 1 | # Objects 2 | 3 | ## The Parse Object 4 | 5 | Storing data through the Parse REST API is built around a JSON encoding of the object's data. This data is schemaless, which means that you don't need to specify ahead of time what keys exist on each object. You simply set whatever key-value pairs you want, and the backend will store it. 6 | 7 | For example, let's say you're tracking data for your smart toaster. A single Parse Object could contain: 8 | 9 | ```javascript 10 | temperature: 175.0, leverDown: true 11 | ``` 12 | 13 | Keys must be alphanumeric strings. Values can be strings, numbers, booleans, or even arrays and dictionaries - anything that can be JSON-encoded. 14 | 15 | Each object has a class name that you can use to distinguish different sorts of data. For example, we store the temperature data in a class called `Temperature`. We recommend that you NameYourClassesLikeThis and nameYourKeysLikeThis, just to keep your code looking pretty. 16 | 17 | ## Data Types 18 | 19 | So far we've used values with type `double` and `bool`. The Parse REST API also supports strings, arrays, dates, and more. Read more about representing these and other types as JSON in the [REST API Guide]({{ site.baseUrl }}/rest/guide/#data-types). 20 | -------------------------------------------------------------------------------- /_includes/embedded_c/requests.md: -------------------------------------------------------------------------------- 1 | # Requests 2 | 3 | The main way you'll be interacting with Parse is through the `parseSendRequest` function, which sends a request to the REST API. For example, here's how to save an object with some data: 4 | 5 | ```cpp 6 | char data[] = "{ \"temperature\": 165 }"; parseSendRequest(client, "POST", "/parse/classes/Temperature", data, NULL); 7 | ``` 8 | 9 | For some requests you will be interested in data returned for the request. In such a case you need to setup a callback and pass it to `parseSendRequest`. 10 | 11 | ```cpp 12 | void mySaveCallback(ParseClient client, int error, int httpStatus, const char* httpResponseBody) { 13 | if (error == 0 && httpResponseBody != NULL) { 14 | // httpResponseBody holds the response to the request 15 | } 16 | } 17 | 18 | parseSendRequest(client, "GET", "/parse/classes/TestObject/gsMHOY3MAx", NULL, myCallback); 19 | ``` 20 | 21 | Using this function, you have full access to the REST API to create objects, delete objects, send analytics events, and more. Take a look at the [REST API Guide]({{ site.baseUrl }}/rest/guide) to find out all the details. 22 | -------------------------------------------------------------------------------- /_includes/embedded_c/sample-app.md: -------------------------------------------------------------------------------- 1 | # Sample App 2 | 3 | We prepared a [sample app](https://github.com/parseplatform/Anydevice) that demonstrates how to provision connected devices using a companion phone app such that connected devices can securely access user-specific data on Parse Server. This sample app also demonstrates how to send push notifications between the phone app and connected devices. 4 | -------------------------------------------------------------------------------- /_includes/embedded_c/users.md: -------------------------------------------------------------------------------- 1 | # Users & Sessions 2 | 3 | At the core of many apps, there is a notion of user accounts that lets users access their information in a secure manner. In our other SDKs, we provide a specialized user class that automatically handles much of the functionality required for user account management. Users are a special class of Parse Objects and has all the same features, such as flexible schema, automatic persistence, and a key value interface. 4 | 5 | You can sign in users via the REST API, but we do not recommend doing so unless your hardware device actually provides user keyboard input. In some cases, you may want to have a companion mobile or desktop app that lets the user sign up, and, that app [creates a restricted session]({{ site.baseUrl }}/ios/guide/#sessions) for the device running the embedded SDK. During your hardware device provisioning process, the phone can send this restricted session's token to the device. You can read more about users in our [REST API]({{ site.baseUrl }}/rest/guide/#users) or one of our other [SDK guides]({{ site.baseUrl }}/). 6 | 7 | Once you have a session token, you can use it to act on the behalf of a particular user. The session token used by the SDK can be set with`parseSetSessionToken`: 8 | 9 | ```cpp 10 | char token[] = "r:olqZkbv8fefVFNjWegyIXIggd"; 11 | parseSetSessionToken(client, token); 12 | ``` 13 | 14 | Once the session token is set, it will be associated with the current installation if it is not already associated with an installation. This association can be done only once and is automatically done by the SDK. 15 | 16 | A session token is tied to a specific installation (specified by the installationId field on the Session object). Attempts to use a session token for another installation will result in errors. 17 | 18 | If a session token is set before an installation is set, the SDK will create an installation for you. Thus, if you have a specific pair of installation ID and session token you need to use, you should set the installation ID first. 19 | 20 | The session token can be cleared with`parseClearSessionToken` function. Once the token is cleared, the device will not be authenticated as the user anymore: 21 | 22 | ```cpp 23 | parseClearSessionToken(client); 24 | ``` 25 | 26 | One can get the current session token by doing: 27 | 28 | ```cpp 29 | char* session_token = parseGetSessionToken(client); 30 | ``` 31 | 32 | The session token will be persistent across reboots. Note that we highly recommend using Restricted Sessions on hardware devices, especially ones that do not provide a high level of client security. For more details, check out the [guide on Sessions]({{ site.baseUrl }}/rest/guide/#sessions). 33 | -------------------------------------------------------------------------------- /_includes/flutter/push-notifications.md: -------------------------------------------------------------------------------- 1 | # Push Notifications 2 | 3 | Push notifications are a great way to keep your users engaged and informed about your app. You can reach your user base quickly and effectively. This guide will help you through the setup process and the general usage of Parse Platform to send push notifications. 4 | 5 | To configure push notifications in Parse Server, check out the [push notification guide](https://docs.parseplatform.org/parse-server/guide/#push-notifications). 6 | 7 | ## Installation 8 | 9 | 1. Install [Firebase Core](https://firebase.flutter.dev/docs/overview) and [Cloud Messaging](https://firebase.flutter.dev/docs/messaging/overview). For more details review the [Firebase Core Manual](https://firebase.flutter.dev/docs/manual-installation/). 10 | 11 | 2. Add the following code after `Parse().initialize(...);`: 12 | 13 | ```dart 14 | ParsePush.instance.initialize(FirebaseMessaging.instance); 15 | FirebaseMessaging.onMessage.listen((message) => ParsePush.instance.onMessage(message)); 16 | ``` 17 | 18 | 3. For you app to process push notification while in the background, add the following code: 19 | 20 | ```dart 21 | FirebaseMessaging.onBackgroundMessage(onBackgroundMessage); 22 | ``` 23 | 24 | ```dart 25 | Future onBackgroundMessage(RemoteMessage message) async => ParsePush.instance.onMessage(message); 26 | ``` 27 | 28 | ## Implementation Example 29 | 30 | The following is a code example for a simple implementation of push notifications: 31 | 32 | ```dart 33 | Future main() async { 34 | WidgetsFlutterBinding.ensureInitialized(); 35 | 36 | // Initialize Firebase Core 37 | await Firebase.initializeApp( 38 | options: DefaultFirebaseOptions.currentPlatform, 39 | ); 40 | 41 | // Initialize Parse 42 | await Parse().initialize("applicationId", "serverUrl", 43 | clientKey: "clientKey", debug: true); 44 | 45 | // Initialize Parse push notifications 46 | ParsePush.instance.initialize(FirebaseMessaging.instance); 47 | FirebaseMessaging.onMessage 48 | .listen((message) => ParsePush.instance.onMessage(message)); 49 | 50 | // Process push notifications while app is in the background 51 | FirebaseMessaging.onBackgroundMessage(onBackgroundMessage); 52 | 53 | runApp(const MyApp()); 54 | } 55 | 56 | Future onBackgroundMessage(RemoteMessage message) async => 57 | ParsePush.instance.onMessage(message); 58 | 59 | class MyApp extends StatelessWidget { 60 | const MyApp({super.key}); 61 | 62 | @override 63 | Widget build(BuildContext context) { 64 | return MaterialApp( 65 | title: 'Flutter Demo', 66 | theme: ThemeData( 67 | colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple), 68 | useMaterial3: true, 69 | ), 70 | home: const MyHomePage(title: 'Flutter Demo Home Page'), 71 | ); 72 | } 73 | } 74 | ... 75 | ``` 76 | -------------------------------------------------------------------------------- /_includes/graphql/api-doc.md: -------------------------------------------------------------------------------- 1 | # API Doc 2 | 3 | GraphQL is a self documented API, to learn all available operations, it's recommended to start the Parse GraphQL Server and visit the Docs tab on the GraphQL Playground. 4 | 5 | ```bash 6 | $ npm install -g parse-server mongodb-runner 7 | $ mongodb-runner start 8 | $ parse-server --appId APPLICATION_ID --masterKey MASTER_KEY --databaseURI mongodb://localhost/test --mountGraphQL --mountPlayground 9 | ``` 10 | 11 | Visit your [Local GraphQL Playground](http://localhost:1337/playground) 12 | 13 | GraphQL Playground 14 | -------------------------------------------------------------------------------- /_includes/graphql/classes.md: -------------------------------------------------------------------------------- 1 | # Classes 2 | 3 | Since your application does not have a schema yet, you can use the `createClass` mutation to create your first class through the GraphQL API. Run the following: 4 | ```jsonc 5 | // Header 6 | { 7 | "X-Parse-Application-Id": "APPLICATION_ID", 8 | "X-Parse-Master-Key": "MASTER_KEY" 9 | } 10 | ``` 11 | 12 | ```graphql 13 | # GraphQL 14 | mutation createGameScoreClass { 15 | createClass( 16 | input: { 17 | clientMutationId: "anFrontId" 18 | name: "GameScore" 19 | schemaFields: { 20 | addStrings: [{ name: "playerName" }] 21 | addNumbers: [{ name: "score" }] 22 | addBooleans: [{ name: "cheatMode" }] 23 | } 24 | } 25 | ) { 26 | clientMutationId 27 | class { 28 | name 29 | schemaFields { 30 | name 31 | __typename 32 | } 33 | } 34 | } 35 | } 36 | ``` 37 | ```jsonc 38 | // Response 39 | { 40 | "data": { 41 | "createClass": { 42 | "clientMutationId": "anFrontId", 43 | "class": { 44 | "name": "GameScore", 45 | "schemaFields": [ 46 | { 47 | "name": "objectId", 48 | "__typename": "SchemaStringField" 49 | }, 50 | { 51 | "name": "updatedAt", 52 | "__typename": "SchemaDateField" 53 | }, 54 | { 55 | "name": "createdAt", 56 | "__typename": "SchemaDateField" 57 | }, 58 | { 59 | "name": "playerName", 60 | "__typename": "SchemaStringField" 61 | }, 62 | { 63 | "name": "score", 64 | "__typename": "SchemaNumberField" 65 | }, 66 | { 67 | "name": "cheatMode", 68 | "__typename": "SchemaBooleanField" 69 | }, 70 | { 71 | "name": "ACL", 72 | "__typename": "SchemaACLField" 73 | } 74 | ] 75 | } 76 | } 77 | } 78 | } 79 | ``` 80 | 81 | Parse Server learned from the first class that you created and now you have the `GameScore` class in your schema. You can now start using the automatically generated operations! 82 | -------------------------------------------------------------------------------- /_includes/graphql/graphql.md: -------------------------------------------------------------------------------- 1 | # GraphQL 2 | 3 | Before continuing, it is recommended to study some of the GraphQL documentation: 4 | 5 | A GraphQL API contains 3 main concepts: 6 | * `Query`: Fetch data 7 | * `Mutation`: Create or update data 8 | * `Subscription`: Listen for data changes 9 | 10 | ## Learn Query & Mutation 11 | To learn how to query data and execute operation on a GraphQL API [consult the official documentation](https://graphql.org/learn/queries/). 12 | -------------------------------------------------------------------------------- /_includes/graphql/health-check.md: -------------------------------------------------------------------------------- 1 | # Health Check 2 | 3 | Now that you have set up your GraphQL environment, it is time to run your first query. Execute the following code in your GraphQL Playground to check your API's health: 4 | 5 | ```jsonc 6 | // Header 7 | { 8 | "X-Parse-Application-Id": "APPLICATION_ID", 9 | "X-Parse-Master-Key": "MASTER_KEY" // (optional) 10 | } 11 | ``` 12 | 13 | ```graphql 14 | # GraphQL 15 | query healthy { 16 | health 17 | } 18 | ``` 19 | ```jsonc 20 | // Response 21 | { 22 | "data": { 23 | "health": true 24 | } 25 | } 26 | ``` 27 | -------------------------------------------------------------------------------- /_includes/graphql/learning-more.md: -------------------------------------------------------------------------------- 1 | # Learning More 2 | 3 | If you look at the right side of your GraphQL Playground, you will see the DOCS and SCHEMA menus. They are automatically generated by analyzing your application schema and contain all operations that you can call for your application, including the automatic class queries and mutations. Please refer to them and learn more about everything that you can do with your Parse GraphQL API. 4 | 5 | GraphQL Docs 6 | 7 | Additionally, the [GraphQL Learn Section](https://graphql.org/learn/) is a very good source to start learning about the power of the GraphQL language. 8 | -------------------------------------------------------------------------------- /_includes/graphql/relay.md: -------------------------------------------------------------------------------- 1 | # Relay 2 | 3 | The Parse Server GraphQL API follows latest standards currently available for highly-scalable APIs and ambitious front-end projects. 4 | 5 | The Parse Open Source Team choose to follow the [GraphQL Server Relay Specification](https://relay.dev/docs/guides/graphql-server-specification). 6 | 7 | Relay is a JavaScript framework for building data-driven React applications powered by GraphQL, designed from the ground up to be easy to use, extensible and, most of all, performant. Relay accomplishes this with static queries and ahead-of-time code generation. 8 | 9 | Later we will see some Relay concepts like: Node, Connection and Cursor. 10 | -------------------------------------------------------------------------------- /_includes/helpful_box.html: -------------------------------------------------------------------------------- 1 | {% capture directory %}{% if page.platform == "macos" %}ios{% else %}{{ page.platform }}{% endif %}{% endcapture %} 2 | {% capture directory %}{% if include.section" %}{{include.section}}{% else %}{{ directory }}{% endif %}{% endcapture %} 3 | 4 |
5 | Want to contribute to this doc? Edit this section. 6 |
7 |
8 | -------------------------------------------------------------------------------- /_includes/ios/getting-started.md: -------------------------------------------------------------------------------- 1 | # Getting Started 2 | 3 | The easiest way to integrate the Parse SDK into your iOS, iPadOS, macOS, watchOS, tvOS app is via Swift Package Manager (SPM). 4 | 5 | 1. Open Xcode > File > Add packages... 6 | 2. Add the following package URL: 7 | 8 | ``` 9 | https://github.com/parse-community/Parse-SDK-iOS-OSX 10 | ``` 11 | 12 | **Note: You may have to add submodules under Link Binary with Libraries** 13 | 14 | To initialize the Parse client, add the following to your AppDelegate.swift file (AppDelegate.m for Objective-C), in the `application:didFinishLaunchingWithOptions:` method. 15 | 16 |
17 | ```objective_c 18 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 19 | [Parse initializeWithConfiguration:[ParseClientConfiguration configurationWithBlock:^(id configuration) { 20 | configuration.applicationId = @"parseAppId"; 21 | configuration.clientKey = @"parseClientKey"; 22 | configuration.server = @"parseServerUrlString"; 23 | }]]; 24 | return YES; 25 | } 26 | ``` 27 | ```swift 28 | func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 29 | let parseConfig = ParseClientConfiguration { 30 | $0.applicationId = "parseAppId" 31 | $0.clientKey = "parseClientKey" 32 | $0.server = "parseServerUrlString" 33 | } 34 | Parse.initialize(with: parseConfig) 35 | return true 36 | } 37 | ``` 38 |
39 | 40 | Make sure to import the Parse module at the top of any file in which you want to use the Parse SDK by including the follwing. 41 | 42 |
43 | ```objective_c 44 | @import ParseCore; 45 | ``` 46 | ```swift 47 | import ParseCore 48 | ``` 49 |
50 | -------------------------------------------------------------------------------- /_includes/js/analytics.md: -------------------------------------------------------------------------------- 1 | # Analytics 2 | 3 | Parse provides a number of hooks for you to get a glimpse into the ticking heart of your app. We understand that it's important to understand what your app is doing, how frequently, and when. 4 | 5 | While this section will cover different ways to instrument your app to best take advantage of Parse's analytics backend, developers using Parse to store and retrieve data can already take advantage of metrics on Parse. 6 | 7 | Without having to implement any client-side logic, you can view real-time graphs and breakdowns (by device type, Parse class name, or REST verb) of your API Requests in your app's dashboard and save these graph filters to quickly access just the data you're interested in. 8 | 9 | 10 | ## Custom Analytics 11 | 12 | `Parse.Analytics` also allows you to track free-form events, with a handful of `string` keys and values. These extra dimensions allow segmentation of your custom events via your app's Dashboard. 13 | 14 | Say your app offers search functionality for apartment listings, and you want to track how often the feature is used, with some additional metadata. 15 | 16 | ```javascript 17 | const dimensions = { 18 | // Define ranges to bucket data points into meaningful segments 19 | priceRange: '1000-1500', 20 | // Did the user filter the query? 21 | source: 'craigslist', 22 | // Do searches happen more often on weekdays or weekends? 23 | dayType: 'weekday' 24 | }; 25 | // Send the dimensions to Parse along with the 'search' event 26 | Parse.Analytics.track('search', dimensions); 27 | ``` 28 | 29 | `Parse.Analytics` can even be used as a lightweight error tracker — simply invoke the following and you'll have access to an overview of the rate and frequency of errors, broken down by error code, in your application: 30 | 31 | ```javascript 32 | const codeString = '' + error.code; 33 | Parse.Analytics.track('error', { code: codeString }); 34 | ``` 35 | 36 | Note that Parse currently only stores the first eight dimension pairs per call to `Parse.Analytics.track()`. 37 | -------------------------------------------------------------------------------- /_includes/menu.html: -------------------------------------------------------------------------------- 1 | 33 | -------------------------------------------------------------------------------- /_includes/parse-server/best-practice.md: -------------------------------------------------------------------------------- 1 | # Best Practice 2 | 3 | *This page is a work in progress and incomplete. If you have any suggestions, please open a pull request.* 4 | 5 | ## Security 6 | 7 | ### Firewall 8 | 9 | Protect all Parse Server endpoints using a Firewall to mitigate the risk of malicious attempts to scape user data, flood the database and DDoS attacks. 10 | - Use rate-limiting rules for public endpoints, for example limit the number of requests per IP address or per user. 11 | - Use very restrictive rules for private endpoints; for example limit access to Parse Dashboard to your personal network. 12 | 13 | ## Optimization 14 | 15 | The following is a list of design considerations to optimize data traffic and performance. 16 | 17 | ### Database 18 | 19 | - Use short field names; field names need to be stored in the database just like the field values; short field names not only require less database storage but also reduce the data traffic between database, server and client. 20 | 21 | ### Queries 22 | 23 | - Use `select` and `exclude` to transfer only the fields that you need instead of the whole object. -------------------------------------------------------------------------------- /_includes/parse-server/cache-adapters.md: -------------------------------------------------------------------------------- 1 | # Configuring Cache Adapters 2 | 3 | By default, parse-server provides an internal cache layer to speed up schema verifications, user, roles and sessions lookup. 4 | 5 | In some cases, in distributed environment, you may want to use a distributed cache like Redis. 6 | 7 | parse-server comes with an optional redis cache adapter. 8 | 9 | Those cache adapters can be cleaned at anytime internally, you should not use them to cache data and you should let parse-server manage their data lifecycle. 10 | 11 | ## RedisCacheAdapter 12 | 13 | ```javascript 14 | 15 | var RedisCacheAdapter = require('parse-server').RedisCacheAdapter; 16 | var redisOptions = {url: 'YOUR REDIS URL HERE'} 17 | var redisCache = new RedisCacheAdapter(redisOptions); 18 | 19 | var api = new ParseServer({ 20 | databaseURI: databaseUri || 'mongodb://localhost:27017/dev', 21 | appId: process.env.APP_ID || 'APPLICATION_ID', 22 | masterKey: process.env.MASTER_KEY || 'MASTER_KEY', 23 | ... 24 | cacheAdapter: redisCache, 25 | ... 26 | }); 27 | ``` 28 | 29 | The `redisOptions` are passed directly to the redis.createClient method. For more information refer to the [redis.createClient](https://www.npmjs.com/package/redis#rediscreateclient) documentation. 30 | 31 | Note that at the moment, only passing a single argument is supported. 32 | 33 | The cache adapter can flush the redis database at anytime. It is best to not use the same redis database for other services. A different redis database can be chosen by providing a different database number to `redisOptions`. By default redis has 16 databases (indexed from 0 to 15). 34 | -------------------------------------------------------------------------------- /_includes/parse-server/class-level-permissions.md: -------------------------------------------------------------------------------- 1 | # Class Level Permissions 2 | 3 | Class level permissions are a security feature from that allows one to restrict access on a broader way than the [ACL based permissions]({{ site.baseUrl }}/rest/guide/#security). 4 | 5 | ## `requiresAuthentication` 6 | 7 | If you want to restrict access to a full class to only authenticated users, you can use the `requiresAuthentication` class level permission. For example, you want to allow your **authenticated users** to `find` and `get` objects from your application and your admin users to have all privileges, you would set the CLP: 8 | 9 | ```js 10 | // PUT http://localhost:1337/schemas/:className 11 | // Set the X-Parse-Application-Id and X-Parse-Master-Key header 12 | // body: 13 | { 14 | classLevelPermissions: 15 | { 16 | "find": { 17 | "requiresAuthentication": true, 18 | "role:admin": true 19 | }, 20 | "get": { 21 | "requiresAuthentication": true, 22 | "role:admin": true 23 | }, 24 | "create": { "role:admin": true }, 25 | "update": { "role:admin": true }, 26 | "delete": { "role:admin": true }, 27 | } 28 | } 29 | ``` 30 | 31 | Note that this is in no way securing your content. If you allow anyone to log in to your server, any client will be able to query this object. 32 | -------------------------------------------------------------------------------- /_includes/parse-server/deploying-back4app.md: -------------------------------------------------------------------------------- 1 | ## Deploying on Back4App 2 | 3 | Back4App provides an easy way to deploy and host your Parse Server Apps. 4 | 5 | Here are the steps: 6 | 7 | 1. Create a free [Back4App Account](https://www.back4app.com/). 8 | 2. Create a new [Parse App](https://www.back4app.com/docs/get-started/new-parse-app). 9 | 3. Go to your [App Core Settings Menu](https://www.back4app.com/docs/platform/app-settings) and check your App Keys and Database URI. 10 | 11 | If you need to migrate your local Parse Server to Back4App you can follow [these guidelines](https://www.back4app.com/docs/app-migration/introduction). 12 | -------------------------------------------------------------------------------- /_includes/parse-server/deploying-heroku-mlab.md: -------------------------------------------------------------------------------- 1 | ## Deploying to Heroku and MongoDB Atlas 2 | 3 | Heroku and MongoDB Atlas provide an easy way to deploy Parse Server, especially if you're new to managing your own backend infrastructure. 4 | 5 | Here are the steps: 6 | 7 | 1. Create a repo for your Express app with the Parse Server middleware mounted (you can use our [sample project](https://github.com/parse-community/parse-server-example), or start your own). 8 | 2. Create a Heroku account (if you don’t have one already) and use the Heroku Toolbelt to log in and prepare a new app in the same directory as your Express app. Take a look at Heroku's [Getting Started with Node.js guide](https://devcenter.heroku.com/articles/getting-started-with-nodejs#introduction) for more details. 9 | 3. Set up your MongoDB database: 10 | 1. Sign up for a [MongoDB Atlas account](https://www.mongodb.com/cloud/atlas). 11 | 2. Create a `New Project`. 12 | 3. Open the page `Database Access` and create a new database user with username and password. Remember these user credentials, you will need them later to connect Parse Server to the database. As user privileges choose `Read and write to any database`, you can change these privileges later on and make them more restrictive according to your needs. 13 | 4. Open the page `Clusters` and create a new cluster. 14 | 5. On the cluster details page, click on the tab `Collections` and create a new database. 15 | 6. On the cluster details page, click on the tab `Command Line Tools`, click on `Connect Instructions` and choose `Connect your application`. 16 | 7. Copy the database connection string. Replace the placeholders in the connection string with the username and password of the user you created earlier and the database name. 17 | 4. Use heroku config and note the URI provided by Atlas under the var MONGOLAB_URI 18 | 5. Copy this URI and set it as a new config variable: `heroku config:set DATABASE_URI=mongodb://...` 19 | 6. Deploy it: `git push heroku master` 20 | 21 | You may also refer to the Heroku Dev Center article on [Deploying a Parse Server to Heroku](https://devcenter.heroku.com/articles/deploying-a-parse-server-to-heroku). 22 | -------------------------------------------------------------------------------- /_includes/parse-server/deploying.md: -------------------------------------------------------------------------------- 1 | # Deploying Parse Server 2 | 3 | The fastest and easiest way to start using Parse Server is to run MongoDB and Parse Server locally. Once you have a better understanding of how the project works, read on to learn how to deploy Parse Server to major infrastructure providers. If your provider is not listed here, please take a look at the [list of articles from the community](https://github.com/parse-community/parse-server/wiki#community-links) as someone may have already written a guide for it. 4 | 5 | {% include_relative _includes/parse-server/deploying-heroku-mlab.md %} 6 | 7 | {% include_relative _includes/parse-server/deploying-glitch-mlab.md %} 8 | 9 | {% include_relative _includes/parse-server/deploying-back4app.md %} 10 | 11 | {% include_relative _includes/parse-server/deploying-aws-ubuntu.md %} -------------------------------------------------------------------------------- /_includes/parse-server/keys.md: -------------------------------------------------------------------------------- 1 | # Keys 2 | 3 | Parse Server does not require the use of client-side keys. This includes the client key, JavaScript key, .NET key, and REST API key. The Application ID is sufficient to secure your app. 4 | 5 | However, you have the option to specify any of these four keys upon initialization. Upon doing so, Parse Server will enforce that any clients passing a key matches. The behavior is consistent with hosted Parse. 6 | 7 | ## Read-Only masterKey 8 | 9 | Starting `parse-server` 2.6.5, it is possible to specify a `readOnlyMasterKey`. When using this key instead of the masterKey, the server will perform all `read` operations as if they were executing with the `masterKey` but will fail to execute any `write` operation. 10 | 11 | This key is especially powerful when used with `parse-dashboard`. Please refer to [Parse Dashboard](https://github.com/parse-community/parse-dashboard/)'s documentation for more information. 12 | -------------------------------------------------------------------------------- /_includes/parse-server/mongo-read-preference.md: -------------------------------------------------------------------------------- 1 | # Using MongoDB Read Preference 2 | As of ParseServer 2.5, it is possible to set a read preference for Mongo DB queries. For a discussion of Read Preference, limitations and use cases, see the [Mongo documentation for Read Preference.](https://docs.mongodb.com/manual/core/read-preference/). 3 | 4 | ## How to set Read Preference in ParseServer 5 | Currently, read preference can only be set in cloud code. For an example see: [cloud code examples](../../cloudcode/guide#examples) 6 | 7 | -------------------------------------------------------------------------------- /_includes/parse-server/push-notifications-clients.md: -------------------------------------------------------------------------------- 1 | ## Configuring your clients to receive Push Notifications 2 | 3 | The following will guide you through the necessary steps to configure your [iOS](#ios-apps) and [Android](#android-apps) client apps to receive push notifications from Parse Server. If you haven't yet, you will first need to prepare your APNS and FCM credentials as documented in [Step 1](#prepare-apns-and-fcm-credentials) of the Push Notifications Quick Start. 4 | 5 | ### iOS Apps 6 | 7 | {% include_relative _includes/parse-server/push-notifications-ios.md %} 8 | 9 | ### Android apps 10 | 11 | {% include_relative _includes/parse-server/push-notifications-android.md %} 12 | -------------------------------------------------------------------------------- /_includes/parse-server/using-parse-sdks.md: -------------------------------------------------------------------------------- 1 | # Using Parse SDKs with Parse Server 2 | 3 | To use a Parse SDK with Parse Server, change the server URL to your Parse API URL. For example, if you have Parse Server running locally mounted at /parse: 4 | 5 | **iOS / OS X / watchOS / tvOS** 6 | 7 | _Swift_ 8 | 9 | ```swift 10 | let configuration = ParseClientConfiguration { 11 | $0.applicationId = "YOUR_APP_ID" 12 | $0.clientKey = "" 13 | $0.server = "http://localhost:1337/parse" 14 | } 15 | Parse.initialize(with: configuration) 16 | ``` 17 | 18 | _Objective-C_ 19 | 20 | ```objc 21 | [Parse initializeWithConfiguration:[ParseClientConfiguration configurationWithBlock:^(id configuration) { 22 | configuration.applicationId = @"YOUR_APP_ID"; 23 | configuration.clientKey = @""; 24 | configuration.server = @"http://localhost:1337/parse"; 25 | }]]; 26 | ``` 27 | 28 | **Android** 29 | 30 | ```java 31 | Parse.initialize(new Parse.Configuration.Builder(myContext) 32 | .applicationId("YOUR_APP_ID") 33 | .server("http://localhost:1337/parse/") 34 | ... 35 | .build() 36 | ); 37 | ``` 38 | 39 | **JavaScript** 40 | 41 | ```js 42 | Parse.initialize("YOUR_APP_ID"); 43 | Parse.serverURL = 'http://localhost:1337/parse' 44 | ``` 45 | 46 | **.NET** 47 | 48 | ```csharp 49 | ParseClient.initialize(new ParseClient.Configuration { 50 | ApplicationId = "YOUR_APP_ID", 51 | Server = "http://localhost:1337/parse/" 52 | }); 53 | ``` 54 | 55 | **PHP** 56 | 57 | ```php 58 | ParseClient::initialize('YOUR_APP_ID', 'YOUR_CLIENT_KEY', 'YOUR_MASTER_KEY'); 59 | ParseClient::setServerURL('http://localhost:1337', 'parse'); // server url & mount path passed separately 60 | ``` 61 | -------------------------------------------------------------------------------- /_includes/php/analytics.md: -------------------------------------------------------------------------------- 1 | # Analytics 2 | 3 | Parse provides a number of hooks for you to get a glimpse into the ticking heart of your app. We understand that it's important to understand what your app is doing, how frequently, and when. 4 | 5 | While this section will cover different ways to instrument your app to best take advantage of Parse's analytics backend, developers using Parse to store and retrieve data can already take advantage of metrics on Parse. 6 | 7 | ## Custom Analytics 8 | 9 | `ParseAnalytics` also allows you to track free-form events, with a handful of `string` keys and values. These extra dimensions allow segmentation of your custom events via your app's Dashboard. 10 | 11 | Say your app offers search functionality for apartment listings, and you want to track how often the feature is used, with some additional metadata. 12 | 13 | ```php 14 | // Define ranges to bucket data points into meaningful segments 15 | $dimensions = [ 16 | "priceRange" => '1000-1500', 17 | "source" => 'craigslist', 18 | "dayType": 'weekday' 19 | ]; 20 | // Send the dimensions to Parse along with the 'search' event 21 | ParseAnalytics::track('search', $dimensions); 22 | ``` 23 | 24 | `ParseAnalytics` can even be used as a lightweight error tracker — simply invoke the following and you'll have access to an overview of the rate and frequency of errors, broken down by error code, in your application: 25 | 26 | ```php 27 | $codeString = '' + $error->getCode(); 28 | ParseAnalytics::track('error', ["code" => codeString]); 29 | ``` 30 | 31 | Note that Parse currently only stores the first eight dimension pairsper call to `ParseAnalytics::track()`. 32 | -------------------------------------------------------------------------------- /_includes/php/cloud.md: -------------------------------------------------------------------------------- 1 | # Cloud Code 2 | 3 | Server side cloud code is a powerful component of parse server. 4 | 5 | You can read more about how to setup cloud code in the [cloud code guide](http://docs.parseplatform.org/cloudcode/guide/). 6 | 7 | ## Cloud Functions 8 | 9 | Directly call server-side cloud code functions and get their results. 10 | 11 | ```php 12 | $results = ParseCloud::run("aCloudFunction", array("from" => "php")); 13 | ``` 14 | 15 | ## Cloud Jobs 16 | 17 | Like cloud functions, cloud jobs allow you to run code server-side but in an asynchronous fashion. 18 | Instead of waiting for execution to complete you are immediately returned an id for tracking the job's progress. 19 | You can use this id to see the current information on a job and whether it has completed. 20 | 21 | ```php 22 | // start job 23 | $jobStatusId = ParseCloud::startJob('MyCloudJob', array("startedBy" => "me!")); 24 | 25 | // get job status, a ParseObject! 26 | $jobStatus = ParseCloud::getJobStatus($jobStatusId); 27 | $status = $jobStatus->get('status'); // failed / succeeded when done 28 | ``` -------------------------------------------------------------------------------- /_includes/php/config.md: -------------------------------------------------------------------------------- 1 | # Config 2 | 3 | **ParseConfig** allows you to access the global **Config** object for your parse server setup. 4 | 5 | 6 | You can get, set and update simple values much like you would on an instance of **ParseObject**. Through this all your SDKs and applications can have access to global settings, options, and more. 7 | What you choose to put in your config is purely up to you however. 8 | 9 | ```php 10 | // get existing application-wide config 11 | $config = new ParseConfig(); 12 | 13 | // check a config value of yours 14 | $allowed = $config->get('feature_allowed'); 15 | 16 | // add a simple config value 17 | $config->set('feature_allowed', true); 18 | 19 | // save this global config 20 | $config->save(); 21 | ``` -------------------------------------------------------------------------------- /_includes/php/files.md: -------------------------------------------------------------------------------- 1 | # Files 2 | 3 | ## Creating a ParseFile 4 | 5 | `ParseFile` lets you store application files in the cloud that would otherwise be too large or cumbersome to fit into a regular `ParseObject`. The most common use case is storing images, but you can also use it for documents, videos, music, and any other binary data. 6 | 7 | Getting started with `ParseFile` is easy. There are a couple of ways to create a file. The first is to provide the contents of the file. 8 | 9 | ```php 10 | $contents = "Hello World."; 11 | $file = ParseFile::createFromData($contents, "myfile.txt"); 12 | ``` 13 | 14 | Alternatively, you can create a file from the contents of a local file: 15 | 16 | ```php 17 | $localFilePath = "/tmp/myFile.txt"; 18 | $file = ParseFile::createFromFile($localFilePath, "myfile.txt"); 19 | ``` 20 | 21 | Notice in this example that we give the file a name of `myfile.txt`. There's two things to note here: 22 | 23 | * You don't need to worry about filename collisions. Each upload gets a unique identifier so there's no problem with uploading multiple files named `photo.jpg`. 24 | * It's important that you give a name to the file that has a file extension. This lets Parse figure out the file type and handle it accordingly. So, if you're storing PNG images, make sure your filename ends with `.png`. 25 | 26 | Next you'll want to save the file up to the cloud. As with `ParseObject`, the `save` method is the way to go. 27 | 28 | ```php 29 | $file->save(); 30 | // The file has been saved to Parse and now has a URL. 31 | $url = $file->getURL(); 32 | ``` 33 | 34 | Finally, after the save completes, you can associate a `ParseFile` with a `ParseObject` just like any other piece of data: 35 | 36 | ```php 37 | $jobApplication = new ParseObject("JobApplication"); 38 | $jobApplication->set("applicantName", "Joe Smith"); 39 | $jobApplication->set("applicantResumeFile", $file); 40 | $jobApplication->save(); 41 | ``` 42 | 43 | ## Retrieving File Contents 44 | 45 | How to best retrieve the file contents back depends on the context of your application. It's best if you can make the visitors browser do the work for you. Typically, that means rendering the file's URL into your output. Here we output an uploaded profile photo in an image tag: 46 | 47 | ```php 48 | $profilePhoto = $profile->get("photoFile"); 49 | echo ''; 50 | ``` 51 | 52 | If you want to fetch the contents of the file, you can retrieve it like this: 53 | 54 | ```php 55 | $contents = $file->getData(); 56 | ``` 57 | -------------------------------------------------------------------------------- /_includes/php/getting-started.md: -------------------------------------------------------------------------------- 1 | # Getting Started 2 | 3 | If you haven't set up your project yet, please [head over to the PHP SDK setup guide](https://github.com/parse-community/parse-php-sdk#installation) or read the [Installation](#installation) section below to get up and running. You can also check out our [API Reference]({{ site.apis.php }}) for more detailed information about our SDK. 4 | 5 | The Parse platform provides a complete backend solution for your mobile application. Generally, our goal is to eliminate the need for managing servers and writing server-side code. Our PHP SDK is for those applications and situations where server-side code is necessary, or simply preferred. 6 | 7 | The Parse PHP SDK is fully open source, and anyone can contribute to make it better, or make their own changes if necessary. Check out the [GitHub repository](https://github.com/parse-community/parse-php-sdk) for more information. 8 | 9 | The Parse PHP SDK requires version 5.4 or greater of the PHP runtime. 10 | -------------------------------------------------------------------------------- /_includes/php/handling-errors.md: -------------------------------------------------------------------------------- 1 | # Handling Errors 2 | 3 | The Parse PHP SDK throws `ParseException`s when errors are returned from the Parse API. For other errors, the base `Exception` class will be thrown. It is recommended to wrap your Parse calls in try/catch blocks to handle any errors which occur. 4 | 5 | ```php 6 | $query = new ParseQuery("Note"); 7 | try { 8 | // This will throw a ParseException, the object is not found. 9 | $result = $query->get("aBcDeFgH") 10 | } catch (ParseException $error) { 11 | // $error is an instance of ParseException with details about the error. 12 | echo $error->getCode(); 13 | echo $error->getMessage(); 14 | } 15 | ``` 16 | 17 | For a list of all possible error codes, scroll down to [Error Codes](#error-codes). 18 | -------------------------------------------------------------------------------- /_includes/php/installation.md: -------------------------------------------------------------------------------- 1 | # Installation 2 | 3 | There are various ways to install and use this sdk. We'll elaborate on a couple here. 4 | Note that the Parse PHP SDK requires PHP 5.4 or newer. It can also run on HHVM (recommended 3.0 or newer). 5 | 6 | ## Install with Composer 7 | 8 | [Get Composer], the PHP package manager. Then create a composer.json file in 9 | your projects root folder, containing: 10 | 11 | ```jsonc 12 | { 13 | "require": { 14 | "parse/php-sdk" : "1.4.*" 15 | } 16 | } 17 | ``` 18 | 19 | Run "composer install" to download the SDK and set up the autoloader, 20 | and then require it from your PHP script: 21 | 22 | ```php 23 | require 'vendor/autoload.php'; 24 | ``` 25 | 26 | ## Install with Git 27 | 28 | You can clone down this sdk using your favorite github client, or via the terminal. 29 | 30 | ```bash 31 | git clone https://github.com/parse-community/parse-php-sdk.git 32 | ``` 33 | 34 | You can then include the `autoload.php` file in your code to automatically load the Parse SDK classes. 35 | 36 | ```php 37 | require 'autoload.php'; 38 | ``` 39 | 40 | ## Install with another method 41 | 42 | If you downloaded this sdk using any other means you can treat it like you used the git method above. 43 | Once it's installed you need only require the `autoload.php` to have access to the sdk. -------------------------------------------------------------------------------- /_includes/php/logs.md: -------------------------------------------------------------------------------- 1 | # Logs 2 | 3 | `ParseLogs` allows info and error logs to be retrieved from the server as JSON. 4 | This is available in sdk versions **1.4.0** and up. 5 | 6 | Using the same approach as that which is utilized in the [dashboard](https://github.com/parse-community/parse-dashboard) you can view your logs with specific ranges in time, type and order. 7 | Note that this requires the correct masterKey to be set during your initialization for access. 8 | 9 | ```php 10 | // get last 100 info logs, sorted in descending order 11 | $logs = ParseLogs::getInfoLogs(); 12 | 13 | // get last 100 info logs, sorted in descending order 14 | $logs = ParseLogs::getErrorLogs(); 15 | 16 | // logs can be retrieved with further specificity 17 | // get 10 logs from a date up to a date in ascending order 18 | $logs = ParseLogs::getInfoLogs(10, $fromDate, $untilDate, 'asc'); 19 | 20 | // above can be done for 'getErrorLogs' as well 21 | ``` -------------------------------------------------------------------------------- /_includes/php/schema.md: -------------------------------------------------------------------------------- 1 | # Schema 2 | 3 | Direct manipulation of the classes that are on your server is possible through `ParseSchema`. Although fields and classes can be automatically generated (the latter assuming client class creation is enabled) ParseSchema gives you explicit control over these classes and their fields. 4 | 5 | ```php 6 | // create an instance to manage your class 7 | $mySchema = new ParseSchema("MyClass"); 8 | 9 | // gets the current schema data as an associative array, for inspection 10 | $data = $mySchema->get(); 11 | 12 | // add any # of fields, without having to create any objects 13 | $mySchema->addString('string_field'); 14 | $mySchema->addNumber('num_field'); 15 | $mySchema->addBoolean('bool_field'); 16 | $mySchema->addDate('date_field'); 17 | $mySchema->addFile('file_field'); 18 | $mySchema->addGeoPoint('geopoint_field'); 19 | $mySchema->addPolygon('polygon_field'); 20 | $mySchema->addArray('array_field'); 21 | $mySchema->addObject('obj_field'); 22 | $mySchema->addPointer('pointer_field'); 23 | 24 | // you can even setup pointer/relation fields this way 25 | $mySchema->addPointer('pointer_field', 'TargetClass'); 26 | $mySchema->addRelation('relation_field', 'TargetClass'); 27 | 28 | // new types can be added as they are available 29 | $mySchema->addField('new_field', 'ANewDataType'); 30 | 31 | // save/update this schema to persist your field changes 32 | $mySchema->save(); 33 | // or 34 | $mySchema->update(); 35 | ``` 36 | 37 | Assuming you want to remove a field you can simply call `deleteField` and `save/update` to clear it out. 38 | 39 | ```php 40 | $mySchema->deleteField('string_field'); 41 | $mySchema->save(): 42 | // or for an existing schema... 43 | $mySchema->update(): 44 | ``` 45 | 46 | ## Indexes 47 | 48 | Indexes support efficient execution of queries from the database. Keep in mind that the masterKey is required for these operations, so be sure it's set in your initialization code before you use this feature. 49 | 50 | ```php 51 | // To add an index, the field must exist before you create an index 52 | $schema->addString('field'); 53 | $index = [ 'field' => 1 ]; 54 | $schema->addIndex('index_name', $index); 55 | $schema->save(); 56 | 57 | // Delete an index 58 | $schema->deleteIndex('index_name'); 59 | $schema->save(); 60 | 61 | // If indexes exist, you can retrieve them 62 | $result = $schema->get(); 63 | $indexes = $result['indexes']; 64 | ``` 65 | 66 | ## Purge 67 | 68 | All objects can be purged from a schema (class) via `purge`. But be careful! This can be considered an irreversible action. Only do this if you really need to delete all objects from a class, such as when you need to delete the class (as in the code example above). 69 | 70 | ```php 71 | // delete all objects in the schema 72 | $mySchema->purge(); 73 | ``` -------------------------------------------------------------------------------- /_includes/php/server-info.md: -------------------------------------------------------------------------------- 1 | # Server Info 2 | 3 | Any server version **2.1.4** or later supports access to detailed information about itself and it's capabilities. 4 | 5 | You can leverage `ParseServerInfo` (present in sdk version **1.4.0** and up) to check on the features and version of your server. 6 | 7 | ## Version 8 | 9 | You can get the current version of the server you are connected to. Do keep in mind that server must be at version **2.1.4** or above for this to work. 10 | 11 | ```php 12 | // get the current version of the server you are connected to (2.6.5, 2.5.4, etc.) 13 | $version = ParseServerInfo::getVersion(); 14 | ``` 15 | 16 | ## Features 17 | 18 | Check which features your server has and how they are configured in some cases. 19 | 20 | ```php 21 | // get various features 22 | $globalConfigFeatures = ParseServerInfo::getGlobalConfigFeatures(); 23 | /** 24 | * Returns json of the related features 25 | * { 26 | * "create" : true, 27 | * "read" : true, 28 | * "update" : true, 29 | * "delete" : true 30 | * } 31 | */ 32 | 33 | // you can always get all feature data 34 | $data = ParseServerInfo::getFeatures(); 35 | ``` 36 | 37 | For your convenience we've added getters for the following features in particular: 38 | 39 | ```php 40 | ParseServerInfo::getHooksFeatures(); 41 | ParseServerInfo::getCloudCodeFeatures(); 42 | ParseServerInfo::getLogsFeatures(); 43 | ParseServerInfo::getPushFeatures(); 44 | ParseServerInfo::getSchemasFeatures(); 45 | 46 | // additional features can be obtained manually using 'get' 47 | $feature = ParseServerInfo::get('new-feature'); 48 | ``` -------------------------------------------------------------------------------- /_includes/rest/getting-started.md: -------------------------------------------------------------------------------- 1 | # Getting Started 2 | 3 | The REST API lets you interact with Parse Server from anything that can send an HTTP request. There are many things you can do with the REST API. For example: 4 | 5 | * A mobile website can access Parse Server data from JavaScript. 6 | * A web server can show data from Parse Server on a website. 7 | * You can upload large amounts of data that will later be consumed in a mobile app. 8 | * You can download recent data to run your own custom analytics. 9 | * Applications written in any programming language can interact with data on Parse Server. 10 | -------------------------------------------------------------------------------- /_includes/unity/analytics.md: -------------------------------------------------------------------------------- 1 | # Analytics 2 | 3 | Parse provides a number of hooks for you to get a glimpse into the ticking heart of your app. We understand that it's important to understand what your app is doing, how frequently, and when. 4 | 5 | While this section will cover different ways to instrument your app to best take advantage of Parse's analytics backend, developers using Parse to store and retrieve data can already take advantage of metrics on Parse. 6 | 7 | Without having to implement any client-side logic, you can view real-time graphs and breakdowns (by device type, Parse class name, or REST verb) of your API Requests in your app's dashboard and save these graph filters to quickly access just the data you're interested in. 8 | 9 | ## App-Open Analytics 10 | 11 | Our initial analytics hook allows you to track your application being launched. By adding the following line to your Launching event handler, you'll be able to collect data on when and how often your application is opened. 12 | 13 | ```cs 14 | ParseAnalytics.TrackAppOpenedAsync(); 15 | ``` 16 | 17 | Graphs and breakdowns of your statistics are accessible from your app's Dashboard. 18 | 19 | ## Custom Analytics 20 | 21 | `ParseAnalytics` also allows you to track free-form events, with a handful of `string` keys and values. These extra dimensions allow segmentation of your custom events via your app's Dashboard. 22 | 23 | Say your app offers search functionality for apartment listings, and you want to track how often the feature is used, with some additional metadata. 24 | 25 | ```cs 26 | var dimensions = new Dictionary { 27 | // Define ranges to bucket data points into meaningful segments 28 | { "priceRange", "1000-1500" }, 29 | // Did the user filter the query? 30 | { "source", "craigslist" }, 31 | // Do searches happen more often on weekdays or weekends? 32 | { "dayType", "weekday" } 33 | }; 34 | // Send the dimensions to Parse along with the 'search' event 35 | ParseAnalytics.TrackEventAsync("search", dimensions); 36 | ``` 37 | 38 | `ParseAnalytics` can even be used as a lightweight error tracker — simply invoke the following and you'll have access to an overview of the rate and frequency of errors, broken down by error code, in your application: 39 | 40 | ```cs 41 | var errDimensions = new Dictionary { 42 | { "code", Convert.ToString(error.Code) } 43 | }; 44 | ParseAnalytics.TrackEventAsync("error", errDimensions ); 45 | ``` 46 | 47 | Note that Parse currently only stores the first eight dimension pairs per call to `ParseAnalytics.TrackEventAsync()`. 48 | -------------------------------------------------------------------------------- /_includes/unity/getting-started.md: -------------------------------------------------------------------------------- 1 | # Getting Started 2 | 3 | If you're familiar with web frameworks like ASP.NET MVC we've taken many of the same principles and applied them to our platform. In particular, our SDK is ready to use out of the box with minimal configuration on your part. 4 | 5 | The SDK is available for download on [NuGet package][nuget-link]. 6 | 7 | Note that our SDK requires Unity version 5.2.x or higher and targets Android apps and iOS apps. You can also check out our [API Reference]({{ site.apis.dotnet }}) for more detailed information about our SDK. 8 | 9 | Parse's Unity SDK makes heavy use of a subset of the [Task-based Asynchronous Pattern](http://msdn.microsoft.com/en-us/library/hh873175.aspx) so that your apps remain responsive. 10 | 11 | 12 | ## Adding `link.xml` 13 | 14 | Create a file and name it `link.xml` under your Assets folder and put the following code to make sure Parse Unity SDK works with Unity code optimization pipeline: 15 | 16 | ```xml 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | ``` 31 | -------------------------------------------------------------------------------- /_layouts/default.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | {% include head.html %} 4 | {{ content }} 5 | 6 | 7 | 14 | 15 | 16 | 56 | 57 | -------------------------------------------------------------------------------- /_layouts/docs.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | --- 4 | 5 | 6 | 7 |
8 |
9 | 10 | {% include menu.html %} 11 |
12 | {% include header.html %} 13 | 14 | 28 | 29 | {{ content }} 30 | 31 |
32 |
33 |
34 | 35 | -------------------------------------------------------------------------------- /_layouts/redirected.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |

Redirecting...

10 | Click here if you are not redirected. 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /android-api.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: redirected 3 | sitemap: false 4 | permalink: /android/api/ 5 | redirect_to: 6 | - https://parseplatform.org/Parse-SDK-Android/api/ 7 | --- 8 | -------------------------------------------------------------------------------- /android-push-tutorial.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Android Push Tutorial | Parse 3 | permalink: /tutorials/android-push-notifications/ 4 | layout: guide 5 | platform: android 6 | language: java 7 | display_platform: Android Push Notifications 8 | 9 | sections: 10 | - "parse-server/push-notifications-android.md" 11 | 12 | --- -------------------------------------------------------------------------------- /android.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Android Developers Guide | Parse 3 | permalink: /android/guide/ 4 | layout: guide 5 | platform: android 6 | language: java 7 | display_platform: Android 8 | api_reference: https://parse-community.github.io/Parse-SDK-Android/api 9 | 10 | sections: 11 | - "android/getting-started.md" 12 | - "android/objects.md" 13 | - "android/queries.md" 14 | - "android/users.md" 15 | - "common/sessions.md" 16 | - "android/roles.md" 17 | - "android/files.md" 18 | - "android/geopoints.md" 19 | - "android/local-datastore.md" 20 | - "android/push-notifications.md" 21 | - "android/config.md" 22 | - "android/analytics.md" 23 | - "android/user-interface.md" 24 | - "common/data.md" 25 | - "common/relations.md" 26 | - "android/handling-errors.md" 27 | - "common/security.md" 28 | - "common/performance.md" 29 | - "common/errors.md" 30 | 31 | --- 32 | -------------------------------------------------------------------------------- /arduino.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Arduino Developers Guide | Parse 3 | permalink: /arduino/guide/ 4 | layout: guide 5 | platform: arduino 6 | language: cpp 7 | display_platform: Arduino 8 | api_reference: https://parse-community.github.io/Parse-SDK-Arduino/api 9 | 10 | sections: 11 | - "arduino/getting-started.md" 12 | - "arduino/objects.md" 13 | - "arduino/queries.md" 14 | - "arduino/requests.md" 15 | - "arduino/users.md" 16 | - "arduino/push-notifications.md" 17 | - "arduino/analytics.md" 18 | - "arduino/cloud-code.md" 19 | - "common/errors.md" 20 | 21 | --- 22 | -------------------------------------------------------------------------------- /assets/fonts/InputMono.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/parse-community/docs/7811d4960dbbe51a45d03218cdfb3ae70a8df132/assets/fonts/InputMono.woff -------------------------------------------------------------------------------- /assets/fonts/d94de4bd-16a6-4c19-81bd-ed8f4e1624c6-3.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/parse-community/docs/7811d4960dbbe51a45d03218cdfb3ae70a8df132/assets/fonts/d94de4bd-16a6-4c19-81bd-ed8f4e1624c6-3.woff -------------------------------------------------------------------------------- /assets/fonts/din17sbop-regular-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/parse-community/docs/7811d4960dbbe51a45d03218cdfb3ae70a8df132/assets/fonts/din17sbop-regular-webfont.woff -------------------------------------------------------------------------------- /assets/fonts/ttfah-AlrightSubLPWebfontUseOnly-Bold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/parse-community/docs/7811d4960dbbe51a45d03218cdfb3ae70a8df132/assets/fonts/ttfah-AlrightSubLPWebfontUseOnly-Bold.woff -------------------------------------------------------------------------------- /assets/fonts/ttfah-AlrightSubLPWebfontUseOnly-Light.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/parse-community/docs/7811d4960dbbe51a45d03218cdfb3ae70a8df132/assets/fonts/ttfah-AlrightSubLPWebfontUseOnly-Light.woff -------------------------------------------------------------------------------- /assets/fonts/ttfah-AlrightSubLPWebfontUseOnly-Medium.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/parse-community/docs/7811d4960dbbe51a45d03218cdfb3ae70a8df132/assets/fonts/ttfah-AlrightSubLPWebfontUseOnly-Medium.woff -------------------------------------------------------------------------------- /assets/fonts/ttfah-AlrightSubLPWebfontUseOnly-Regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/parse-community/docs/7811d4960dbbe51a45d03218cdfb3ae70a8df132/assets/fonts/ttfah-AlrightSubLPWebfontUseOnly-Regular.woff -------------------------------------------------------------------------------- /assets/images/all_screens.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/parse-community/docs/7811d4960dbbe51a45d03218cdfb3ae70a8df132/assets/images/all_screens.png -------------------------------------------------------------------------------- /assets/images/alright-quotes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/parse-community/docs/7811d4960dbbe51a45d03218cdfb3ae70a8df132/assets/images/alright-quotes.png -------------------------------------------------------------------------------- /assets/images/basic_login.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/parse-community/docs/7811d4960dbbe51a45d03218cdfb3ae70a8df132/assets/images/basic_login.png -------------------------------------------------------------------------------- /assets/images/build-together.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/parse-community/docs/7811d4960dbbe51a45d03218cdfb3ae70a8df132/assets/images/build-together.png -------------------------------------------------------------------------------- /assets/images/client_push_settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/parse-community/docs/7811d4960dbbe51a45d03218cdfb3ae70a8df132/assets/images/client_push_settings.png -------------------------------------------------------------------------------- /assets/images/clp_vs_acl_diagram.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/parse-community/docs/7811d4960dbbe51a45d03218cdfb3ae70a8df132/assets/images/clp_vs_acl_diagram.png -------------------------------------------------------------------------------- /assets/images/config_editor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/parse-community/docs/7811d4960dbbe51a45d03218cdfb3ae70a8df132/assets/images/config_editor.png -------------------------------------------------------------------------------- /assets/images/epilogue-build-together.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/parse-community/docs/7811d4960dbbe51a45d03218cdfb3ae70a8df132/assets/images/epilogue-build-together.png -------------------------------------------------------------------------------- /assets/images/experiment_enable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/parse-community/docs/7811d4960dbbe51a45d03218cdfb3ae70a8df132/assets/images/experiment_enable.png -------------------------------------------------------------------------------- /assets/images/experiment_launch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/parse-community/docs/7811d4960dbbe51a45d03218cdfb3ae70a8df132/assets/images/experiment_launch.png -------------------------------------------------------------------------------- /assets/images/experiment_results.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/parse-community/docs/7811d4960dbbe51a45d03218cdfb3ae70a8df132/assets/images/experiment_results.png -------------------------------------------------------------------------------- /assets/images/extensions_capabilities.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/parse-community/docs/7811d4960dbbe51a45d03218cdfb3ae70a8df132/assets/images/extensions_capabilities.png -------------------------------------------------------------------------------- /assets/images/graphql/dashboard-graphql-playground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/parse-community/docs/7811d4960dbbe51a45d03218cdfb3ae70a8df132/assets/images/graphql/dashboard-graphql-playground.png -------------------------------------------------------------------------------- /assets/images/graphql/graphql-docs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/parse-community/docs/7811d4960dbbe51a45d03218cdfb3ae70a8df132/assets/images/graphql/graphql-docs.png -------------------------------------------------------------------------------- /assets/images/graphql/graphql-playground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/parse-community/docs/7811d4960dbbe51a45d03218cdfb3ae70a8df132/assets/images/graphql/graphql-playground.png -------------------------------------------------------------------------------- /assets/images/graphql/parse-graphql-server.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/parse-community/docs/7811d4960dbbe51a45d03218cdfb3ae70a8df132/assets/images/graphql/parse-graphql-server.png -------------------------------------------------------------------------------- /assets/images/graphql/session-token.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/parse-community/docs/7811d4960dbbe51a45d03218cdfb3ae70a8df132/assets/images/graphql/session-token.png -------------------------------------------------------------------------------- /assets/images/heros/analytics.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/parse-community/docs/7811d4960dbbe51a45d03218cdfb3ae70a8df132/assets/images/heros/analytics.jpg -------------------------------------------------------------------------------- /assets/images/heros/core.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/parse-community/docs/7811d4960dbbe51a45d03218cdfb3ae70a8df132/assets/images/heros/core.png -------------------------------------------------------------------------------- /assets/images/heros/desktop.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/parse-community/docs/7811d4960dbbe51a45d03218cdfb3ae70a8df132/assets/images/heros/desktop.jpg -------------------------------------------------------------------------------- /assets/images/heros/gradient_blue-gray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/parse-community/docs/7811d4960dbbe51a45d03218cdfb3ae70a8df132/assets/images/heros/gradient_blue-gray.png -------------------------------------------------------------------------------- /assets/images/heros/mobile.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/parse-community/docs/7811d4960dbbe51a45d03218cdfb3ae70a8df132/assets/images/heros/mobile.jpg -------------------------------------------------------------------------------- /assets/images/heros/push.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/parse-community/docs/7811d4960dbbe51a45d03218cdfb3ae70a8df132/assets/images/heros/push.jpg -------------------------------------------------------------------------------- /assets/images/images_table.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/parse-community/docs/7811d4960dbbe51a45d03218cdfb3ae70a8df132/assets/images/images_table.png -------------------------------------------------------------------------------- /assets/images/installation_channel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/parse-community/docs/7811d4960dbbe51a45d03218cdfb3ae70a8df132/assets/images/installation_channel.png -------------------------------------------------------------------------------- /assets/images/ios_push/experiment_enable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/parse-community/docs/7811d4960dbbe51a45d03218cdfb3ae70a8df132/assets/images/ios_push/experiment_enable.png -------------------------------------------------------------------------------- /assets/images/ios_push/experiment_launch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/parse-community/docs/7811d4960dbbe51a45d03218cdfb3ae70a8df132/assets/images/ios_push/experiment_launch.png -------------------------------------------------------------------------------- /assets/images/ios_push/experiment_results.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/parse-community/docs/7811d4960dbbe51a45d03218cdfb3ae70a8df132/assets/images/ios_push/experiment_results.png -------------------------------------------------------------------------------- /assets/images/login_diagram.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/parse-community/docs/7811d4960dbbe51a45d03218cdfb3ae70a8df132/assets/images/login_diagram.png -------------------------------------------------------------------------------- /assets/images/login_with_dispatch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/parse-community/docs/7811d4960dbbe51a45d03218cdfb3ae70a8df132/assets/images/login_with_dispatch.png -------------------------------------------------------------------------------- /assets/images/lq_heroku.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/parse-community/docs/7811d4960dbbe51a45d03218cdfb3ae70a8df132/assets/images/lq_heroku.png -------------------------------------------------------------------------------- /assets/images/lq_local.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/parse-community/docs/7811d4960dbbe51a45d03218cdfb3ae70a8df132/assets/images/lq_local.png -------------------------------------------------------------------------------- /assets/images/lq_multiple.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/parse-community/docs/7811d4960dbbe51a45d03218cdfb3ae70a8df132/assets/images/lq_multiple.png -------------------------------------------------------------------------------- /assets/images/new_webhook.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/parse-community/docs/7811d4960dbbe51a45d03218cdfb3ae70a8df132/assets/images/new_webhook.png -------------------------------------------------------------------------------- /assets/images/pagination.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/parse-community/docs/7811d4960dbbe51a45d03218cdfb3ae70a8df132/assets/images/pagination.png -------------------------------------------------------------------------------- /assets/images/products_table_screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/parse-community/docs/7811d4960dbbe51a45d03218cdfb3ae70a8df132/assets/images/products_table_screenshot.png -------------------------------------------------------------------------------- /assets/images/pull_to_refresh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/parse-community/docs/7811d4960dbbe51a45d03218cdfb3ae70a8df132/assets/images/pull_to_refresh.png -------------------------------------------------------------------------------- /assets/images/restaurants_app.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/parse-community/docs/7811d4960dbbe51a45d03218cdfb3ae70a8df132/assets/images/restaurants_app.png -------------------------------------------------------------------------------- /assets/images/search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/parse-community/docs/7811d4960dbbe51a45d03218cdfb3ae70a8df132/assets/images/search.png -------------------------------------------------------------------------------- /assets/images/signup_diagram.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/parse-community/docs/7811d4960dbbe51a45d03218cdfb3ae70a8df132/assets/images/signup_diagram.png -------------------------------------------------------------------------------- /assets/images/social.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/parse-community/docs/7811d4960dbbe51a45d03218cdfb3ae70a8df132/assets/images/social.jpg -------------------------------------------------------------------------------- /assets/images/todo_view.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/parse-community/docs/7811d4960dbbe51a45d03218cdfb3ae70a8df132/assets/images/todo_view.png -------------------------------------------------------------------------------- /assets/js/bundle.js.LICENSE.txt: -------------------------------------------------------------------------------- 1 | /*! 2 | * Sizzle CSS Selector Engine v2.3.5 3 | * https://sizzlejs.com/ 4 | * 5 | * Copyright JS Foundation and other contributors 6 | * Released under the MIT license 7 | * https://js.foundation/ 8 | * 9 | * Date: 2020-03-14 10 | */ 11 | -------------------------------------------------------------------------------- /assets/svgs/plus.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | + 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | + 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /assets/svgs/quotes.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /cloudcode.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Cloud Code Guide | Parse 3 | permalink: /cloudcode/guide/ 4 | layout: guide 5 | platform: cloudcode 6 | language: js 7 | display_platform: Cloud Code 8 | 9 | sections: 10 | - "cloudcode/getting-started.md" 11 | - "cloudcode/cloud-code.md" 12 | - "cloudcode/cloud-code-advanced.md" 13 | 14 | --- 15 | -------------------------------------------------------------------------------- /css/lib/docs/components/_custom-server.scss: -------------------------------------------------------------------------------- 1 | .custom-server-option { 2 | margin: 4px 0 !important; 3 | padding: 8px !important; 4 | background: #f3f3f3 !important; 5 | border-radius: 4px !important; 6 | font-size: 12px !important; 7 | } 8 | 9 | .custom-server-option:focus { 10 | outline: 0; 11 | } 12 | 13 | .custom-server-description { 14 | margin: 2px; 15 | font-size: 16px; 16 | font-weight: 100; 17 | } -------------------------------------------------------------------------------- /css/lib/marketing/components/_____example.scss: -------------------------------------------------------------------------------- 1 | %EXAMPLE_SASS_PARTIAL{ 2 | 3 | // ============================================================================ 4 | // Variables 5 | // ============================================================================ 6 | 7 | // $some-example-color: #f00; 8 | 9 | // ============================================================================ 10 | // Group 11 | // ============================================================================ 12 | 13 | // &s{} 14 | 15 | // ============================================================================ 16 | // Single 17 | // ============================================================================ 18 | 19 | // color: #f00; 20 | 21 | // ============================================================================ 22 | // Child Elements 23 | // ============================================================================ 24 | 25 | // &__heading{ } 26 | 27 | 28 | // ============================================================================ 29 | // States 30 | // ============================================================================ 31 | 32 | // html.no-touch &:hover{} 33 | 34 | 35 | // ============================================================================ 36 | // Media Queries 37 | // ============================================================================ 38 | 39 | // @include break-min($break-tablet){} 40 | 41 | // @include break-min($break-desktop){} 42 | 43 | 44 | // ============================================================================ 45 | // Modifiers 46 | // ============================================================================ 47 | 48 | // &--blue{} 49 | 50 | } -------------------------------------------------------------------------------- /css/lib/marketing/components/_banner-ctas.scss: -------------------------------------------------------------------------------- 1 | // banner ctas 2 | 3 | .banner-cta{ 4 | position: relative; 5 | text-align: center; 6 | background-position: center center; 7 | background-size: cover; 8 | padding: 46px 0 40px; 9 | 10 | &:before{ 11 | content: ""; 12 | display:none; 13 | position:absolute; 14 | left:0; top:0; 15 | width:100%; height:100%; 16 | opacity: 0.78; 17 | } 18 | 19 | .h2{ 20 | margin:0; 21 | } 22 | .h2 + .btn{ 23 | margin-top:13px; 24 | } 25 | 26 | &--blue{ 27 | background-color: $color-parse-blue; 28 | .h2{ color: white; } 29 | .btn--white{ color: $color-parse-blue; } 30 | } 31 | &--purple{ 32 | background-color: $color-martinique; 33 | .h2{ color: white; } 34 | .btn--white{ color: $color-martinique; } 35 | } 36 | &--green{ 37 | background-color: $color-carib-green; 38 | .h2{ color: white; } 39 | .btn--white{ color: $color-carib-green; } 40 | } 41 | &--tall{ 42 | background-color: $color-parse-blue; 43 | padding: 70px 0 60px; 44 | 45 | &:before{ background-color: $color-parse-blue; display:block; } 46 | .h2{ color:white; } 47 | } 48 | &--gray{ 49 | background-color: #f5f5f8; 50 | 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /css/lib/marketing/components/_divider-ctas.scss: -------------------------------------------------------------------------------- 1 | // divider ctas 2 | 3 | .divider-cta{ 4 | 5 | background-color: #f4f4f7; 6 | padding: 13px 0 12px; 7 | text-align: center; 8 | 9 | p{ 10 | margin:0; 11 | font-family: $font-alright; font-weight: $light-weight; 12 | 13 | .icon{ 14 | width:20px; 15 | height:19px; 16 | vertical-align: middle; 17 | fill: $color-parse-blue; 18 | margin-right:5px; 19 | 20 | @include break-max($break-tablet - 1){ 21 | margin: 0 auto 0.4em; 22 | display:block; 23 | } 24 | } 25 | 26 | a{ 27 | font-family: $font-alright; 28 | font-weight: $bold-weight; 29 | 30 | @include break-max($break-tablet - 1){ 31 | margin: 0.3em auto 0; 32 | display: block; 33 | } 34 | } 35 | } 36 | 37 | &--blue, 38 | &--green, 39 | &--red{ 40 | p{ 41 | color: white; 42 | 43 | .icon{ fill:white; } 44 | 45 | a{ color: white; } 46 | } 47 | } 48 | 49 | &--blue{ 50 | background-color: $color-parse-blue; 51 | } 52 | &--green{ 53 | background-color: $color-carib-green; 54 | } 55 | &--red{ 56 | background-color: $color-rad-red; 57 | } 58 | 59 | } 60 | -------------------------------------------------------------------------------- /css/lib/marketing/components/_stat-block.scss: -------------------------------------------------------------------------------- 1 | .stat-block{ 2 | 3 | // ============================================================================ 4 | // Group 5 | // ============================================================================ 6 | 7 | &s{ 8 | @include clearfix(); 9 | 10 | background-color: $color-vista-white; 11 | padding: 0; 12 | } 13 | 14 | // ============================================================================ 15 | // Single 16 | // ============================================================================ 17 | 18 | text-align: center; 19 | border-top: 1px solid $color-mischka; 20 | padding: 40px 0; 21 | 22 | // ============================================================================ 23 | // Child Elements 24 | // ============================================================================ 25 | 26 | &:first-child{ 27 | border-top: none; 28 | border-left: none; 29 | } 30 | 31 | &__value, 32 | &__label{ 33 | display:block; 34 | } 35 | 36 | &__value{ 37 | position: relative; 38 | font-family: $font-din; 39 | font-size: 6.3rem; 40 | color: $color-comet; 41 | line-height: 1; 42 | margin-bottom: 0; 43 | 44 | &__hint{ 45 | display:block; 46 | margin-bottom: 1em; 47 | 48 | font-size: 1.2rem; 49 | font-family: $font-alright; 50 | font-style: italic; 51 | color: rgba($color-comet, 0.22); 52 | } 53 | } 54 | 55 | &__label{ 56 | font-family: $font-alright; 57 | color: $color-parse-blue; 58 | font-size: 2.8rem; 59 | line-height: 1.21; 60 | } 61 | 62 | 63 | // ============================================================================ 64 | // Media Queries 65 | // ============================================================================ 66 | 67 | @include break-min($break-tablet){ 68 | &s{ padding: 50px 0; } 69 | 70 | height: 168px; 71 | float:left; 72 | width: (100%/3); 73 | border-top: none; 74 | border-left: 1px solid $color-mischka; 75 | padding: 0 15px; 76 | 77 | &__content{ 78 | @include vertical-align(); 79 | } 80 | 81 | &__value{ 82 | margin-bottom: 0.5em; 83 | 84 | &__hint{ 85 | position: absolute; 86 | bottom: -16px; 87 | width: 100%; 88 | margin-bottom: 0; 89 | } 90 | } 91 | } 92 | 93 | @include break-min($break-desktop){ 94 | &s{ padding: 80px 0; } 95 | } 96 | 97 | } -------------------------------------------------------------------------------- /css/lib/marketing/globals/_defaults.scss: -------------------------------------------------------------------------------- 1 | // additional defaults not provided in normalize 2 | 3 | 4 | main{ display:block; } 5 | 6 | 7 | // Links 8 | 9 | a{ 10 | text-decoration:none; 11 | color:inherit; 12 | 13 | &:hover{ text-decoration:underline; } 14 | } 15 | 16 | a:active, 17 | a:focus{ 18 | outline:none; 19 | } 20 | 21 | 22 | 23 | // Responsive Images 24 | 25 | img{ 26 | width:auto; 27 | height:auto; 28 | max-width:100%; 29 | } 30 | 31 | /* 32 | * Let's target IE to respect aspect ratios and sizes for img tags containing SVG files 33 | * https://css-tricks.com/scale-svg/ 34 | * 35 | * [1] IE9 36 | * [2] IE10+ 37 | */ 38 | /* 1 */ 39 | .lte-ie9 img[src*=".svg"] { 40 | width: 100%; 41 | } 42 | /* 2 */ 43 | @media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) { 44 | img[src*=".svg"] { 45 | width: 100%; 46 | } 47 | } -------------------------------------------------------------------------------- /css/lib/marketing/globals/_icons.scss: -------------------------------------------------------------------------------- 1 | .icon{ 2 | fill: $color-comet; 3 | display:inline-block; 4 | width: 32px; height:32px; 5 | 6 | &#{&}{ 7 | &-scroll-hint, 8 | &-pointer{ 9 | fill:none !important; 10 | stroke: $color-comet; 11 | } 12 | } 13 | } 14 | svg use { pointer-events: none; } -------------------------------------------------------------------------------- /css/lib/marketing/globals/_keyframes.scss: -------------------------------------------------------------------------------- 1 | @keyframes anim_server-activity { 2 | 0%, 20% { background: $color-vista-white; } 3 | 10% { background: $color-comet; } 4 | } 5 | @keyframes anim_scroll-hint { 6 | 0%, 20% { transform: translateY(0); } 7 | 10% { transform: translateY(15px); } 8 | } 9 | @keyframes anim_request-dots { 10 | 0% { background-position: 104% 0; } 11 | 100% { background-position: 0 0; } 12 | } 13 | 14 | @keyframes anim_tower-signal--inner{ 15 | 0%{ opacity: 0; } 16 | 10%{ opacity: 0; } 17 | 15%,80%{ opacity: 1; } 18 | // 15%,70%{ opacity: 1; } 19 | 100%{ opacity: 0; } 20 | } 21 | @keyframes anim_tower-signal--middle{ 22 | 0%{ opacity: 0; } 23 | 13%{ opacity: 0; } 24 | 18%,76%{ opacity: 0.7; } 25 | // 18%,70%{ opacity: 1; } 26 | 100%{ opacity: 0; } 27 | } 28 | @keyframes anim_tower-signal--outer{ 29 | 0%{ opacity: 0; } 30 | 15%{ opacity: 0; } 31 | 20%,72%{ opacity: 0.4; } 32 | // 20%,70%{ opacity: 1; } 33 | 100%{ opacity: 0; } 34 | } 35 | @keyframes anim_push-message-1{ 36 | 0%, 66%, 100%{ 37 | opacity:0; 38 | transform: translate(-50%, 50%); 39 | } 40 | 6%,60%{ 41 | opacity:1; 42 | transform: translate(-50%, -50%); 43 | } 44 | } 45 | @keyframes anim_phone-float-1{ 46 | 0%,100%{ transform: translate(0,0); } 47 | 50%{ transform: translate(0,-7px); } 48 | } 49 | @keyframes anim_phone-float-2{ 50 | 0%,100%{ transform: translate(0,0); } 51 | 50%{ transform: translate(0,-5px); } 52 | } 53 | @keyframes anim_phone-float-3{ 54 | 0%,100%{ transform: translate(0,0); } 55 | 50%{ transform: translate(0,-4px); } 56 | } 57 | @keyframes anim_phone-float-4{ 58 | 0%,100%{ transform: translate(0,0); } 59 | 50%{ transform: translate(0,-5px); } 60 | } 61 | @keyframes anim_phone-float-5{ 62 | 0%,100%{ transform: translate(0,0); } 63 | 50%{ transform: translate(0,-8px); } 64 | } 65 | @keyframes anim_phone-float-6{ 66 | 0%,100%{ transform: translate(0,0); } 67 | 50%{ transform: translate(0,-4px); } 68 | } 69 | 70 | 71 | 72 | @keyframes bubble_float_1{ 73 | 0%,100%{ transform: translate(0,0); } 74 | 50%{ transform: translate(0,-7px); } 75 | } 76 | @keyframes bubble_float_2{ 77 | 0%,100%{ transform: translate(0,0); } 78 | 50%{ transform: translate(0,-5px); } 79 | } 80 | @keyframes bubble_float_3{ 81 | 0%,100%{ transform: translate(0,0); } 82 | 50%{ transform: translate(0,-4px); } 83 | } 84 | @keyframes bubble_float_4{ 85 | 0%,100%{ transform: translate(0,0); } 86 | 50%{ transform: translate(0,-5px); } 87 | } -------------------------------------------------------------------------------- /css/lib/marketing/views/_about.scss: -------------------------------------------------------------------------------- 1 | // view-about 2 | 3 | .section-about--timeline{ 4 | z-index:2; 5 | position: relative; 6 | margin-top: -44px; 7 | margin-bottom: 130px; 8 | 9 | @include break-min($break-tablet){ 10 | margin-bottom: 190px; 11 | } 12 | } 13 | 14 | .section-about--vision{ 15 | padding-bottom: 20px; 16 | } 17 | 18 | .section-about--team{ 19 | background-color: $color-parse-blue; 20 | padding: 40px 0 40px; 21 | 22 | .team-photos{ margin-top: 2em; } 23 | 24 | @include break-min($break-tablet){ 25 | padding: 50px 0 69px; 26 | .team-photos{ margin-top: 30px; } 27 | } 28 | 29 | @include break-min($break-desktop){ 30 | padding: 90px 0; 31 | 32 | .team-photos{ margin-top: 0; } 33 | } 34 | } 35 | 36 | .section-about--contact{ 37 | padding: 40px 0; 38 | 39 | @include break-max($break-tablet - 1){ 40 | .grid-container{ 41 | margin-top: 3em; 42 | 43 | div + div{ margin-top: 2.5em; } 44 | } 45 | } 46 | 47 | @include break-min($break-tablet){ 48 | .container{ 49 | margin-top: 3em; 50 | } 51 | .grid-container{ 52 | margin-top: 4em; 53 | margin-bottom: 4em; 54 | } 55 | } 56 | } -------------------------------------------------------------------------------- /css/lib/marketing/views/_customers.scss: -------------------------------------------------------------------------------- 1 | // customers 2 | 3 | .view--customers{ 4 | .hero{ 5 | .h1{ max-width: 765px; } 6 | } 7 | } 8 | 9 | .section-customers{ 10 | &--love{ 11 | padding-top: 30px; 12 | padding-bottom: 30px; 13 | 14 | .copy-block{ 15 | img{ max-width: 75px; } 16 | .h1{ margin: 0.3em auto; } 17 | } 18 | 19 | @include break-min($break-tablet){ 20 | padding-top: 40px; 21 | padding-bottom: 30px; 22 | } 23 | 24 | } 25 | } 26 | 27 | -------------------------------------------------------------------------------- /css/lib/marketing/views/_help.scss: -------------------------------------------------------------------------------- 1 | // view-help 2 | 3 | .view--help{ 4 | .hero{ 5 | p{ 6 | transition: all 300ms ease; 7 | } 8 | .status-loading{ 9 | opacity:0; 10 | transform: translateY(20px); 11 | } 12 | } 13 | } 14 | 15 | .section-help--lists{ 16 | background-color: $color-vista-white; 17 | padding: 40px 0 40px; 18 | 19 | .h3 + p{ 20 | line-height: 1.25; 21 | } 22 | 23 | .grid-container{ 24 | & > div + div{ 25 | margin-top: 60px; 26 | } 27 | } 28 | 29 | @include break-min($break-tablet){ 30 | padding: 52px 0 65px; 31 | 32 | .grid-container{ 33 | & > div + div{ 34 | margin-top: 0; 35 | } 36 | } 37 | } 38 | } 39 | 40 | .section-help--videos{ 41 | padding: 30px 0 30px; 42 | 43 | .video-player{ margin-top: 2em; } 44 | 45 | @include break-min($break-tablet){ 46 | padding: 68px 0 66px; 47 | 48 | .video-player{ margin-top: 3em; } 49 | } 50 | 51 | @include break-min($break-desktop){ 52 | padding: 128px 0 126px; 53 | 54 | .video-player{ margin:0; } 55 | 56 | .col-lg--3{ 57 | height: 405px; 58 | .copy-block{ @include vertical-align(); } 59 | } 60 | } 61 | } 62 | 63 | .section-help--sdks{ 64 | background: $color-comet; 65 | padding: 30px 0 40px; 66 | text-align: center; 67 | 68 | .sdk-versions{ margin-top: 2em; } 69 | 70 | .btns{ 71 | margin-top: 30px; 72 | 73 | .btn--white{ color: $color-comet; } 74 | } 75 | 76 | @include break-min($break-tablet){ 77 | padding: 94px 0 99px; 78 | 79 | .btns{ margin-top: 3.3em; } 80 | } 81 | } 82 | -------------------------------------------------------------------------------- /css/lib/marketing/views/_platform-desktop.scss: -------------------------------------------------------------------------------- 1 | .view--platform-desktop{} 2 | 3 | .section-platform-desktop--data{ 4 | padding: 40px 0; 5 | 6 | // .copy-block--triplet{ margin-top: 40px; } 7 | figure.inline-graphic{ 8 | margin: 2em 0; 9 | } 10 | 11 | .grid-container:first-child{ 12 | .h5{ margin-top:0; } 13 | .h2{ margin: 0.5em 0; } 14 | } 15 | 16 | .btn{ margin-top: -0.7em; } 17 | 18 | @include break-min($break-tablet){ 19 | padding: 140px 0 46px; 20 | 21 | figure.inline-graphic{ 22 | margin: 0; 23 | 24 | img{ 25 | display: block; 26 | width: 100%; 27 | max-width: 570px; 28 | margin:0 auto; 29 | } 30 | } 31 | 32 | .copy-block--triplet{ margin-top: 50px; } 33 | 34 | .btn{ margin-top: 1.1em; } 35 | } 36 | 37 | @include break-min($break-desktop){ 38 | figure.inline-graphic{ margin: -10px 0 0; } 39 | } 40 | } 41 | 42 | .section-platform-desktop--analytics{ 43 | padding: 40px 0 30px; 44 | background-color: #fff5f7; 45 | 46 | figure{ 47 | margin: 0 0 2em; 48 | img{ width: 100%; } 49 | } 50 | 51 | // .grid-container{ 52 | // height: 752px; 53 | 54 | // .col-lg--6{ @include vertical-align(); } 55 | // } 56 | 57 | .col-lg--3{ 58 | .h5{ margin-top:0; } 59 | .h5 + .h2{ margin: 0.4em 0; } 60 | .hr{ margin: 1.9em 0; } 61 | .h6{ margin-bottom:0; } 62 | .h6 + p{ margin-top: 1em; } 63 | p + .btn{ margin-top: 1.5em; } 64 | } 65 | 66 | @include break-min($break-tablet){ 67 | padding: 60px 0; 68 | } 69 | @include break-min($break-desktop){ 70 | padding: 68px 0; 71 | .col-lg--6{ 72 | height: 752px; 73 | 74 | figure{ 75 | max-width: 637px; 76 | margin:0; 77 | @include vertical-align(); 78 | } 79 | } 80 | .col-lg--3{ 81 | .h2{ max-width: 284px; } 82 | p + .btn{ margin-top: 0.7em; } 83 | } 84 | } 85 | } 86 | 87 | .section-platform-desktop--platforms{ 88 | padding-top: 40px; 89 | padding-bottom: 10px; 90 | 91 | .copy-block{ margin-bottom:3em; } 92 | 93 | @include break-min($break-tablet){ 94 | padding-top: 60px; 95 | padding-bottom: 60px; 96 | 97 | .copy-block{ margin-bottom: 4em; } 98 | } 99 | @include break-min($break-desktop){ 100 | padding-top: 100px; 101 | padding-bottom: 130px; 102 | 103 | .copy-block{ margin-bottom:6em; } 104 | } 105 | } -------------------------------------------------------------------------------- /css/lib/marketing/views/_platforms.scss: -------------------------------------------------------------------------------- 1 | .view--platforms{ 2 | 3 | figure.inline-graphic{ 4 | margin-top: 2.4em; 5 | 6 | @include break-min($break-tablet){ 7 | margin-top: 0; 8 | } 9 | @include break-min($break-desktop){ 10 | padding: 0 50px; 11 | } 12 | } 13 | 14 | } 15 | -------------------------------------------------------------------------------- /css/lib/marketing/views/_product-analytics.scss: -------------------------------------------------------------------------------- 1 | .view--product-analytics{} 2 | 3 | .section-product-analytics--growth{ 4 | padding: 20px 0 0; 5 | 6 | figure{ margin: 2.5em 0; } 7 | 8 | @include break-min($break-tablet){ 9 | padding: 70px 0 50px; 10 | 11 | figure{ 12 | margin: 0 0 1.5em; 13 | 14 | svg{ 15 | max-width: 453px; 16 | display: block; 17 | margin: 0 auto; 18 | } 19 | } 20 | 21 | .copy-block--triplet{ 22 | margin-top: 70px; 23 | } 24 | } 25 | @include break-min($break-desktop){ 26 | padding: 152px 0 78px; 27 | } 28 | } -------------------------------------------------------------------------------- /css/lib/marketing/views/_products.scss: -------------------------------------------------------------------------------- 1 | .view--products{ 2 | 3 | figure.inline-graphic{ 4 | margin-top: 2.4em; 5 | 6 | @include break-min($break-tablet){ 7 | margin-top: 0; 8 | } 9 | @include break-min($break-desktop){ 10 | padding: 0 50px; 11 | } 12 | } 13 | 14 | } 15 | -------------------------------------------------------------------------------- /css/lib/marketing/views/_styleguide.scss: -------------------------------------------------------------------------------- 1 | // view-styleguide 2 | 3 | .section-styleguide{ 4 | 5 | &--icons{ 6 | line-height: 3; 7 | .icon + .icon{ margin-left: 10px; } 8 | } 9 | 10 | &--type{ 11 | 12 | &__hgroup{ 13 | 14 | // @include break-min($break-tablet){ 15 | // &s{ 16 | // @include clearfix(); 17 | // } 18 | 19 | // width: 49%; 20 | 21 | // & + &{ } 22 | // } 23 | } 24 | } 25 | } 26 | 27 | .section-styleguide--grid{ 28 | .grid-container{ 29 | & + .grid-container{ margin-top: 20px; } 30 | } 31 | 32 | [class^="col-"], 33 | [class*=" col-"]{ 34 | height: 70px; 35 | line-height: 50px; 36 | background-color: rgba($color-parse-blue, 0.25); 37 | color: $color-parse-blue; 38 | font-weight: $bold-weight; 39 | text-align: center; 40 | padding-top: 10px; 41 | padding-bottom: 10px; 42 | 43 | &.is-nested{ 44 | background-color: white; 45 | } 46 | 47 | [class^="col-"], 48 | [class*=" col-"]{ 49 | color: $color-parse-blue; 50 | height: 50px; 51 | line-height: 30px; 52 | 53 | & + [class^="col-"], 54 | & + [class*=" col-"]{ 55 | border-left: 2px solid rgba($color-parse-blue, 0.25); 56 | } 57 | } 58 | 59 | @include break-min($break-tablet){ 60 | & + [class^="col-"], 61 | & + [class*=" col-"]{ 62 | border-left: 2px solid white; 63 | } 64 | 65 | } 66 | } 67 | } -------------------------------------------------------------------------------- /css/lib/multisite/_fonts.scss: -------------------------------------------------------------------------------- 1 | @font-face { 2 | font-family: 'webfont_din-regular'; 3 | font-display: auto; 4 | src: url('../assets/fonts/din17sbop-regular-webfont.woff') format('woff'); 5 | font-weight: normal; 6 | font-style: normal; 7 | } 8 | 9 | @font-face { 10 | font-family: 'webfont_input'; 11 | font-display: auto; 12 | src: url('../assets/fonts/d94de4bd-16a6-4c19-81bd-ed8f4e1624c6-3.woff') format('woff'); 13 | font-weight: normal; 14 | font-style: normal; 15 | } 16 | 17 | @font-face { 18 | font-family: 'webfont_alright'; 19 | font-display: auto; 20 | src: url('../assets/fonts/ttfah-AlrightSubLPWebfontUseOnly-Light.woff') format('woff'); 21 | font-weight: 300; 22 | font-style: normal; 23 | } 24 | 25 | @font-face { 26 | font-family: 'webfont_alright'; 27 | font-display: auto; 28 | src: url('../assets/fonts/ttfah-AlrightSubLPWebfontUseOnly-Regular.woff') format('woff'); 29 | font-weight: 400; 30 | font-style: normal; 31 | } 32 | 33 | @font-face { 34 | font-family: 'webfont_alright'; 35 | font-display: auto; 36 | src: url('../assets/fonts/ttfah-AlrightSubLPWebfontUseOnly-Medium.woff') format('woff'); 37 | font-weight: 500; 38 | font-style: normal; 39 | } 40 | 41 | @font-face { 42 | font-family: 'webfont_alright'; 43 | font-display: auto; 44 | src: url('../assets/fonts/ttfah-AlrightSubLPWebfontUseOnly-Bold.woff') format('woff'); 45 | font-weight: 700; 46 | font-style: normal; 47 | } 48 | 49 | @font-face { 50 | font-family: 'webfont_alright'; 51 | font-display: auto; 52 | src: url('../assets/fonts/ttfah-AlrightSubLPWebfontUseOnly-Bold.woff') format('woff'); 53 | font-weight: 800; 54 | font-style: normal; 55 | } 56 | -------------------------------------------------------------------------------- /css/lib/multisite/_grid.scss: -------------------------------------------------------------------------------- 1 | 2 | @if $create-grid{ 3 | 4 | .grid-container{ 5 | @include clearfix(); 6 | 7 | position:relative; 8 | min-width: $break-mobile; 9 | max-width: $break-mobile-max; 10 | padding-left: $grid-gutters-mobile; 11 | padding-right: $grid-gutters-mobile; 12 | margin-left: auto; 13 | margin-right: auto; 14 | 15 | @include break-min($break-tablet){ 16 | max-width: $break-tablet-max; 17 | padding-left: ($grid-gutters-tablet/2); 18 | padding-right: ($grid-gutters-tablet/2); 19 | } 20 | @include break-min($break-desktop){ 21 | max-width: $break-desktop-max-grid; 22 | padding-left: ($grid-gutters-desktop/2); 23 | padding-right: ($grid-gutters-desktop/2); 24 | } 25 | } 26 | 27 | @for $i from 1 to ($grid-cols-desktop + 1){ 28 | .col--#{$i}{ 29 | float:left; 30 | width: ( 100% / $grid-cols-desktop ) * $i; 31 | padding: 0 $grid-gutters; 32 | } 33 | .offset--#{$i}{ 34 | margin-left: ( 100% / $grid-cols-desktop ) * $i; 35 | } 36 | } 37 | // @include break-max($break-tablet - 1){ 38 | // @for $i from 1 to ($grid-cols-mobile + 1){ 39 | // .col-sm--#{$i}{ 40 | // float:left; 41 | // width: ( 100% / $grid-cols-mobile ) * $i; 42 | // padding-left: ($grid-gutters-mobile / 2); 43 | // padding-right: ($grid-gutters-mobile / 2); 44 | // } 45 | // .offset-sm--#{$i}{ 46 | // margin-left: ( 100% / $grid-cols-mobile ) * $i; 47 | // } 48 | // } 49 | // } 50 | @media (min-width: $break-tablet) and (max-width: $break-desktop - 1) { 51 | @for $i from 1 to ($grid-cols-tablet + 1){ 52 | .col-md--#{$i}{ 53 | float:left; 54 | width: ( 100% / $grid-cols-tablet ) * $i; 55 | padding-left: ($grid-gutters-tablet / 2); 56 | padding-right: ($grid-gutters-tablet / 2); 57 | } 58 | .offset-md--#{$i}{ 59 | margin-left: ( 100% / $grid-cols-tablet ) * $i; 60 | } 61 | } 62 | } 63 | @include break-min($break-desktop){ 64 | @for $i from 1 to ($grid-cols-desktop + 1){ 65 | .col-lg--#{$i}{ 66 | float:left; 67 | width: ( 100% / $grid-cols-desktop ) * $i; 68 | // padding: 0 $grid-gutters-desktop; 69 | padding-left: ($grid-gutters-desktop/2); 70 | padding-right: ($grid-gutters-desktop/2); 71 | } 72 | .offset-lg--#{$i}{ 73 | margin-left: ( 100% / $grid-cols-desktop ) * $i; 74 | } 75 | } 76 | } 77 | } -------------------------------------------------------------------------------- /css/lib/multisite/_menu.scss: -------------------------------------------------------------------------------- 1 | .site__menu{ 2 | 3 | &__nav{ 4 | margin:0; 5 | padding:0; 6 | 7 | & > ul{ 8 | margin:0; 9 | padding:0; 10 | 11 | & > li { 12 | // @for $i from 0 through 10 { 13 | // &:nth-child(#{$i}n){ 14 | // transform: rotate3d(1,0,0,-90deg); 15 | // transform-origin: center top; 16 | // transition: transform 200ms cubic-bezier(.02, .01, .47, 1) (($i * 200ms) + 400); 17 | // } 18 | // } 19 | a{ 20 | display:block; 21 | padding: $menu-mobile-link-padding; 22 | border-bottom: $menu-mobile-link-border; 23 | transition: all 200ms ease-in; 24 | 25 | font-size: $menu-mobile-link-size; 26 | font-family: $font-din; 27 | text-decoration: none; 28 | color: white; 29 | 30 | html.no-touch &:hover{ 31 | transition: all 200ms ease; 32 | // border-bottom: $menu-mobile-link-border-onhover; 33 | background: rgba(255,255,255,0.1); 34 | // padding-left: 25px; 35 | } 36 | } 37 | } 38 | } 39 | } 40 | 41 | .h4{ 42 | opacity:0.39; 43 | } 44 | 45 | &__socials{ 46 | @include clearfix(); 47 | position:relative; 48 | 49 | padding: $menu-mobile-socials-padding; 50 | 51 | & > ul{ 52 | margin:0; 53 | padding:0; 54 | list-style:none; 55 | 56 | & > li{ 57 | float:left; 58 | width:16%; 59 | 60 | a{ 61 | display:block; 62 | text-align: center; 63 | 64 | .icon{ 65 | fill: white; 66 | width: 100%; 67 | height: 27px; 68 | } 69 | } 70 | 71 | & + li{ margin-left: 5%; } 72 | 73 | } 74 | } 75 | 76 | } 77 | 78 | &__build-together{ 79 | font-size: 1.4rem; 80 | font-weight: $bold-weight; 81 | color: rgba(#fff, 0.49); 82 | position: absolute; 83 | left: 0; 84 | bottom: 36px; 85 | width: 100%; 86 | height: 43px; 87 | background: url(/assets/images/build-together.png) center center no-repeat; 88 | background-size: auto 100%; 89 | text-align: center; 90 | line-height: 43px; 91 | margin: 0; 92 | padding: 0; 93 | } 94 | } 95 | -------------------------------------------------------------------------------- /css/lib/vendor/prism-line-numbers.css: -------------------------------------------------------------------------------- 1 | pre.line-numbers { 2 | position: relative; 3 | padding-left: 3.8em; 4 | counter-reset: linenumber; 5 | } 6 | 7 | pre.line-numbers > code { 8 | position: relative; 9 | } 10 | 11 | .line-numbers .line-numbers-rows { 12 | position: absolute; 13 | pointer-events: none; 14 | top: 0; 15 | font-size: 100%; 16 | left: -3.8em; 17 | width: 3em; /* works for line-numbers below 1000 lines */ 18 | letter-spacing: -1px; 19 | border-right: 1px solid #999; 20 | 21 | -webkit-user-select: none; 22 | -moz-user-select: none; 23 | -ms-user-select: none; 24 | user-select: none; 25 | 26 | } 27 | 28 | .line-numbers-rows > span { 29 | pointer-events: none; 30 | display: block; 31 | counter-increment: linenumber; 32 | } 33 | 34 | .line-numbers-rows > span:before { 35 | content: counter(linenumber); 36 | color: #999; 37 | display: block; 38 | padding-right: 0.8em; 39 | text-align: right; 40 | } -------------------------------------------------------------------------------- /dart-api.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: redirected 3 | sitemap: false 4 | permalink: /dart/api/ 5 | redirect_to: 6 | - https://parseplatform.org/Parse-SDK-Flutter/dart/flutter_parse_sdk/flutter_parse_sdk-library.html 7 | --- -------------------------------------------------------------------------------- /dart.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Dart Guide | Parse 3 | permalink: /dart/guide/ 4 | layout: guide 5 | platform: dart 6 | language: dart 7 | display_platform: Dart 8 | api_reference: /dart/api 9 | 10 | sections: 11 | - "dart/getting-started.md" 12 | - "dart/objects.md" 13 | - "dart/queries.md" 14 | - "dart/cloud-code.md" 15 | - "dart/config.md" 16 | - "dart/files.md" 17 | - "dart/other-features.md" 18 | - "dart/storage.md" 19 | - "dart/users.md" 20 | 21 | --- 22 | -------------------------------------------------------------------------------- /defined-schema.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Defined Schema Guide | Parse 3 | permalink: /defined-schema/guide/ 4 | layout: guide 5 | platform: cloudcode 6 | language: js 7 | display_platform: Defined Schema 8 | 9 | redirect_from: 10 | - /defined-schema/ 11 | 12 | sections: 13 | - "defined-schema/getting-started.md" 14 | - "defined-schema/how-to-use-on-existing-parse-server.md" 15 | - "defined-schema/core-classes-fields.md" 16 | - "defined-schema/fields.md" 17 | - "defined-schema/indexes.md" 18 | - "defined-schema/class-level-permissions.md" 19 | - "defined-schema/options.md" 20 | --- 21 | -------------------------------------------------------------------------------- /dotnet-api.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: redirected 3 | sitemap: false 4 | permalink: /dotnet/api/ 5 | redirect_to: 6 | - https://parse-community.github.io/Parse-SDK-dotNET/api/ 7 | --- 8 | -------------------------------------------------------------------------------- /dotnet.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: .NET Developers Guide | Parse 3 | permalink: /dotnet/guide/ 4 | layout: guide 5 | platform: dotnet 6 | language: cs 7 | display_platform: .NET 8 | api_reference: https://parse-community.github.io/Parse-SDK-dotNET/api/ 9 | 10 | sections: 11 | - "dotnet/getting-started.md" 12 | - "dotnet/objects.md" 13 | - "dotnet/queries.md" 14 | - "dotnet/users.md" 15 | - "common/sessions.md" 16 | - "dotnet/roles.md" 17 | - "dotnet/files.md" 18 | - "dotnet/geopoints.md" 19 | - "dotnet/push-notifications.md" 20 | - "dotnet/config.md" 21 | - "dotnet/analytics.md" 22 | - "common/data.md" 23 | - "common/relations.md" 24 | - "dotnet/handling-errors.md" 25 | - "common/security.md" 26 | - "common/performance.md" 27 | - "common/errors.md" 28 | 29 | --- 30 | -------------------------------------------------------------------------------- /embedded_c-api.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: redirected 3 | sitemap: false 4 | permalink: /embedded_c/api/ 5 | redirect_to: 6 | - https://parse-community.github.io/parse-embedded-sdks/api 7 | --- 8 | -------------------------------------------------------------------------------- /embedded_c.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Embedded C Developers Guide | Parse 3 | permalink: /embedded_c/guide/ 4 | layout: guide 5 | platform: embedded_c 6 | display_platform: Embedded C 7 | api_reference: https://parse-community.github.io/parse-embedded-sdks/api 8 | 9 | sections: 10 | - "embedded_c/getting-started.md" 11 | - "embedded_c/objects.md" 12 | - "embedded_c/requests.md" 13 | - "embedded_c/users.md" 14 | - "embedded_c/push-notifications.md" 15 | - "embedded_c/cloud-code.md" 16 | - "embedded_c/sample-app.md" 17 | - "embedded_c/handling-errors.md" 18 | - "common/errors.md" 19 | 20 | --- 21 | -------------------------------------------------------------------------------- /flutter-api.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: redirected 3 | sitemap: false 4 | permalink: /flutter/api/ 5 | redirect_to: 6 | - https://parseplatform.org/Parse-SDK-Flutter/flutter/flutter_parse_sdk_flutter/flutter_parse_sdk_flutter-library.html 7 | --- -------------------------------------------------------------------------------- /flutter.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Flutter Guide | Parse 3 | permalink: /flutter/guide/ 4 | layout: guide 5 | platform: flutter 6 | language: dart 7 | display_platform: Flutter 8 | api_reference: /flutter/api 9 | 10 | sections: 11 | - "flutter/getting-started.md" 12 | - "dart/objects.md" 13 | - "dart/queries.md" 14 | - "dart/cloud-code.md" 15 | - "dart/config.md" 16 | - "dart/files.md" 17 | - "flutter/push-notifications.md" 18 | - "dart/other-features.md" 19 | - "dart/storage.md" 20 | - "dart/users.md" 21 | 22 | --- 23 | -------------------------------------------------------------------------------- /graphql.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: GraphQL API Guide | Parse 3 | permalink: /graphql/guide/ 4 | layout: guide 5 | platform: graphql 6 | language: graphql 7 | display_platform: GraphQL 8 | 9 | redirect_from: 10 | - /graphql/ 11 | 12 | sections: 13 | - "graphql/getting-started.md" 14 | - "graphql/graphql.md" 15 | - "graphql/relay.md" 16 | - "graphql/api-doc.md" 17 | - "graphql/health-check.md" 18 | - "graphql/classes.md" 19 | - "graphql/objects.md" 20 | - "graphql/queries.md" 21 | - "graphql/users.md" 22 | - "graphql/files.md" 23 | - "graphql/customisation.md" 24 | - "graphql/optimization.md" 25 | - "graphql/learning-more.md" 26 | 27 | --- 28 | -------------------------------------------------------------------------------- /img/.gitignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/parse-community/docs/7811d4960dbbe51a45d03218cdfb3ae70a8df132/img/.gitignore -------------------------------------------------------------------------------- /img/android.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 9 | 10 | 11 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /img/arduino.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 10 | 11 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /img/arrowRight.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | arrowRight 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /img/background.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | background 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /img/blueBG.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/parse-community/docs/7811d4960dbbe51a45d03218cdfb3ae70a8df132/img/blueBG.jpg -------------------------------------------------------------------------------- /img/c.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 8 | 9 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /img/cloudcode.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 8 | 15 | 16 | -------------------------------------------------------------------------------- /img/dart.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /img/facebook.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 9 | facebook 10 | Created with Sketch. 11 | 12 | 13 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /img/favicon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 10 | 11 | favicon 12 | Created with Sketch. 13 | 14 | 15 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /img/favicon/android-chrome-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/parse-community/docs/7811d4960dbbe51a45d03218cdfb3ae70a8df132/img/favicon/android-chrome-192x192.png -------------------------------------------------------------------------------- /img/favicon/apple-touch-icon-114x114.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/parse-community/docs/7811d4960dbbe51a45d03218cdfb3ae70a8df132/img/favicon/apple-touch-icon-114x114.png -------------------------------------------------------------------------------- /img/favicon/apple-touch-icon-120x120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/parse-community/docs/7811d4960dbbe51a45d03218cdfb3ae70a8df132/img/favicon/apple-touch-icon-120x120.png -------------------------------------------------------------------------------- /img/favicon/apple-touch-icon-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/parse-community/docs/7811d4960dbbe51a45d03218cdfb3ae70a8df132/img/favicon/apple-touch-icon-144x144.png -------------------------------------------------------------------------------- /img/favicon/apple-touch-icon-152x152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/parse-community/docs/7811d4960dbbe51a45d03218cdfb3ae70a8df132/img/favicon/apple-touch-icon-152x152.png -------------------------------------------------------------------------------- /img/favicon/apple-touch-icon-180x180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/parse-community/docs/7811d4960dbbe51a45d03218cdfb3ae70a8df132/img/favicon/apple-touch-icon-180x180.png -------------------------------------------------------------------------------- /img/favicon/apple-touch-icon-57x57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/parse-community/docs/7811d4960dbbe51a45d03218cdfb3ae70a8df132/img/favicon/apple-touch-icon-57x57.png -------------------------------------------------------------------------------- /img/favicon/apple-touch-icon-60x60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/parse-community/docs/7811d4960dbbe51a45d03218cdfb3ae70a8df132/img/favicon/apple-touch-icon-60x60.png -------------------------------------------------------------------------------- /img/favicon/apple-touch-icon-72x72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/parse-community/docs/7811d4960dbbe51a45d03218cdfb3ae70a8df132/img/favicon/apple-touch-icon-72x72.png -------------------------------------------------------------------------------- /img/favicon/apple-touch-icon-76x76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/parse-community/docs/7811d4960dbbe51a45d03218cdfb3ae70a8df132/img/favicon/apple-touch-icon-76x76.png -------------------------------------------------------------------------------- /img/favicon/favicon-160x160.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/parse-community/docs/7811d4960dbbe51a45d03218cdfb3ae70a8df132/img/favicon/favicon-160x160.png -------------------------------------------------------------------------------- /img/favicon/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/parse-community/docs/7811d4960dbbe51a45d03218cdfb3ae70a8df132/img/favicon/favicon-16x16.png -------------------------------------------------------------------------------- /img/favicon/favicon-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/parse-community/docs/7811d4960dbbe51a45d03218cdfb3ae70a8df132/img/favicon/favicon-192x192.png -------------------------------------------------------------------------------- /img/favicon/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/parse-community/docs/7811d4960dbbe51a45d03218cdfb3ae70a8df132/img/favicon/favicon-32x32.png -------------------------------------------------------------------------------- /img/favicon/favicon-96x96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/parse-community/docs/7811d4960dbbe51a45d03218cdfb3ae70a8df132/img/favicon/favicon-96x96.png -------------------------------------------------------------------------------- /img/flutter.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 19 | 20 | 21 | 23 | 24 | 25 | 27 | 28 | 29 | 31 | 32 | 33 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /img/forks.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 9 | forks 10 | Created with Sketch. 11 | 12 | 13 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /img/github.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 9 | github 10 | Created with Sketch. 11 | 12 | 13 | 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /img/google.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 9 | google 10 | Created with Sketch. 11 | 12 | 13 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /img/header/craneLine.svg: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /img/header/cranePivot.svg: -------------------------------------------------------------------------------- 1 | 2 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /img/header/hoistWheel.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /img/header/middleLine.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 11 | 12 | 13 | 14 | 16 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /img/header/pushOne.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 8 | 9 | 10 | 12 | 13 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /img/header/rightBackground2 2.svg: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /img/header/rightBackground2.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 9 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /img/header/video.svg: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /img/ios.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 9 | 10 | 11 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /img/javascript.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 9 | 10 | 11 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /img/logo.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 10 | 11 | logo 12 | Created with Sketch. 13 | 29 | 30 | -------------------------------------------------------------------------------- /img/net.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 8 | 9 | 10 | 12 | 15 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /img/osx.ai: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/parse-community/docs/7811d4960dbbe51a45d03218cdfb3ae70a8df132/img/osx.ai -------------------------------------------------------------------------------- /img/osx.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 9 | 10 | 11 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /img/overflow.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 9 | overflow 10 | Created with Sketch. 11 | 12 | 13 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /img/php.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /img/preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/parse-community/docs/7811d4960dbbe51a45d03218cdfb3ae70a8df132/img/preview.png -------------------------------------------------------------------------------- /img/repos.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 9 | repos 10 | Created with Sketch. 11 | 12 | 13 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /img/stars.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 9 | stars 10 | Created with Sketch. 11 | 12 | 13 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /img/starsDark.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | starsDark 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /img/twitter.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 9 | twitter 10 | Created with Sketch. 11 | 12 | 13 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /img/unity.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 9 | 10 | 11 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Docs | Parse 3 | permalink: index.html 4 | layout: docs 5 | --- 6 | 7 | 18 | -------------------------------------------------------------------------------- /ios-api.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: redirected 3 | sitemap: false 4 | permalink: /ios/api/ 5 | redirect_to: 6 | - http://parseplatform.org/Parse-SDK-iOS-OSX/api 7 | --- 8 | -------------------------------------------------------------------------------- /ios-push-tutorial.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: iOS Push Tutorial | Parse 3 | permalink: /tutorials/ios-push-notifications/ 4 | layout: guide 5 | platform: ios 6 | language: objective_c-swift 7 | display_platform: iOS Push Notifications 8 | 9 | sections: 10 | - "parse-server/push-notifications-ios.md" 11 | 12 | --- -------------------------------------------------------------------------------- /ios.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: iOS Developers Guide | Parse 3 | permalink: /ios/guide/ 4 | layout: guide 5 | platform: ios 6 | language: objective_c-swift 7 | display_platform: iOS 8 | api_reference: http://parseplatform.org/Parse-SDK-iOS-OSX/api 9 | 10 | redirect_from: 11 | - /ios/ 12 | 13 | sections: 14 | - "ios/getting-started.md" 15 | - "ios/objects.md" 16 | - "ios/queries.md" 17 | - "ios/users.md" 18 | - "common/sessions.md" 19 | - "ios/roles.md" 20 | - "ios/files.md" 21 | - "ios/geopoints.md" 22 | - "ios/local-datastore.md" 23 | - "ios/extensions.md" 24 | - "ios/push-notifications.md" 25 | - "ios/config.md" 26 | - "ios/analytics.md" 27 | - "ios/user-interface.md" 28 | - "ios/in-app-purchases.md" 29 | - "common/data.md" 30 | - "common/relations.md" 31 | - "ios/handling-errors.md" 32 | - "common/security.md" 33 | - "common/performance.md" 34 | - "common/errors.md" 35 | 36 | --- 37 | -------------------------------------------------------------------------------- /js-api.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: redirected 3 | sitemap: false 4 | permalink: /js/api/ 5 | redirect_to: 6 | - https://parse-community.github.io/Parse-SDK-JS/api 7 | --- 8 | -------------------------------------------------------------------------------- /js.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: JavaScript Developers Guide | Parse 3 | permalink: /js/guide/ 4 | layout: guide 5 | platform: js 6 | language: js 7 | display_platform: JavaScript 8 | api_reference: https://parse-community.github.io/Parse-SDK-JS/api 9 | 10 | sections: 11 | - "js/getting-started.md" 12 | - "js/objects.md" 13 | - "js/queries.md" 14 | - "js/live-queries.md" 15 | - "js/users.md" 16 | - "common/sessions.md" 17 | - "js/roles.md" 18 | - "js/files.md" 19 | - "js/promises.md" 20 | - "js/geopoints.md" 21 | - "js/local-datastore.md" 22 | - "js/push-notifications.md" 23 | - "js/config.md" 24 | - "js/analytics.md" 25 | - "common/data.md" 26 | - "common/relations.md" 27 | - "js/schema.md" 28 | - "js/handling-errors.md" 29 | - "common/security.md" 30 | - "common/performance.md" 31 | - "common/errors.md" 32 | 33 | --- 34 | -------------------------------------------------------------------------------- /macos.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: macOS Developers Guide | Parse 3 | permalink: /macos/guide/ 4 | layout: guide 5 | platform: macos 6 | language: objective_c-swift 7 | display_platform: macOS 8 | api_reference: http://parseplatform.org/Parse-SDK-iOS-OSX/api 9 | 10 | redirect_from: 11 | - /osx/guide/ 12 | 13 | sections: 14 | - "ios/getting-started.md" 15 | - "ios/objects.md" 16 | - "ios/queries.md" 17 | - "ios/users.md" 18 | - "common/sessions.md" 19 | - "ios/roles.md" 20 | - "ios/files.md" 21 | - "ios/geopoints.md" 22 | - "ios/local-datastore.md" 23 | - "ios/extensions.md" 24 | - "ios/push-notifications.md" 25 | - "ios/config.md" 26 | - "ios/analytics.md" 27 | - "ios/user-interface.md" 28 | - "ios/in-app-purchases.md" 29 | - "common/data.md" 30 | - "common/relations.md" 31 | - "ios/handling-errors.md" 32 | - "common/security.md" 33 | - "common/performance.md" 34 | - "common/errors.md" 35 | 36 | --- 37 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "parsedocs", 3 | "version": "0.0.1", 4 | "description": "A static site that serves Parse's documentation using Jekyll on GitHub Pages. Work in progress.", 5 | "main": "_app/main.js", 6 | "scripts": { 7 | "start": "npm run dev", 8 | "jekyll": "bundle exec jekyll serve --incremental --livereload", 9 | "dev-webpack": "webpack --mode development --watch", 10 | "webpack": "webpack --mode production", 11 | "dev": "npm run dev-webpack & npm run jekyll", 12 | "dev-win": "start npm run dev-webpack & start npm run jekyll", 13 | "prod": "npm run webpack & npm run jekyll", 14 | "husky-pre-commit": "npm run webpack && git add assets/js/bundle.js" 15 | }, 16 | "repository": { 17 | "type": "git", 18 | "url": "git+https://github.com/ParsePlatform/docs.git" 19 | }, 20 | "author": "", 21 | "license": "UNLICENSED", 22 | "bugs": { 23 | "url": "https://github.com/ParsePlatform/docs/issues" 24 | }, 25 | "homepage": "https://github.com/ParsePlatform/docs#readme", 26 | "devDependencies": { 27 | "@babel/core": "7.12.3", 28 | "@babel/preset-env": "7.12.1", 29 | "babel-loader": "8.3.0", 30 | "babel-preset-es2015": "6.24.1", 31 | "babel-preset-react": "6.24.1", 32 | "husky": "9.0.11", 33 | "webpack": "5.94.0", 34 | "webpack-cli": "4.1.0" 35 | }, 36 | "dependencies": { 37 | "jquery": "3.5.1", 38 | "underscore": "1.12.1" 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /parse-server-api.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: redirected 3 | sitemap: false 4 | permalink: /parse-server/api/ 5 | redirect_to: 6 | - https://parseplatform.org/parse-server/api 7 | --- 8 | -------------------------------------------------------------------------------- /parse-server.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Parse Server Guide | Parse 3 | permalink: /parse-server/guide/ 4 | layout: guide 5 | platform: parse-server 6 | display_platform: Parse Server 7 | quickstart: https://github.com/parse-community/Parse-Server#getting-started 8 | 9 | sections: 10 | - "parse-server/getting-started.md" 11 | - "parse-server/database.md" 12 | - "parse-server/usage.md" 13 | - "parse-server/keys.md" 14 | - "parse-server/using-parse-sdks.md" 15 | - "parse-server/deploying.md" 16 | - "parse-server/push-notifications.md" 17 | - "parse-server/push-notifications-clients.md" 18 | - "parse-server/class-level-permissions.md" 19 | - "common/security.md" 20 | - "common/performance.md" 21 | - "common/errors.md" 22 | - "parse-server/file-adapters.md" 23 | - "parse-server/cache-adapters.md" 24 | - "parse-server/live-query.md" 25 | - "parse-server/third-party-auth.md" 26 | - "parse-server/mongo-read-preference.md" 27 | - "parse-server/development.md" 28 | - "parse-server/best-practice.md" 29 | --- 30 | -------------------------------------------------------------------------------- /php-api.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: redirected 3 | sitemap: false 4 | permalink: /php/api/ 5 | redirect_to: 6 | - https://parse-community.github.io/parse-php-sdk/ 7 | --- 8 | -------------------------------------------------------------------------------- /php.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: PHP Developers Guide | Parse 3 | permalink: /php/guide/ 4 | layout: guide 5 | platform: php 6 | language: php 7 | display_platform: PHP 8 | api_reference: https://parse-community.github.io/parse-php-sdk/ 9 | 10 | sections: 11 | - "php/getting-started.md" 12 | - "php/installation.md" 13 | - "php/setup.md" 14 | - "php/objects.md" 15 | - "php/queries.md" 16 | - "php/users.md" 17 | - "common/sessions.md" 18 | - "php/roles.md" 19 | - "php/files.md" 20 | - "php/geopoints.md" 21 | - "php/push-notifications.md" 22 | - "php/server-info.md" 23 | - "php/schema.md" 24 | - "php/cloud.md" 25 | - "php/logs.md" 26 | - "php/config.md" 27 | - "php/analytics.md" 28 | - "common/data.md" 29 | - "common/relations.md" 30 | - "php/handling-errors.md" 31 | - "common/security.md" 32 | - "common/performance.md" 33 | - "common/errors.md" 34 | 35 | --- 36 | -------------------------------------------------------------------------------- /rest.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: REST API Guide | Parse 3 | permalink: /rest/guide/ 4 | layout: guide 5 | platform: rest 6 | language: rest 7 | display_platform: REST 8 | 9 | redirect_from: 10 | - /rest/ 11 | 12 | sections: 13 | - "common/server-customize.md" 14 | - "rest/getting-started.md" 15 | - "rest/quick-reference.md" 16 | - "rest/objects.md" 17 | - "rest/queries.md" 18 | - "rest/users.md" 19 | - "rest/sessions.md" 20 | - "rest/roles.md" 21 | - "rest/files.md" 22 | - "rest/geopoints.md" 23 | - "common/data.md" 24 | - "rest/push-notifications.md" 25 | - "rest/config.md" 26 | - "rest/analytics.md" 27 | - "rest/cloud-code.md" 28 | - "rest/schemas.md" 29 | - "rest/hooks.md" 30 | - "common/security.md" 31 | - "common/errors.md" 32 | 33 | --- 34 | -------------------------------------------------------------------------------- /unity-api.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: redirected 3 | sitemap: false 4 | permalink: /unity/api/ 5 | redirect_to: 6 | - https://parse-community.github.io/Parse-SDK-dotNET/api/ 7 | --- 8 | -------------------------------------------------------------------------------- /unity.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Unity Developers Guide | Parse 3 | permalink: /unity/guide/ 4 | layout: guide 5 | platform: unity 6 | language: cs 7 | display_platform: Unity 8 | api_reference: https://parse-community.github.io/Parse-SDK-dotNET/api/ 9 | 10 | sections: 11 | - "unity/getting-started.md" 12 | - "unity/objects.md" 13 | - "unity/queries.md" 14 | - "unity/users.md" 15 | - "common/sessions.md" 16 | - "unity/roles.md" 17 | - "unity/files.md" 18 | - "unity/geopoints.md" 19 | - "unity/push-notifications.md" 20 | - "unity/config.md" 21 | - "unity/analytics.md" 22 | - "common/data.md" 23 | - "common/relations.md" 24 | - "unity/handling-errors.md" 25 | - "common/security.md" 26 | - "common/performance.md" 27 | - "common/errors.md" 28 | 29 | --- 30 | -------------------------------------------------------------------------------- /webpack.config.js: -------------------------------------------------------------------------------- 1 | var path = require('path') 2 | var webpack = require('webpack') 3 | 4 | module.exports = { 5 | entry: './_app/main.js', 6 | output: { 7 | path: path.join(__dirname, 'assets/js'), 8 | filename: 'bundle.js' 9 | }, 10 | module: { 11 | rules: [ 12 | { 13 | test: /\.js$/, 14 | exclude: /node_modules/, 15 | use: { 16 | loader: 'babel-loader', 17 | options: { 18 | presets: ['@babel/preset-env'] 19 | } 20 | }, 21 | }, 22 | ] 23 | }, 24 | resolve: { 25 | extensions: ['.js', '.json'], 26 | alias: { 27 | jquery: "jquery/src/jquery" 28 | } 29 | }, 30 | 31 | plugins: [ 32 | new webpack.ProvidePlugin({ 33 | "_": "underscore", 34 | $: "jquery", 35 | jQuery: "jquery" 36 | }) 37 | ] 38 | }; 39 | -------------------------------------------------------------------------------- /win8-push-tutorial.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Windows 8 Push Tutorial | Parse 3 | permalink: /tutorials/windows-8-push-tutorial/ 4 | layout: guide 5 | platform: dotnet 6 | language: cs 7 | display_platform: Windows 8 Push Notifications 8 | 9 | --- 10 | 11 | ## Under construction 12 | --------------------------------------------------------------------------------