OneSignal不调用didReceiveRemoteNotification

时间:2016-11-15 00:27:20

标签: ios push-notification apple-push-notifications onesignal

我们从UA迁移到One Signal。我们正在从像

这样的云代码发送推送
var pushInfo = {
      "app_id" : "xxxxxx",          
      "data": {
          "objectId": objectId,
          "placeId": placeId,
      },
      "included_segments": ["All Users"],
      "contents": {"en": message}
};
var headers = {
    "Content-Type": "application/json; charset=utf-8",
    "Authorization": "Basic XXXXX"
};

var options = {
 host: "onesignal.com",
 port: 443,
 path: "/api/v1/notifications",
 method: "POST",
 headers: headers,
};

var https = require('https');
var req = https.request(options, function(res) {  
res.on('data', function(data) {
  console.log("Response:");
  console.log(JSON.parse(data));
});
});

req.on('error', function(e) {
console.log("ERROR:");
console.log(e);
 });  
req.write(JSON.stringify(pushInfo));
req.end();

在我的AppDelegate.m中我做了

[OneSignal initWithLaunchOptions:launchOptions appId:@"XXXXX"];

现在早些时候收到通知并且用户点击它时,它就用来调用

-(void) application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler

Q值。现在没有被调用。如何使用OneSignal处理它。 问:我需要做什么来处理无声通知(没有可见的徽章/横幅等)

3 个答案:

答案 0 :(得分:5)

我假设您正在iOS10设备上测试/运行您的应用

我查看了OneSignal SDK代码,我认为在设备上检测到iOS10时,SDK会自动使用新的UserNotifications Framework(在iOS10中添加)。

在这种情况下,不会调用上面提到的AppDelegate方法,而是调用UNUserNotificationCenterDelegate中的方法,SDK会捕获这些方法以记录点击次数/视图。

要解决此问题,请创建一个实现OSUserNotificationCenterDelegate的新类,并使用[OneSignal setNotificationCenterDelegate:yourCustomNotificationCenterDelegateInstance]

将其实例提供给OneSignal

请注意,当静默推送通知(content-available:1)到达时仍会调用application:didReceiveRemoteNotification:fetchCompletionHandler:,但如果使用UNUserNotificationCenterDelegate,则在用户点按通知时不会调用application:didReceiveRemoteNotification

此外,iOS 10.0.X上存在一个问题,其中application:didReceiveRemoteNotification:fetchCompletionHandler:被调用而不是{{1}}请参阅:https://forums.developer.apple.com/thread/54332,但我怀疑是否属于这种情况。< / p>

答案 1 :(得分:1)

一个信号通知集成

使用以下代码块处理PushNotification消息内容

在AppDelegate的ApplicationDidFinishLaunch选项方法中放入以下代码

beforeAll()

答案 2 :(得分:0)

application:didReceiveRemoteNotification:fetchCompletionHandler:是背景静默content-available通知的正确选择器。确保使用latest 2.2.2 OneSignal SDK,因为有一些修复可以保持与旧的AppDelegate选择器的兼容性。

您可能希望将UNNotificationServiceExtensionmutable-content一起用于iOS 10设备,因为当应用程序被刷掉后,这仍然有效。