## Set up existing analytics backend

The manual setup enables you to use your existing Amazon Pinpoint resource in your app.

```javascript
import { Amplify } from 'aws-amplify';

Amplify.configure({
  // To get the AWS Credentials, you need to configure
  // the Auth module with your Cognito Federated Identity Pool
  Auth: {
    identityPoolId: 'us-east-1:xxx-xxx-xxx-xxx-xxx',
    region: 'us-east-1'
  },
  Analytics: {
    // OPTIONAL - disable Analytics if true
    disabled: false,
    // OPTIONAL - Allow recording session events. Default is true.
    autoSessionRecord: true,

    AWSPinpoint: {
      // OPTIONAL -  Amazon Pinpoint App Client ID
      appId: 'XXXXXXXXXXabcdefghij1234567890ab',
      // OPTIONAL -  Amazon service region
      region: 'XX-XXXX-X',
      // OPTIONAL -  Customized endpoint
      endpointId: 'XXXXXXXXXXXX',
      // OPTIONAL - Default Endpoint Information
      endpoint: {
        address: 'xxxxxxx', // The unique identifier for the recipient. For example, an address could be a device token, email address, or mobile phone number.
        attributes: {
          // Custom attributes that your app reports to Amazon Pinpoint. You can use these attributes as selection criteria when you create a segment.
          hobbies: ['piano', 'hiking']
        },
        channelType: 'APNS', // The channel type. Valid values: APNS, GCM
        demographic: {
          appVersion: 'xxxxxxx', // The version of the application associated with the endpoint.
          locale: 'xxxxxx', // The endpoint locale in the following format: The ISO 639-1 alpha-2 code, followed by an underscore, followed by an ISO 3166-1 alpha-2 value
          make: 'xxxxxx', // The manufacturer of the endpoint device, such as Apple or Samsung.
          model: 'xxxxxx', // The model name or number of the endpoint device, such as iPhone.
          modelVersion: 'xxxxxx', // The model version of the endpoint device.
          platform: 'xxxxxx', // The platform of the endpoint device, such as iOS or Android.
          platformVersion: 'xxxxxx', // The platform version of the endpoint device.
          timezone: 'xxxxxx' // The timezone of the endpoint. Specified as a tz database value, such as Americas/Los_Angeles.
        },
        location: {
          city: 'xxxxxx', // The city where the endpoint is located.
          country: 'xxxxxx', // The two-letter code for the country or region of the endpoint. Specified as an ISO 3166-1 alpha-2 code, such as "US" for the United States.
          latitude: 0, // The latitude of the endpoint location, rounded to one decimal place.
          longitude: 0, // The longitude of the endpoint location, rounded to one decimal place.
          postalCode: 'xxxxxx', // The postal code or zip code of the endpoint.
          region: 'xxxxxx' // The region of the endpoint location. For example, in the United States, this corresponds to a state.
        },
        metrics: {
          // Custom metrics that your app reports to Amazon Pinpoint.
        },
        /** Indicates whether a user has opted out of receiving messages with one of the following values:
         * ALL (default) - User has opted out of all messages.
         * NONE - Users has not opted out and receives all messages.
         */
        optOut: 'ALL',
        // Customized userId
        userId: 'XXXXXXXXXXXX',
        // User attributes
        userAttributes: {
          interests: ['football', 'basketball', 'AWS']
          // ...
        }
      },

      // Buffer settings used for reporting analytics events.
      // OPTIONAL - The buffer size for events in number of items.
      bufferSize: 1000,

      // OPTIONAL - The interval in milliseconds to perform a buffer check and flush if necessary.
      flushInterval: 5000, // 5s

      // OPTIONAL - The number of events to be deleted from the buffer when flushed.
      flushSize: 100,

      // OPTIONAL - The limit for failed recording retries.
      resendLimit: 5
    }
  }
});
```

## Update your IAM Policy

<!-- TODO rewrite Where should the update go? -->

Amazon Pinpoint service requires an IAM policy in order to use the `record` API:
<!-- TODO rewrite do we need to update the version number of the policy? -->
```json
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": ["mobiletargeting:UpdateEndpoint", "mobiletargeting:PutEvents"],
      "Resource": ["arn:aws:mobiletargeting:*:${accountID}:apps/${appId}*"]
    }
  ]
}
```
