# 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](/dev-hub/wifi-sdk/integrating-the-sdk/android/objects/customer.md).

```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](/dev-hub/wifi-sdk/integrating-the-sdk/ios/objects/customer.md), they are generated randomly during the customer creation and returned to the app in the [CustomerCreate Response object](/dev-hub/wifi-sdk/integrating-the-sdk/ios/objects/customercreateresponse.md). 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](/dev-hub/wifi-sdk/integrating-the-sdk/ios/objects/customercreateresponse.md)

## 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 %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://create.cloud4wi.ai/dev-hub/wifi-sdk/integrating-the-sdk/ios/sdk-methods/createcustomer.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
