在我的 react-native 应用程序中,我使用clevertap 发送推送通知。我在移动设备上收到通知,但无法读取其有效负载。
2 回答
为了处理 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/上发帖
您可以使用 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