2017-08-03 24 views
0

私はコードベースのfirebase-pluginを使用しています。プッシュ通知のためのiOSの要件の1つは、アクセス許可を与えることですが、問題はcordova-firebase-プラグインを使用することです。grantPermissionには成功/エラーのための適切なコールバック - したがって、grantPermissionが呼び出されると、それはユーザに許可要求がポップされますが、バックグラウンドではアプリケーションはロードを続けます。cordova angularjs強制的にユーザの許可を待つアプリ

プラグイン許可コールなしのコールバックの基本的な機能である:

window.FirebasePlugin.grantPermission(); 

私はアプリの読み込みを一時停止し、ユーザーだけが/パーミッション要求を拒否し許可された後も継続する必要があります。しかし動作していないアプリを一時停止する

function iosPush() { 
    var q = $q.defer() ; 
    if (/(iPad|iPhone|iPod)/i.test(navigator.userAgent)) { 
     window.FirebasePlugin.grantPermission(function(status) { 
     q.resolve(status) ; 
     },function(err) {errMgmt("ctrl/init",35,"iOS Push ask Permission error: "+err) });) ; 
    } else { 
     q.resolve("Android") ; 
    } 
    return q.promise ; 
    } 

    iosPush().then(function(status) { 
     return getLocationAuth() 
    }).then(function(status) { 
     ...do other stuff... 
    }) ; 

私の試み:以下は私のアプリのアプリのinitセクションでそうする私の試みです。誰かが、iOSの許可を要求する際に、どのようにしてアプリケーションの一時停止を達成することができますか?

最後には、どんなユーザが選択し、許可または許可を拒否し、statusは、私は同じ問題を持っていた、常にnull

答えて

0

ではありません。

私はhttps://github.com/dpa99c/cordova-diagnostic-pluginを使用して許可ステータスを確認しました。ポップアップをボタンでポップアップします。ユーザーが権限ダイアログを閉じると、彼はボタンをクリックしてポップアップを閉じる必要があります。次に、許可ステータスを再度確認します。それは解決策ではなく、単なる回避策です。少し醜いが動作します。

あなた自身で解決策を見つけましたか?

0

私は...私の元の質問で近かった次にそれを変更する必要がありました:grantPermissionの成功など、二重hasPermission行為は/コールバックに失敗機能で

function iosPush() { 
    var q = $q.defer() ; 
    if (/(iPad|iPhone|iPod)/i.test(navigator.userAgent)) { // 1st hasPerm 
     window.FirebasePlugin.hasPermission(function(data){ 
     if (data.isEnabled == false) { 
      window.FirebasePlugin.grantPermission(function(status) { // if no, grant 
      // Permission Granted or notGranted...need to check again. 
      window.FirebasePlugin.hasPermission(function(data){ 
      // 2nd hasPerm, if changed, set internal db 
       var oldPushEnabled = getDB('dev_pushEnabled') ; 
       if (data.isEnabled == true) { 
       var pushIsEnabled = 1 ; 
       } else { 
       var pushIsEnabled = 0 ; 
       } 
       if (oldPushEnabled != pushIsEnabled) { 
       setDB('dev_pushEnabled',pushIsEnabled) ; // set local app db value 
       q.resolve("PushStatusNotChanged") ; // push enable status has changed 
       } else { 
       q.resolve("PushStatusChanged") ; // push enable status has not changed 
       } 
      }) ; // close 1st hasPermission 
      },function(error) { 
      // Permission NOT GRANTED 
      q.resolve("PushNotGranted") ; 
      }) ; // grantPermission 
     } else { 
      q.resolve("PushGranted") ; // authorization was previously granted 
     } 
     }) ; // close 2nd hasPermission 
    } else { 
     q.resolve("Android") ; 
    } 
    return q.promise ; 
    } 

    iosPush().then(function(status) { 
    return getLocationAuth() 
    }).then(function(status) { 
    ...do other stuff... 
    }) ; 

。 kludgeのビットが、それは魅力のように動作します。

関連する問題