# createCustomer

### Create a Customer in the Cloud4Wi account

This method initializes the customer object in the Cloud4Wi account. This method must be invoked before installing the WiFi Profile.

The `customer` object is [described here](https://create.cloud4wi.ai/dev-hub/wifi-sdk/integrating-the-sdk/android/objects/customer).

```swift
- (void) createCustomer: (Customer*) customer
            deduplicate: (NSString *) deduplicateAttribute
              onSuccess: (void (^)(CustomerCreateResponse *resp)) onSuccess
                onError: (void (^)(NSError *error)) onError
```

Calling this function It is equivalent to a make a login. The success of this function opens a session with the customer returned. To close the session use `logout()` method.&#x20;

### Customer deduplication

The `deduplicateAttribute` attribute is optional. If set, the system will check if an exisitng customer with a matching attribute already exists in the same Cloud4Wi account.&#x20;

If a matching record exists, the `createCustomer` method will override the existing matching customer attributes with the one passed in the `createCustomer` (except for `username, password, source` )

Pssible values of `deduplicateAttribute` are:

```
"phoneNumber", "email", "extId", "extProp1", "extProp2"
```

To create a customer without any deduplication check, set `deduplicateAttribute` to `nil.`

```
cloud4WiSDKWiFi.createCustomer(customer, deduplicate: nil)
```

### Customer username and password

Username and password are credentials for the user in the c4w environment and are used for Radius authN/Z.&#x20;

If `username` and `password` are not set in the [Customer object](https://create.cloud4wi.ai/dev-hub/wifi-sdk/integrating-the-sdk/ios/objects/customer), they are generated randomly during the customer creation and returned to the app in the [CustomerCreate Response object](https://create.cloud4wi.ai/dev-hub/wifi-sdk/integrating-the-sdk/ios/objects/customercreateresponse). This auto generation of the credentials is the best way to proceed.

### Response

If the method executes with no errors, it returns the [object CustomerCreateResponse](https://create.cloud4wi.ai/dev-hub/wifi-sdk/integrating-the-sdk/ios/objects/customercreateresponse)

## Examples

### Create customer&#x20;

{% tabs %}
{% tab title="Swift" %}

```swift
let customer = Customer()
				
var approvedPolicies: Dictionary = [String: String]()
approvedPolicies["termsOfUse"] = "true"
approvedPolicies["privacy"] = "true"
			
customer?.policies = approvedPolicies
customer?.firstName = "Michele"
customer?.email = email
                
cloud4WiSDKWiFi.createCustomer(customer, deduplicate: "email") 
```

{% endtab %}

{% tab title="Objective-C" %}

<pre class="language-objectivec"><code class="lang-objectivec">Customer* customer = [[Customer alloc] init];

NSMutableDictionary *approvedPolicies = [[NSMutableDictionary alloc] init];
    for (NSString* policy in policies) {
        [approvedPolicies setObject:@"true" forKey:policy];
    }

[customer setPolicies:approvedPolicies];        
[customer setFirstName:@"John"];
[customer setEmail:@"john@cloud4wi.com"];

<strong>[cloud4WiSDKWiFi createCustomer:customer deduplicate:@"email" onSuccess:^(CustomerCreateResponse *customerCreateResp) {
</strong></code></pre>

{% endtab %}
{% endtabs %}

### Create customer without deduplication

{% tabs %}
{% tab title="Swift" %}

```swift
cloud4WiSDKWiFi.createCustomer(customer, deduplicate: nil)[cloud4WiSDKWiFi createCustomer:customer deduplicate:nil onSuccess:^(CustomerCreateResponse *customerCreateResp) {
```

{% endtab %}

{% tab title="Objective-C" %}

```objectivec
[cloud4WiSDKWiFi createCustomer:customer deduplicate:nil onSuccess:^(CustomerCreateResponse *customerCreateResp) {
```

{% endtab %}
{% endtabs %}
