有关保持服务工作者推送订阅同步的问题

时间:2016-01-04 23:53:15

标签: google-chrome firefox service-worker web-push push-api

我读过推送订阅可能会在浏览器和推送服务之间失去同步。

我见过两种补救方法,看起来都是非标准的:

  1. ServiceWorkerGlobalScope.onpushsubscriptionchange
  2. GCM发送回复,mentioned herespelled out here
    • 可以理解为非标准
  3. 我认为任何应用程序都应该处理这两个点,在这些点上可以识别订阅不同步(以及任何/所有)。

    问题:

    1. 一般情况下,是否只有两个区域可以让应用程序知道订阅不同步的情况? (1.服务工作人员事件2.推送服务响应)似乎合理,寻找确认
    2. ServiceWorkerGlobalScope.onpushsubscriptionchange事件(或某些等效事件)是否会进入authoritative standard
    3. 为了代替服务工作者事件标准,为什么不保持预期的订阅端点(在客户端状态),并且在您查询PushManager以进行订阅时,检查它是否不同步(不同于预期)?

1 个答案:

答案 0 :(得分:4)

pushsubscriptionchange事件被记录为Push API specification的一部分。这应被视为具有权威性,它提到onpushsubscriptionchange ServiceWorkerGlobalScopepushsubscriptionchange的一部分。

在撰写本文时,我不知道是否在支持Push API的所有浏览器中都触发了void gCRSF_gibbs(double *z, double **n_k, double *SampleDex, double *r, double *a, double *p, int *Ksize, int *WordNum) { int i, j, k; double mass; double *prob_cumsum; double cum_sum, probrnd; prob_cumsum = (double *) calloc(Ksize[0],sizeof(double)); mass = r[0]*pow(p[0],-a[0]); for (i=0;i<WordNum[0];i++){ j = (int) SampleDex[i] -1; k = (int) z[j] -1; if(z[j]>0){ (*n_k)[k]--; } for (cum_sum=0, k=0; k<Ksize[0]; k++) { cum_sum += (*n_k)[k]-a[0]; prob_cumsum[k] = cum_sum; } if ( ((double) rand() / RAND_MAX * (cum_sum + mass) < cum_sum)){ probrnd = (double)rand()/(double)RAND_MAX*cum_sum; k = BinarySearch(probrnd, prob_cumsum, Ksize[0]); } else{ for (k=0; k<Ksize[0]; k++){ if ((int) (*n_k)[k]==0){ break; } } if (k==Ksize[0]){ Ksize[0]++; realloc(*n_k,sizeof(**n_k)*Ksize[0]); (*n_k)[Ksize[0]-1]=0; prob_cumsum = realloc(prob_cumsum,sizeof(*prob_cumsum)*Ksize[0]); } } z[j] = k+1; (*n_k)[k]++; } free(prob_cumsum);} 事件,但我相信一般的想法是它是用户的(最终)解决方案描述