【问题标题】:Cannot read payload of push notification sent from clevertap dashboard无法读取从clevertap 仪表板发送的推送通知的有效负载
【发布时间】:2019-08-16 10:30:02
【问题描述】:

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

【问题讨论】:

    标签: react-native clevertap


    【解决方案1】:

    为了处理 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/

    【讨论】:

    • 关于在an​​droid中处理payload有什么想法吗?
    【解决方案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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-26
      • 2016-07-19
      • 2015-04-10
      • 2018-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多