<!--
  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at
  
  http://www.apache.org/licenses/LICENSE-2.0
  
  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->

<!DOCTYPE html>
<html>
  <head>
    <title></title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <link rel="stylesheet" href="../resources/css/bootstrap-combined.min.css" />
    <link rel="stylesheet" href="../resources/css/styles.css" />
  </head>
  <body>
    <div class="header">
      <img src="../resources/images/apigee.png"> App Services (Usergrid) Javascript SDK
    </div>
    <div class="info">
      To get the Facebook example working on your development machine, follow these steps:
      <br/><br/>
      <b>1. Sign up</b>
      <br/>Sign up for a <a href="http://facebook.com">Facebook</a> account.
      <br/><br/>
      <b>2. Create a new app</b>
      <br/>Go to <a href="https://developers.facebook.com">https://developers.facebook.com</a> and follow
      the prompts to authenticate yourself.  Then, go to the Facebook App Dashboard, and create a new app.
      <br/><br/>
      <b>3. Specify your Facebook integration method</b>
      <br/>On the app creation page, make sure you specify that you will use "Website with Facebook Login".
      You should see something like <a href="http://cl.ly/image/0K2L1z062Q1H">this</a>. You should enter the url where
      you will host this sample (e.g. http://mywebsite.com/path-to-my-code). If want just to test with our gh-pages repo,
      located here:  <a href="http://apigee.github.com/usergrid-javascript-sdk/">http://apigee.github.com/usergrid-javascript-sdk/</a>,
      then enter http://apigee.github.com/usergrid-javascript-sdk in the field instead.
      <br/><br/>
      <b>4. Get your App Id</b>
      <br/>Once your app is created, you can get the app id by going here:  <a href="https://developers.facebook.com/apps">https://developers.facebook.com/apps</a>
      <br/><br/>
      <b>5. Download this code</b> (skip this step if you plan to run it on our gh-pages repo)
      <br/>If you haven't done so already, download the Usergrid Javascript SDK: <a href="https://github.com/apigee/usergrid-javascript-sdk">https://github.com/apigee/usergrid-javascript-sdk</a>
      and save to a local directory on your hard drive. You will then need to deploy the code to your server.
      <br/><br/>
      <b>6. Run the file</b>
      <br/>Navigate your browser to the location where you uploaded your code, or go to our gh-pages repo
      ( <a href="http://apigee.github.com/usergrid-javascript-sdk/">http://apigee.github.com/usergrid-javascript-sdk/</a>) and choose "Facebook Login Example".
      <br/><br/>
      <b>7. Log in!</b>
      <br/>Enter your API key, and follow the prompts.
    </div>
  </body>
</html>

