# Set display content (/en/realtime-media/im/build/notifications-and-event-handling/offline-push/set-display-content/ios)

> For AI agents: see the complete documentation index at [llms.txt](/llms.txt).

You can configure the push title and content displayed in the notification bar in the following ways, with the configuration priority from low to high:

    1. Configure the display attributes of push notifications;
    2. Use the default push template;
    3. Use message extension fields;
    4. Use a custom push template.

    ## Configure the display attributes of push notifications [#configure-the-display-attributes-of-push-notifications-1]

    Call `updatePushDisplayName` and `updatePushDisplayStyle` methods to set the nickname (`displayName`) and notification display style (`pushDisplayStyle`), which includes the push title and content in the notification bar.

    This nickname indicates the nickname of the message sender that is displayed in the push notification bar of the recipient's client when a message from the user is pushed. The nickname can be different from the nickname in user attributes. However, Agora recommends that you use the same nickname for both. Therefore, if either nickname is updated, the other should be changed at the same time. To update the nickname in user attributes, see [Set user attributes](..//en/realtime-media/im/build/build-core-messaging/user-attributes#set-user-attributes).

    ```objc
    [AgoraChatClient.sharedClient.pushManager updatePushDisplayName:@"displayName" completion:^(NSString * aDisplayName, AgoraChatError * aError) {
        if (aError)
        {
            NSLog(@"update push display name error: %@", aError.errorDescription);
        }
    }];
    ```

    ```objc
    [AgoraChatClient.sharedClient.pushManager updatePushDisplayStyle:AgoraChatPushDisplayStyleSimpleBanner completion:^(AgoraChatError * aError)
    {
        if(aError)
        {
            NSLog(@"update display style error --- %@", aError.errorDescription);
        }
    }];
    ```

    Call `getPushNotificationOptionsFromServerWithCompletion` to get the display attributes for a push notification, as shown in the following code example:

    ```objc
    [AgoraChatClient.sharedClient.pushManager getPushNotificationOptionsFromServerWithCompletion:^(AgoraChatPushOptions *aOptions, AgoraChatError *aError) {
            if (!aError) {
                // Get the nickname displayed in the push notification.
                NSString *displayName = aOptions.displayName;
                // Get the display style of the push notification.
                AgoraChatPushDisplayStyle displayStyle = aOptions.displayStyle;
            }
        }];
    ```

    To display the message content in the notification bar, set the notification display style (`pushDisplayStyle`). This parameter has the following two settings:

    * (Default) `AgoraChatPushDisplayStyleSimpleBanner`: Regardless of whether `displayName` is set, for any type of message push, the notification bar uses the default display settings, that is, the push title is "You have a new message" and the push content is "Please click to view".
    * `AgoraPushDisplayStyleMessageSummary`: Displays the message content. The nickname you set is only effective when `pushDisplayStyle` is `AgoraPushDisplayStyleMessageSummary`, not `AgoraChatPushDisplayStyleSimpleBanner`.

    The following table uses a one-to-one chat text message as an example to introduce the settings of the display attributes. For group chats, the "Push nickname of the message sender" and "Chat user ID of the message sender" in the table below are displayed as "Group ID".

    | Parameter settings                                                                              | Push display                                                                                             | Image                                                                                            |
    | :---------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------- | :----------------------------------------------------------------------------------------------- |
    | `pushDisplayStyle`: (default) `AgoraChatPushDisplayStyleSimpleBanner``displayName`: Set or not. | Push title: "You have a new message"Push content: "Please click to view"                                 | ![push\_displayattribute\_1](https://assets-docs.agora.io/images/im/push_displayattribute_1.png) |
    | `pushDisplayStyle`: `AgoraPushDisplayStyleMessageSummary``displayName`: Set a specific value.   | Push title: "You have a new message"Push content: "Push nickname of the message sender: message content" | ![push\_displayattribute\_2](https://assets-docs.agora.io/images/im/push_displayattribute_2.png) |
    | `pushDisplayStyle`: `AgoraPushDisplayStyleMessageSummary``displayName`: Not set.                | Push title: "You have a new message"Push content: "Message sender's Chat user ID: Message content"       | ![push\_displayattribute\_3](https://assets-docs.agora.io/images/im/push_displayattribute_3.png) |

    ## Use the default push template [#use-the-default-push-template-1]

    The default push template is mainly used when the default configuration provided by the server does not meet your needs. It allows you to set the global push title and push content. For example, the default settings provided by the server are push titles and content in English. If you need to display push titles and content in another language, you can set the push template in the corresponding language.

    To use the default template, create a default push template in [Agora Console](https://console.agora.io/v2) or [call RESTful API](/en/api-reference/api-ref/im/offline-push/offline-push-configuration). The template name is `default`. After setting, the default template is automatically used when pushing messages, and there is no need to enter the template name when creating messages.

    Follow the steps below to create a default push template in [Agora Console](https://console.agora.io/v2):

    1. Log in to [Agora Console](https://console.agora.io/v2) and click **Project Management** in the left navigation bar.

    2. On the **Project Management** page, click **Config** in the **Action** column for the project that has Chat enabled.

    3. On the **Edit Project** page, in the **Features** area, click **Enable / Config** for Chat.

    4. On the project configuration page, select **Features** > **Push Template**, click **Add Push Template**, and configure the fields in the pop-up dialog box, as shown in the following figure.

       ![push\_add\_template](https://assets-docs.agora.io/images/im/push_add_template.png)

    5. Set **Template Name** to **default**, then set the **Title** and **Content** parameters, and click **OK**.

       | Parameter         | Type   | Description                                                                                                                                                                                                                                                                                                                                                                                                                                                              | Required |
       | :---------------- | :----- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------- |
       | **Template Name** | String | The push template name. The default template is **default**.                                                                                                                                                                                                                                                                                                                                                                                                             | Yes      |
       | **Title**         | Array  | The push title. Can be set in the following ways: Enter a fixed push title. Use built-in variables and enter `{$fromNickname}, {$msg}`. Set custom variables through the value array. The field format is `{0} {1} {2} ... {n}`. If the default template is used, the first two settings do not need to pass in this parameter when creating a message. The server automatically obtains it. The third setting method needs to be passed in through the extension field. | Yes      |
       | **Content**       | Array  | The push content. Can be set in the following ways: Enter fixed push content. Use variables and enter `{$fromNickname}, {$msg}`. Set custom variables through the value array. The field format is `{0} {1} {2} ... {n}`. If the default template is used, the first two settings do not require parameters to be passed in when creating a message. The server automatically obtains them. The third setting method needs to be passed in through the extension field.  | Yes      |

    ## Use message extension fields [#use-message-extension-fields-1]

    When creating a push message, you can set the message extension fields to customize the push content to be displayed.
    For the display attributes of push notifications, that is, the display attributes and display style of push notifications, in addition to calling specific methods to set them, you can also set them through custom fields. If you use both methods at the same time, the custom fields have a higher priority.

    ```objc
    AgoraChatTextMessageBody *body = [[AgoraChatTextMessageBody alloc] initWithText:@"test"];
        AgoraChatMessage *message = [[AgoraChatMessage alloc] initWithConversationID:conversationId from:AgoraChatClient.sharedClient.currentUsername to:conversationId body:body ext:nil];
        message.ext = @{@"em_apns_ext":@{@"em_push_content":@"custom push content",@"em_push_title":@"custom push title"}};
        message.chatType = AgoraChatTypeChat;
        [AgoraChatClient.sharedClient.chatManager sendMessage:message progress:nil completion:nil];
    ```

    The structure of a custom display field is as follows:

    ```json
    {
        "em_apns_ext": {
           "em_push_title": "custom push title",
           "em_push_content": "custom push content"
        }
    }
    ```

    | Parameters        | Description                                                                          |
    | :---------------- | :----------------------------------------------------------------------------------- |
    | `em_apns_ext`     | The message extension fields.                                                        |
    | `em_push_title`   | Customize the push message title. This field name is fixed and cannot be modified.   |
    | `em_push_content` | Customize the push message content. This field name is fixed and cannot be modified. |

    ## Use a custom push template [#use-a-custom-push-template-1]

    The steps to use a custom push template are as follows:

    1. If you use a custom push template, create it in [Agora Console](https://console.agora.io/v2) or call [RESTful API](/en/api-reference/api-ref/im/offline-push/offline-push-configuration#create-a-push-template). For a description of the parameters in the **Add Push Template** dialog box, see the section about using the default template. When using a custom template, regardless of how the **Title** and **Content** parameters are set, they must be passed in through the extension fields when creating a message.

    2. When creating a message, pass in the template name, push title, and push content by using the extension fields. The push title and content in the notification bar use the formats in the template, respectively.

       ```objc
       // The following takes text messages as an example. The setting methods for other types of messages are the same.
       AgoraChatTextMessageBody *body = [[AgoraChatTextMessageBody alloc]initWithText:@"test"];
       AgoraChatMessage *message = [[AgoraChatMessage alloc]initWithConversationID:@"conversationId" from:@"currentUsername" to:@"conversationId" body:body ext:nil];
              // Set the push template created on the Agora console as the default push template.
              NSDictionary *pushObject = @{
                  @"name":@"templateName", // Set the push template name.
                  @"title_args":@ [ @"titleValue1" ] , // Set the push title variable. If the push title specified in the template is a placeholder, you can customize the title here; if the specified title is a fixed value, the title will be a fixed value when using this template.
                  @"content_args":@ [ @"contentValue1" ] // Set the push content variable. If the push content specified in the template is placeholder data, you can customize the push content here; if the specified push content is a fixed value, the push content will be a fixed value when using this template.
              };
              message.ext = @{
                  @"em_push_template":pushObject,
              };
              message.chatType = AgoraChatTypeChat;
       [[AgoraChatClient sharedClient].chatManager sendMessage:message progress:nil completion:nil];
       ```

    The JSON structure of the push template is as follows:

    ```json
    "em_push_template":{
            "name":"test6",
            "title_args":[
                "test1"
            ],
            "content_args":[
                "{$fromNickname}",
                "{$msg}"
            ]
    }
    ```

    The message receiver can call `setPushTemplate` to pass in the push template name and select the template to use.

    If the sender uses a push template when sending a message, the content displayed in the push notification bar is based on the sender's push template.

    ```objc
    [AgoraChatClient.sharedClient.pushManager setPushTemplate:@"templateName" completion:^(AgoraChatError * _Nullable aError) {

    }];
    ```

    
  
      
  
      
  
      
  
      
  
      
  
