2016-11-19 5 views
0

私は現在FireFoxで動作していますが、Chromeでは動作しません。私がAndroidでChromeを試しただけでは、現在のところ、デスクトップ上のChromeにアクセスできない(CentOS 7はサポートしていないため)、デバッグの問題は難しいです。ChromeとサービスワーカープッシュAPI

これは私がプッシュ通知がサポートされているかどうかを確認するために使用するものです:

function checkPushSupport() { 
    "use strict"; 
    if (!("serviceWorker" in navigator)) { 
     return false; 
    } 
    if (!("showNotification" in ServiceWorkerRegistration.prototype)) { 
     return false; 
    } 
    if (Notification.permission === "denied") { 
     return false; 
    } 
    if (!("PushManager" in window)) { 
     return false; 
    } 
    return true; 
} 

そのテストでは、AndroidのChromeは、それをサポートしています。

これは、ブラウザがすでに購読しているかどうかをテストする方法です。現在、ある時点でIndexDBを使用するように変更されるajax呼び出しを行いますが、一度に1つIndexDBを把握する必要があります。

function checkSubscribe(endpoint) { 
    "use strict"; 
    var csrf; 
    var mid; 
    var n; 
    var postdata; 
    var endhash; 
    csrf = $("#container").attr("data-csrf"); 
    mid = $("#pushnotify").attr("data-mid"); 
    postdata = {csrf: csrf, mid: mid, endpoint: endpoint}; 
    $.ajax({ 
     type: "POST", 
     async: false, 
     url: "/ajax/checksubscribe.ajax.php", 
     data: postdata, 
     dataType: "json", 
     success: function (json) { 
      $("#container").attr("data-csrf", json.csrf); 
      endhash = json.endhash; 
      if (endhash.length === 40) { 
       $("#notify").attr("data-hash", endhash); 
      } 
      n = parseInt(json.result); 
      if (n > 0) { 
       swapButton(); 
      } 
      $("#notify").removeAttr("disabled"); 
      // attach action to button 
      $("#notify").bind("click", function() { 
       sendSubscribe(); 
      }); 
     } 
    }); 
} 

この機能はFireFoxで正確に機能します。クライアントが既にWebサイトからプッシュするために購読していることを検出すると、Webサイト内でボタンを購読できるようになり(ユーザーが通知を希望するもの)、エンドポイントのハッシュ、そのハッシュを持つボタンにdata-hash属性を作成します彼らは、機能を購読したり購読を取り消したいときには、ajaxで使用されます。ページ上の機能にすでに登録されている場合は、購読ボタンがubsubsribeボタンに変わります。 Chromeで機能が失敗するとは思わないが、プッシュ通知を購読しても機能していないようだから、プッシュサブスクリプションが正しく検出されたかどうかはわからない。

function addEndpoint(endpoint) { 
    "use strict"; 
    var csrf; 
    var postdata; 
    var endhash; 
    csrf = $("#container").attr("data-csrf"); 
    postdata = {csrf: csrf, endpoint: endpoint}; 
    $.ajax({ 
     type: "POST", 
     async: false, 
     url: "/ajax/notification.ajax.php", 
     data: postdata, 
     dataType: "json", 
     success: function (json) { 
      $("#container").attr("data-csrf", json.csrf); 
      endhash = json.endhash; 
      if (endhash.length === 40) { 
       $("#notify").attr("data-hash", endhash); 
      } 
     } 
    }); 
} 

function firstSubscription() { 
    "use strict"; 
    navigator.serviceWorker.ready.then(function (registration) { 
     return registration.pushManager.subscribe({userVisibleOnly: true}); 
    }).then(function (subscription) { 
     $("#notify").off("click"); 
     addEndpoint(subscription.endpoint); 
     sendSubscribe(); 
     $("#notify").bind("click", function() { 
      sendSubscribe(); 
     }); 
    }); 
} 

Android版Chromeは、彼らがサブスクライブしたい場合は、ユーザーを要求しない、とAJAX呼び出しん:

この私が思うには、どこに問題がある、それはユーザが実際にサイトに加入してプッシュしているかです購読したいときにエンドポイントを送信することはありません。もちろん、エンドポイントが作成されていない場合、ユーザーが決して尋ねられないなら、私はFireFoxではうまく動作するがChromeではうまくいかない理由を理解しようとしています。

すべてがHTTPSです。

私はGoogleのドキュメントを見てみましたが、すべてのチュートリアルではGoogleの開発者ツールが使用されていると思われるようですが、CentOSでは使用できません。

答えて

0

私が行方不明になった唯一のものは、manifest.jsonで定義されたgcm_sender_idだった - (少なくとも、Android向け)Chromeは、それがプッシュAPI仕様のない一部であっても、それを必要としているようです。

関連する問題