【问题标题】:Multiple callback for one notification Pushsharp一个通知的多个回调 Pushsharp
【发布时间】:2015-09-04 07:02:25
【问题描述】:

为了在 pushsharp 中发送批量通知,我正在使用 foreach 循环。 我收到了多次回电以获得相同的通知。

假设我已向 3 台设备发送通知,我会收到 10 次回调。 它为所有 3 台设备重复回调通知。

foreach (var recipient in recipients)
        {
            //Wire up the events for all the services that the broker registers
            push.OnChannelCreated += push_OnChannelCreated;
            push.OnChannelDestroyed += push_OnChannelDestroyed;
            push.OnChannelException += push_OnChannelException;
            push.OnDeviceSubscriptionChanged += push_OnDeviceSubscriptionChanged;
            push.OnDeviceSubscriptionExpired += push_OnDeviceSubscriptionExpired;
            push.OnNotificationFailed += push_OnNotificationFailed;
            push.OnNotificationRequeue += push_OnNotificationRequeue;
            push.OnNotificationSent += push_OnNotificationSent;
            push.OnServiceException += push_OnServiceException;

            var gcmMessage = new GCMMessage 
                                 {
                                     message = TemplateUtility.GetNotificationBodyGcm(TemplateName, recipient),
                                     badge=7,
                                     sound="sound.caf"              
                                 };
            string jsonGcmMessage = Newtonsoft.Json.JsonConvert.SerializeObject(gcmMessage);

            push.RegisterGcmService(new GcmPushChannelSettings(ConfigurationManager.AppSettings["GCM_Development_ServerKey"].ToString()));
            //push.RegisterGcmService(new GcmPushChannelSettings(ConfigurationManager.AppSettings["GCM_Production_ServerKey"].ToString()));                

            push.QueueNotification(new GcmNotification().ForDeviceRegistrationId(recipient.DeviceRegistrationToken)
                                  //.WithJson("{\"message\":\"Hi PushNoti\",\"badge\":7,\"sound\":\"sound.caf\"}"));
                                  .WithJson(jsonGcmMessage));


            //Stop and wait for the queues to drains before it dispose 
            push.StopAllServices(waitForQueuesToFinish: true);
        }

【问题讨论】:

    标签: c# pushsharp


    【解决方案1】:

    在 C# 中,多次向委托添加相同的回调会导致调用该回调的次数与添加的次数相同。您可能想要的是将不依赖于recipient 的代码部分移出循环。这样,您将只注册每个回调方法一次,而不管recipients 的计数。

    push.OnChannelCreated += push_OnChannelCreated;
    push.OnChannelDestroyed += push_OnChannelDestroyed;
    push.OnChannelException += push_OnChannelException;
    push.OnDeviceSubscriptionChanged += push_OnDeviceSubscriptionChanged;
    push.OnDeviceSubscriptionExpired += push_OnDeviceSubscriptionExpired;
    push.OnNotificationFailed += push_OnNotificationFailed;
    push.OnNotificationRequeue += push_OnNotificationRequeue;
    push.OnNotificationSent += push_OnNotificationSent;
    push.OnServiceException += push_OnServiceException;
    
    // not sure about this one
    push.RegisterGcmService(new GcmPushChannelSettings(ConfigurationManager.AppSettings["GCM_Development_ServerKey"].ToString()));
    
    foreach(var recipient in recipients)
    {
        // do other things here
    }
    

    【讨论】:

      猜你喜欢
      • 2013-07-06
      • 1970-01-01
      • 1970-01-01
      • 2014-06-09
      • 1970-01-01
      • 1970-01-01
      • 2016-11-02
      • 1970-01-01
      • 2013-09-04
      相关资源
      最近更新 更多