0

在我的 react-native 应用程序中,我使用clevertap 发送推送通知。我在移动设备上收到通知,但无法读取其有效负载。

4

2 回答 2

3

为了处理 iOS 推送通知负载和处理用户对通知的响应,iOS 提供了委托方法

userNotificationCenter:didReceiveNotificationResponse:withCompletionHandler:

您可以通过以下步骤实现相同的功能:

  • 导航到您的 AppDelegate 文件 > 和框架

    #import <UserNotifications/UserNotifications.h>

  • 另外,添加 UNUserNotificationCenterDelegate

    @interface AppDelegate () <UIApplicationDelegate,UNUserNotificationCenterDelegate>

  • 处理 UserNotifications 的委托方法

- (void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void(^)())completionHandler{

   NSLog(@"User Info : %@",response.notification.request.content.userInfo); //for getting response payload data
   completionHandler();
}

此外,如果您希望确定通知是否来自 CleverTap,请调用此方法:

- (BOOL)isCleverTapNotification:(NSDictionary *)payload;

您必须按如下方式手动调用 SDK/将以下 CleverTap 代码添加到您的 AppDelegate

- (void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)(void))completionHandler {

    if ([[CleverTap sharedInstance] isCleverTapNotification:response.notification.request.content.userInfo]) {
       ...
    }
    completionHandler();
}

希望这可以帮助。如有更多问题,您可以在https://community.clevertap.com/上发帖

于 2019-03-26T15:50:05.113 回答
2

您可以使用 CleverTap 以两种不同的方式呈现推送通知。

方式 1:允许 CleverTap 直接处理推送通知。为此,只需在您的清单文件中提及以下代码

<service
    android:name="com.clevertap.android.sdk.FcmTokenListenerService">
    <intent-filter>
        <action android:name="com.google.firebase.INSTANCE_ID_EVENT"/>
    </intent-filter>
</service>

<service
    android:name="com.clevertap.android.sdk.FcmMessageListenerService">
    <intent-filter>
        <action android:name="com.google.firebase.MESSAGING_EVENT"/>
    </intent-filter>
</service>

方式2:在您的最后处理有效负载。您可以按以下方式执行此操作。

第 1 步:在清单文件中添加自定义 FCM 消息侦听器。

<service
android:name="com.your.package.MyFcmMessageListenerService">
<intent-filter>
    <action android:name="com.google.firebase.MESSAGING_EVENT"/>
</intent-filter>

第 2 步:在您的 FCM 消息侦听器服务中,您将获得有效负载,您可以通过以下方式对其进行处理。

public class MyFcmMessageListenerService extends FirebaseMessagingService {

@Override
public void onMessageReceived(RemoteMessage message){
    try {
        if (message.getData().size() > 0) {
            Bundle extras = new Bundle();
            for (Map.Entry<String, String> entry : message.getData().entrySet()) {
                extras.putString(entry.getKey(), entry.getValue());
            }

            NotificationInfo info = CleverTapAPI.getNotificationInfo(extras); //info will get the payload.

            if (info.fromCleverTap) {
                CleverTapAPI.createNotification(getApplicationContext(), extras);
            } else {
                // not from CleverTap handle yourself or pass to another provider
            }
        }
    } catch (Throwable t) {
       Log.d("MYFCMLIST", "Error parsing FCM message", t);
    }
}

}

希望这可以帮助。如有其他问题,您可以将您的查询写到 support@clevertap.com

于 2019-03-27T10:04:27.930 回答