首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在月亮APNS中,在GetFeedBack方法中获取有效令牌背后的逻辑是什么?

在月亮APNS中,在GetFeedBack方法中获取有效令牌背后的逻辑是什么?
EN

Stack Overflow用户
提问于 2012-05-08 16:30:24
回答 1查看 1.3K关注 0票数 0

我一直在尝试使用MoonAPNS库为我的苹果应用程序找出有效令牌的列表。使用GetFeedBack()时,收到的令牌的计数在几分钟后变化很大。在第一次尝试中,它大约是8000。然后在第三次尝试中是0,它是1&再一次是0。

我是凭有效的生产证书使用的。已成功将使用相同证书的通知推送到采样设备。

我不理解代码的逻辑&它是基于什么提供接收到的令牌的。从月亮APNS下载的代码如下所示。

代码语言:javascript
复制
public List<Feedback> GetFeedBack()
{
  try
  {
    var feedbacks = new List<Feedback>();
    Logger.Info("Connecting to feedback service.");

    if (!_conected)
        Connect(_feedbackHost, FeedbackPort, _certificates);

    if (_conected)
    {
        //Set up
        byte[] buffer = new byte[38];
        int recd = 0;
        DateTime minTimestamp = DateTime.Now.AddYears(-1);

        //Get the first feedback
        recd = _apnsStream.Read(buffer, 0, buffer.Length);
        Logger.Info("Feedback response received.");

        if (recd == 0)
            Logger.Info("Feedback response is empty.");

        //Continue while we have results and are not disposing
        while (recd > 0)
        {
            Logger.Info("processing feedback response");
            var fb = new Feedback();

            //Get our seconds since 1970 ?
            byte[] bSeconds = new byte[4];
            byte[] bDeviceToken = new byte[32];

            Array.Copy(buffer, 0, bSeconds, 0, 4);

            //Check endianness
            if (BitConverter.IsLittleEndian)
                Array.Reverse(bSeconds);

            int tSeconds = BitConverter.ToInt32(bSeconds, 0);

            //Add seconds since 1970 to that date, in UTC and then get it locally
            fb.Timestamp = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).AddSeconds(tSeconds).ToLocalTime();


            //Now copy out the device token
            Array.Copy(buffer, 6, bDeviceToken, 0, 32);

            fb.DeviceToken = BitConverter.ToString(bDeviceToken).Replace("-", "").ToLower().Trim();

            //Make sure we have a good feedback tuple
            if (fb.DeviceToken.Length == 64 && fb.Timestamp > minTimestamp)
            {
                //Raise event
                //this.Feedback(this, fb);
                feedbacks.Add(fb);
            }

            //Clear our array to reuse it
            Array.Clear(buffer, 0, buffer.Length);

            //Read the next feedback
            recd = _apnsStream.Read(buffer, 0, buffer.Length);
        }
        //clode the connection here !
        Disconnect();
        if (feedbacks.Count > 0)
            Logger.Info("Total {0} feedbacks received.", feedbacks.Count);
        return feedbacks;
    }
  }
  catch (Exception ex)
  {
    Logger.Error("Error occurred on receiving feed back. - " + ex.Message);
    return null;
  }
  return null;
}

}

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-08 18:05:10

就我个人而言,我没有使用过月球APNS,但是APNS Feedback service的工作方式是,每次您调用它时,它都会返回自您上次调用feedback服务以来的非活动令牌。这就解释了你在这里看到的模式。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10495172

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档