6

サービス ワーカーと GAE は初めてです。サービス ワーカーを登録できますが、PushManager をサブスクライブできず、サブスクリプション null エラーが発生します。以下のコードを参照してください。

serviceWorkerRegistration.pushManager.getSubscription()  
  .then(function(subscription) {  
    var pushButton = document.querySelector('.js-push-button');  
    pushButton.disabled = false;

    if (!subscription) {  
      console.log('subscription error '); 
      return;  
    }
    console.log('subscriptioned ');

    // Keep your server in sync with the latest subscriptionId
    sendSubscriptionToServer(subscription);

    // Set your UI to show they have subscribed for  
    // push messages  
    pushButton.textContent = 'Disable Push Messages';  
    isPushEnabled = true;  
  })  
  .catch(function(err) {  
    console.warn('Error during getSubscription()', err);  
  });
});

上記のコードでは、内部で「サブスクリプション」値を「null」として取得するため、制御は if ブロックに来て、単に戻ります。

4

1 に答える 1

7

最初に、ユーザーがサブスクライブしていない場合、 によって返される promise は にgetSubscription解決されnullます。ユーザーをサブスクライブするには、電話をかける必要がありregistration.pushManager.subscribeます (その後、ユーザーが次にサイトにアクセスしたときに、getSubscriptionnull 以外のサブスクリプションで解決されます)。

ServiceWorker Cookbookには多くの例があります。

ここでの簡単な例:

// Use the PushManager to get the user's subscription to the push service.
serviceWorkerRegistration.pushManager.getSubscription()
.then(function(subscription) {
  // If a subscription was found, return it.
  if (subscription) {
    return subscription;
  }

  // Otherwise, subscribe the user (userVisibleOnly allows to specify
  // that we don't plan to send notifications that don't have a
  // visible effect for the user).
  return serviceWorkerRegistration.pushManager.subscribe({
    userVisibleOnly: true
  });
})
.then(function(subscription) {
  // Here you can use the subscription.
于 2016-02-11T10:20:56.917 に答える