I am using [Firebase][1] module to send push notifications to a specific mobile user when a webform is submitted.

Below is my custom webform handler:

    <?php
    
    namespace Drupal\my_custom_module\Plugin\WebformHandler;
    
    use Drupal\Core\Session\AccountInterface;
    use Drupal\Core\Serialization\Yaml;
    use Drupal\Core\Form\FormStateInterface;
    
    use Drupal\node\Entity\Node;
    
    use Drupal\webform\WebformInterface;
    use Drupal\webform\Plugin\WebformHandlerBase;
    use Drupal\webform\webformSubmissionInterface;
    use Drupal\webform\Entity\WebformSubmission;
    
    
    /**
     * Send Push Notification when a webform submission is submitted.
     *
     * @WebformHandler(
     *   id = "Send Push Notification when a webform submission is submitted",
     *   label = @Translation("Send Push Notification when a webform submission is submitted"),
     *   category = @Translation("Push Notification"),
     *   description = @Translation("Send Push Notification when a webform submission is submitted"),
     *   cardinality = \Drupal\webform\Plugin\WebformHandlerInterface::CARDINALITY_UNLIMITED,
     *   results = \Drupal\webform\Plugin\WebformHandlerInterface::RESULTS_PROCESSED,
     *   submission = \Drupal\webform\Plugin\WebformHandlerInterface::SUBMISSION_REQUIRED,
     * )
     */
    class PushNotificationWebformHandler extends WebformHandlerBase {
    
      /**
       * {@inheritdoc}
       */
    
      // Function to be fired while submitting the Webform.
      public function submitForm(array &$form, FormStateInterface $form_state, WebformSubmissionInterface $webform_submission) {
        // Get an array of the values from the submission.
        $values = $webform_submission->getData();
    
    	// Get (NID) from text element available on the webform.
    	$nidvalue = $values["attached_node"];
    
    	// Load the node.
    	$node = \Drupal\node\Entity\Node::load($nidvalue);
    	
        // Get (selected_node_owner) value from the User Entity reference element available on the webform.
    	$nodeowner = $values["selected_node_owner"];
    	
        // Get (token) value from the loaded node through the 'field_node_owner' Entity field.
    	$usertoken = $node->field_node_owner->entity->field_user_push_token->value;
    	
    	// Send the Push Notification.
    	// Token is generated by app. You'll have to send the token to Drupal.
    	$messageService = \Drupal::service('firebase.message');
    	$messageService->setRecipients($usertoken);
    	$messageService->setNotification([
    		'title' => 'Hello',
    		'body' => 'Hello $nodeowner this is your body message',
    		'badge' => 1,
    		'icon' => 'optional-icon',
    		'sound' => 'optional-sound',
    		'click_action' => 'optional-action',
    	]);
    	$messageService->setData([
    		'score' => '3x1',
    		'date' => '2019-04-05',
    		'optional' => 'Data is used to send silent pushes. Otherwise, optional.',
    	]);
    	$messageService->setOptions(['priority' => 'normal']);
    	$messageService->send();
        }
    }

Everything is working as expected but the 'Variables' are not rendering any values and printed as they are.

**Example:**

I am expecting the body of the notification message to be something like below (Say the **selected_node_owner** name is "Elie Masaad"):

    Hello Elie Masaad this is your body message

but instead I am getting the below:

    Hello $nodeowner this is your body message

**Module maintainer gave the below hint:**

You should use a [Token][2] or simple [str_replace][3] for replacing something in string.

Can anyone guide me on how to pragmatically use tokens for my above requirement ?


  [1]: https://www.drupal.org/project/firebase
  [2]: https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Utility%21Token.php/function/Token%3A%3Areplace/8.2.x
  [3]: https://www.php.net/manual/en/function.str-replace.php