# Reward User

#### 1. Fully Managed by MyChips

{% hint style="info" %}
Use this method only if you have selected Self-Managed Currency. If you already support S2S postback please skip this snippet.
{% endhint %}

To check for a reward use the checkReward function. It requires your adUnitId, a reward callback (which will be called if the checks shows that there is a reward), and an on error callback.

```dart
MCOfferwallSdk.instance.checkReward(
    adUnitId: "YOUR_AD_UNIT_ID",
    onReward: (reward) {
        //do something with the reward, here we just print it out
        //Be cautious: reward.virtualCurrencyReward returns a Double value.
        print("Reward: ${reward.virtualCurrencyReward}");
    },
    onError: (e, st) {
        //do something on error, here we just print it out
        print("Error: $e");
        print("Stacktrace: $st");
    });
```

> If there is no reward and no error, nothing will happen

You should check for the reward whenever the app is started or resumed. Example integration:

```dart
void main() {
  runApp(const MainApp());
}

class MainApp extends StatefulWidget {
  const MainApp({super.key});

  @override
  State<MainApp> createState() => _MainAppState();
}

class _MainAppState extends State<MainApp> {
  late final AppLifecycleListener _appLifecycleListener;

  @override
  void initState() {
    super.initState();
    initialize();
  }

  @override
  void dispose() {
    _appLifecycleListener.dispose();
    super.dispose();
  }

  Future<void> checkReward() async {
    MCOfferwallSdk.instance.checkReward(
      adUnitId: "YOUR_AD_UNIT_ID",
      onReward: (reward) {
        log("Reward: ${reward.virtualCurrencyReward}");
      },
      onError: (e, st) {
        log("Error: $e StackTrace: $st");
      },
    );
  }

  Future<void> initialize() async {
    //initialize the sdk and set the user id
    await MCOfferwallSdk.instance.init("YOUR_API_KEY");
    await MCOfferwallSdk.instance.setUserId("YOUR_USER_ID");

    //check for reward when the app is initialized
    checkReward();

    //check for reward when the app is resumed
    _appLifecycleListener = AppLifecycleListener(
      onResume: () {
        checkReward();
      },
    );
  }

  @override
  Widget build(BuildContext context) {
    return ...//your app body
  }
}

```

#### 2. Server-to-Server (S2S) Postbacks

If you prefer server-to-server communication, MyChips can send a postback to your server with bonus information. The configuration for postbacks is available in your publisher dashboard. This method is useful for validating and securely rewarding users without client-side manipulation.&#x20;

If you are testing in Sandbox mode, the value of the macro {user\_payout} will be 0.


---

# 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://docs.mychips.io/flutter/reward-user.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.
