Android
After receiving an offline push, the notification bar will display the push message as shown. Clicking on the notification bar can custom open the application interface.
1. For console configuration, click on 'Subsequent Actions' and configure as follows, choose Open the specified interface within the app, and the plugin users will by default fill in the jump parameters.
2. For registration and callback handling of click events, it's recommended to place the registration in the application's Application oncreate() function. The component will notify the application via callback or broadcast, and the application can configure its custom jump page in the callback.
The callback method is as follows:
TUICore.registerEvent(TUIConstants.TIMPush.EVENT_NOTIFY, TUIConstants.TIMPush.EVENT_NOTIFY_NOTIFICATION, new ITUINotification() {
@Override
public void onNotifyEvent(String key, String subKey, Map<String, Object> param) {
Log.d(TAG, "onNotifyEvent key = " + key + "subKey = " + subKey);
if (TUIConstants.TIMPush.EVENT_NOTIFY.equals(key)) {
if (TUIConstants.TIMPush.EVENT_NOTIFY_NOTIFICATION.equals(subKey)) {
if (param != null) {
String extString = (String)param.get(TUIConstants.TIMPush.NOTIFICATION_EXT_KEY);
TUIUtils.handleOfflinePush(extString, null);
}
}
}
}
});
The broadcast method is as follows:
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(TUIConstants.TIMPush.NOTIFICATION_BROADCAST_ACTION);
LocalBroadcastManager.getInstance(context).registerReceiver(localReceiver, intentFilter);
public class OfflinePushLocalReceiver extends BroadcastReceiver {
public static final String TAG = OfflinePushLocalReceiver.class.getSimpleName();
@Override
public void onReceive(Context context, Intent intent) {
DemoLog.d(TAG, "BROADCAST_PUSH_RECEIVER intent = " + intent);
if (intent != null) {
String ext = intent.getStringExtra(TUIConstants.TIMPush.NOTIFICATION_EXT_KEY);
TUIUtils.handleOfflinePush(ext, null);
} else {
DemoLog.e(TAG, "onReceive ext is null");
}
}
}
iOS
Please set the V2TIMOfflinePushInfo's ext
field when calling sendMessage to send a message. When the user receives an offline push and starts the App, they can get the ext
field in the AppDelegate -> didReceiveRemoteNotification
system callback, and then jump to the specified UI interface according to the content of the ext
field. Taking the scenario of Denny sending a message to Vinson as an example.
The sender, Denny, needs to set the push extension field ext
when sending the message:
// Denny sets offlinePushInfo and specifies the ext field when sending the message
V2TIMMessage *msg = [[V2TIMManager sharedInstance] createTextMessage:@"Text Message"];
V2TIMOfflinePushInfo *info = [[V2TIMOfflinePushInfo alloc] init];
info.ext = @"jump to denny";
[[V2TIMManager sharedInstance] sendMessage:msg receiver:@"vinson" groupID:nil priority:V2TIM_PRIORITY_DEFAULT
onlineUserOnly:NO offlinePushInfo:info progress:^(uint32_t progress) {
} succ:^{
} fail:^(int code, NSString *msg) {
}];
Recipient: Vinson's App may be offline, but can still receive APNS offline push. When Vinson clicks on the push message, the App will launch:
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))completionHandler {
if ([userInfo[@"ext"] isEqualToString:@"jump to denny"]) {
}
}
Flutter
Step 1: Manufacturer Configuration
Step 2: Client Code Configuration
Step 3: Handle Message Click Callback and Parse Parameters
Please define a function for receiving push message click callback events.
Define the function with the parameter format {required String ext, String? userID, String? groupID}
.
Here, the ext field contains the full ext information carried by the message, specified by the sender. If not specified, there is a default value. You can use this to navigate to the corresponding page based on parsing this field.
The userID and groupID fields, for this plugin, attempt to automatically parse the ext Json String and obtain the individual chat partner userID and group chat groupID information carried within. If you haven't defined the ext field yourself, and the ext field is specified by default by the SDK or UIKit, you can use the default parsing here. If the parsing attempt fails, they will be null.
You can define a function to receive this callback and use it to navigate to the corresponding Session Page or your Business Page.
Example below:
void _onNotificationClicked({required String ext, String? userID, String? groupID}) {
print("_onNotificationClicked: $ext, userID: $userID, groupID: $groupID");
if (userID != null || groupID != null) {
} else {
}
}
Step 4: Mount the Listen for Callbacks
After completing the IM Login, and before using other plugins (such as CallKit), immediately register the Push Plugin.
Invoke the TencentCloudChatPush().registerPush
method, pass in the Click Callback Function defined in the background.
Additionally, you can optionally pass in the apnsCertificateID
for the iOS Push Certificate ID and androidPushOEMConfig
for Android Push Vendor Configuration. These configurations have been specified in previous steps. If no changes are necessary, they need not be passed in again.
TencentCloudChatPush().registerPush(onNotificationClicked: _onNotificationClicked);
Note:
If your application needs to use the push plugin for business message notifications, and it does not immediately start and log in to the IM module after launching<3>, or you need to handle business navigation through message click callbacks before <5>logging in to the IM module</5>, it is recommended that you call the <7>TencentCloudChatPush().registerOnNotificationClickedEvent</7> method as soon as possible to manually mount the message click callback, in order to timely retrieve message parameters.
In such scenarios, you can execute this function before calling TencentCloudChatPush().registerPush
and place it as early as possible in your code.
TencentCloudChatPush().registerOnNotificationClickedEvent(onNotificationClicked: _onNotificationClicked);
Was this page helpful?