From 9fcb3ce121cac8ca4a9b243a610011bbe6860abd Mon Sep 17 00:00:00 2001 From: Jeremy Guiselin <jeremy.guiselin@student.ecp.fr> Date: Mon, 23 Jan 2017 12:18:13 +0100 Subject: [PATCH] first bug fixes (prompt notif ios + style bug) --- GoogleService-Info.plist | 10 +++---- config.xml | 9 +++---- google-services.json | 31 ++++++++++++++++++++++ scss/pack.scss | 9 +++++++ scss/prediction.scss | 2 +- www/img/white-chevron.png | Bin 0 -> 15496 bytes www/js/app.js | 15 ++++++++--- www/js/modules/notification/service.js | 5 +++- www/js/modules/purchase/service.js | 20 +------------- www/js/modules/toast/service.js | 8 ++---- www/js/pages/football/controller.js | 35 ++++++++++++++++++------- www/js/pages/tennis/controller.js | 31 +++++++++++++++------- www/partials/prediction.html | 2 +- www/partials/sport-index.html | 3 +++ 14 files changed, 120 insertions(+), 60 deletions(-) create mode 100644 www/img/white-chevron.png diff --git a/GoogleService-Info.plist b/GoogleService-Info.plist index 0294531..13167e0 100644 --- a/GoogleService-Info.plist +++ b/GoogleService-Info.plist @@ -7,9 +7,9 @@ <key>AD_UNIT_ID_FOR_INTERSTITIAL_TEST</key> <string>ca-app-pub-3940256099942544/4411468910</string> <key>CLIENT_ID</key> - <string>1006878207346-dkva1hprctic3027kn62n7d4tjv42au8.apps.googleusercontent.com</string> + <string>1006878207346-9v61fspphkk57q334mq6td4p9i55dipv.apps.googleusercontent.com</string> <key>REVERSED_CLIENT_ID</key> - <string>com.googleusercontent.apps.1006878207346-dkva1hprctic3027kn62n7d4tjv42au8</string> + <string>com.googleusercontent.apps.1006878207346-9v61fspphkk57q334mq6td4p9i55dipv</string> <key>API_KEY</key> <string>AIzaSyBtDoADGTSBPirvlHEeQTz2APlMfwq3aJA</string> <key>GCM_SENDER_ID</key> @@ -17,7 +17,7 @@ <key>PLIST_VERSION</key> <string>1</string> <key>BUNDLE_ID</key> - <string>com.jeremyguiselin.betskills</string> + <string>com.dimago.betskills</string> <key>PROJECT_ID</key> <string>betskills-145919</string> <key>STORAGE_BUCKET</key> @@ -27,13 +27,13 @@ <key>IS_ANALYTICS_ENABLED</key> <false/> <key>IS_APPINVITE_ENABLED</key> - <false/> + <true/> <key>IS_GCM_ENABLED</key> <true/> <key>IS_SIGNIN_ENABLED</key> <true/> <key>GOOGLE_APP_ID</key> - <string>1:1006878207346:ios:2de78a74bfdf1959</string> + <string>1:1006878207346:ios:9d4e0a7669d0f086</string> <key>DATABASE_URL</key> <string>https://betskills-145919.firebaseio.com</string> </dict> diff --git a/config.xml b/config.xml index ebd217a..2f610c9 100644 --- a/config.xml +++ b/config.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8" standalone="yes"?> -<widget id="com.jeremyguiselin.betskills" version="1.0.0" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0"> +<widget id="com.dimago.betskills" version="2.0.0" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0"> <name>Betskills</name> <description> Betskills app to see predictions of football and tennis games. @@ -12,7 +12,8 @@ <preference name="webviewbounce" value="false"/> <preference name="UIWebViewBounce" value="false"/> <preference name="DisallowOverscroll" value="true"/> - <preference name="SplashScreenDelay" value="3000"/> + <preference name="SplashScreenDelay" value="5000"/> + <preference name="ShowSplashScreenSpinner" value="false" /> <preference name="android-minSdkVersion" value="16"/> <preference name="BackupWebStorage" value="none"/> <preference name="SplashScreen" value="screen"/> @@ -39,8 +40,6 @@ <variable name="APP_NAME" value="Betskills"/> </plugin> <platform name="ios"> - <preference name="FadeSplashScreen" value="false"/> - <preference name="FadeSplashScreenDuration" value="1000"/> <preference name="iosPersistentFileLocation" value="Library"/> <splash height="1136" src="resources/ios/splash/Default-568h@2x~iphone.png" width="640"/> <splash height="1334" src="resources/ios/splash/Default-667h.png" width="750"/> @@ -100,4 +99,4 @@ <icon src="resources/android/icon/drawable-xxxhdpi-icon.png" density="xxxhdpi"/> </platform> <icon src="resources/android/icon/drawable-xhdpi-icon.png"/> -</widget> \ No newline at end of file +</widget> diff --git a/google-services.json b/google-services.json index b554f0b..c891abd 100644 --- a/google-services.json +++ b/google-services.json @@ -36,6 +36,37 @@ "status": 2 } } + }, + { + "client_info": { + "mobilesdk_app_id": "1:1006878207346:android:9d4e0a7669d0f086", + "android_client_info": { + "package_name": "com.dimago.betskills" + } + }, + "oauth_client": [ + { + "client_id": "1006878207346-bv3pqbnac3v9rcu4gheef5fgagg03k41.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyAN5KmJEXNd4uKu3TCfhd47bFkYcBvZmRI" + } + ], + "services": { + "analytics_service": { + "status": 1 + }, + "appinvite_service": { + "status": 1, + "other_platform_oauth_client": [] + }, + "ads_service": { + "status": 2 + } + } } ], "configuration_version": "1" diff --git a/scss/pack.scss b/scss/pack.scss index bcae264..c1436ce 100644 --- a/scss/pack.scss +++ b/scss/pack.scss @@ -36,6 +36,15 @@ align-items: center; flex-direction: column; + .whiteChevron { + position: absolute; + right: 0; + + img { + height: 30px; + } + } + .title { color: $whiteColor; font-family: "OspDin"; diff --git a/scss/prediction.scss b/scss/prediction.scss index 085b00a..52011b3 100644 --- a/scss/prediction.scss +++ b/scss/prediction.scss @@ -71,8 +71,8 @@ text-align: center; img { - width: 70%; height: auto; + max-height: 65px; } .name { diff --git a/www/img/white-chevron.png b/www/img/white-chevron.png new file mode 100644 index 0000000000000000000000000000000000000000..82fc1cee2b9a8670c4351f7dea4ab10447c79fac GIT binary patch literal 15496 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%0AKF^vX> zM(F(DZt;$UFUpM{=H7MIVF!;1sWGvH34EBjNHoCrW}idNz84?#`Rt{RbKkysRnJ<m zqbzZ|1|w53OUok5sAFZC0ta90yYa*S*vFr-Ofma18($PT8w)6GXlw`ow@$fT41R66 zarE?~A8&r`zFES~baB}oF=dAbLX7h@L2I4wavXWyeNSrk-_wPEw&$7E{&b5M4z3Bj zvG?bvm1i6p7#hE_wk-PEyY@nd!=J-{eK$_k?|B^Bo0EAq_fLsW9cZw#Sg;s0Q{~CH z5Hu`os$cM2{!_e+bZzG6*|zn~`km4HRo2`q`zP{F#i8NAHzucx-=2l(=n4GaP@kUj z@WW}@{i}b3UDNpQYWOm|_2R?#6F-A?{sb}EWyG$E?K-O_Ab;Rr*NT@%3vJAzbEU5r zS7?3ND%ke#>#^5SeGH6D-JBe*-GQ@Kgg0`y&6laR|D(4!y)^5?tsCFt`yIaQx4OGO zS6JafN5l5>QkhF~->3^DKKKycR1+q1e{;O(?lpe`*8I9#XydMM>*)POEF3yI4?IDu zQeQ_a%#-^2Q{YFVh26@+&iKy1wXrP=57(Ey2W`0W<){d{;v$`^)a}sHGQT&<&a`j8 z{PEkHuWU__ZNGp0OZlT8CXE@6p~0X%V+@VcSRbvtc>Ku6zlAmu?qAn`KgPDtystlN zXZklc(3}cr%2L4b(LakigFfdCE53c5r}5)xp-ru;Qm`;&gP$#@%Z492EcR*lnID_@ z_jRMj2kS>aZp^DnS<eFA-gTgjNzmk7_v8E{A3s_AQ|Z%*f8Xu&FIXmC^mwiGq=+sC zMkY;`KiAVWZ!PGEV^ylDDS7jkweZhXi+SS57eBi3>Gg-%%i|@F@9%wl{PE$-^*f$E zx~AmN;Go91P$Ss<%B8IiEK82F9w>hNqshX~yf6Lu#xMD&>fF!#<SzUZBeTBa@m0YV zzUMWdxwmS@g)4qfXJ}Z%BsfV<a;vR!-{Jf-c7N_IKHNTczSQxD`x&aeWc)iGe=xhg zw@_x^J?Y~Q-=|g=%kUp5ta$a=y713?3%>oizpg*3sBKyB{pftqwk-!pAdPNz#J}S+ dNBP5l#;V(08~a@%6G8iZJzf1=);T3K0RZjRRKNfL literal 0 HcmV?d00001 diff --git a/www/js/app.js b/www/js/app.js index 3395d74..274b9ca 100644 --- a/www/js/app.js +++ b/www/js/app.js @@ -24,7 +24,10 @@ "unlock": "Unlock", "predictions": "Predictions", "games": "Game(s)", - "currency": "£" + "currency": "£", + "purchase_payment_error": "An error occured during the payment, please try again.", + "purchase_internal_error": "An internal error occured, please contact the team to solve this issue.", + "purchase_ok": "Congratulations, your payment has been successfully made. You have now access to the selected elements." }, "fr": { "info_title_1": "Comment resté connecté ?", @@ -48,14 +51,17 @@ "unlock": "Dévérouiller", "predictions": "Prédictions", "games": "Match(s)", - "currency": "€" + "currency": "€", + "purchase_payment_error": "Une erreur est survenue lors du paiement, veuillez réessayer.", + "purchase_internal_error": "Une erreur interne est survenue, veuillez contacter l'équipe Betskills pour résoudre le problème.", + "purchase_ok": "Félicitations, votre transaction a été réalisée avec succès. Vous avez désormais accès aux éléments que vous venez d'acheter." } }; /** * @ngInject */ - function setupRun($ionicPlatform, NotificationService) { + function setupRun($ionicPlatform, NotificationService, constantConfig) { $ionicPlatform.ready(function () { // Hide the accessory bar by default (remove this to show the accessory bar above the keyboard @@ -71,6 +77,9 @@ ionic.Platform.ready(function () { NotificationService.registerDevice(); + ionic.Platform.ready(function () { + constantConfig.uuid = window.cordova ? ionic.Platform.device().uuid : '7f4a6a40e5c87157'; + }); }); } diff --git a/www/js/modules/notification/service.js b/www/js/modules/notification/service.js index ff61f3b..3f3b94c 100644 --- a/www/js/modules/notification/service.js +++ b/www/js/modules/notification/service.js @@ -16,7 +16,7 @@ registerDevice: function () { var locale = window.navigator.language.split('-')[0]; - if (locale !== 'fr' && locale !== 'en' ) { + if (locale !== 'fr') { locale = 'en'; } @@ -26,6 +26,9 @@ var device = ionic.Platform.device(); deviceData = device; var tokenAlreadyCreated = false; + if (ionic.Platform.isIOS()) { + window.FirebasePlugin.grantPermission(); + } window.FirebasePlugin.getToken(function (token) { deviceData = Object.assign(device, {'locale': locale, 'token': token}); tokenAlreadyCreated = true; diff --git a/www/js/modules/purchase/service.js b/www/js/modules/purchase/service.js index 9900cbf..5fee12d 100644 --- a/www/js/modules/purchase/service.js +++ b/www/js/modules/purchase/service.js @@ -10,27 +10,9 @@ * * @ngInject */ - function PurchaseService($http, $state, ToastService, constantConfig, purchaseConfig) { + function PurchaseService($http, $state, ToastService, constantConfig) { return { - getProducts: function (sport) { - if (window.cordova) { - var products = []; - inAppPurchase - .getProducts(purchaseConfig[sport]) - .then(function (storeProducts) { - products = storeProducts; - }) - .catch(function (err) { - ToastService.show(err, 'long', 'bottom'); - }); - - return products; - } else { - return purchaseConfig['mock'][sport]; - } - }, - buyContent : function (uuid, purchaseId, leagues) { var self = this; var transactionData = {}; diff --git a/www/js/modules/toast/service.js b/www/js/modules/toast/service.js index 52b57cf..0f5f626 100644 --- a/www/js/modules/toast/service.js +++ b/www/js/modules/toast/service.js @@ -19,13 +19,9 @@ show : function (message, duration, location) { if (window.cordova) { - $cordovaToast.show($translate(message), duration, location).then(function(success) { - // success - }, function (error) { - console.log(error); - }); + $cordovaToast.show(message, duration, location); } else { - console.log($translate(message)) + console.log($translate(message)); } } }; diff --git a/www/js/pages/football/controller.js b/www/js/pages/football/controller.js index 1d24d13..a050343 100644 --- a/www/js/pages/football/controller.js +++ b/www/js/pages/football/controller.js @@ -22,6 +22,7 @@ $ionicLoading, PurchaseService, constantConfig, + purchaseConfig, ToastService ) { @@ -30,9 +31,7 @@ **/ var deregistrationCallbackList = []; - var products = PurchaseService.getProducts('football'); var self = this; - var uuid = window.cordova ? ionic.Platform.device().uuid : '7f4a6a40e5c87157'; /** End Controller variables @@ -56,6 +55,10 @@ Scope functions **/ + $scope.isUndefined = function (value) { + return typeof value === 'undefined' || value === null; + }; + $scope.isBought = function (league) { return league.device_status === 'unlock'; }; @@ -76,18 +79,18 @@ if ($scope.selected.indexOf(league) !== -1) { $scope.selected.splice($scope.selected.indexOf(league), 1); $scope.predictionsNumber -= league.predictions_number; - $scope.price = self.findPrice($scope.selected.length); } else { $scope.selected.push(league); $scope.predictionsNumber += league.predictions_number; } + $scope.price = self.findPrice($scope.selected.length); } }; $scope.buyContent = function () { var pack = self.findPack($scope.selected.length); - PurchaseService.buyContent(uuid, pack, $scope.selected); + PurchaseService.buyContent(self.uuid, pack, $scope.selected); }; $scope.getPredictionClass = function (prediction, value) { @@ -179,7 +182,7 @@ if (packToGet !== '') { var price = ''; - products.forEach(function (el) { + this.products.forEach(function (el) { if (el.productId === packToGet) { price = el.price; } @@ -236,18 +239,23 @@ deregistrationCallbackList = null; }); - - $scope.$on("$ionicView.beforeEnter", function(event, data){ + ionic.Platform.ready(function () { + self.uuid = window.cordova ? ionic.Platform.device().uuid : '7f4a6a40e5c87157'; $ionicLoading.show({ template: '<ion-spinner icon="ripple" class="spinner-assertive"></ion-spinner>', animation: 'fade-in', - showBackdrop: true, + showBackdrop: true }); var freePredictionsPromise = $http.get(constantConfig.apiUrl + 'predictions/football/free'); - var leaguesPromise = $http.get(constantConfig.apiUrl + uuid + '/leagues/football'); + var leaguesPromise = $http.get(constantConfig.apiUrl + self.uuid + '/leagues/football'); + var promises = [freePredictionsPromise, leaguesPromise]; + if (window.cordova) { + var storePromise = inAppPurchase.getProducts(purchaseConfig['tennis']); + promises.push(storePromise); + } - $q.all([freePredictionsPromise, leaguesPromise]).then(function (data) { + $q.all(promises).then(function (data) { var freePredictions = []; data[0]['data'].forEach(function (prediction) { self.parseScore(prediction); @@ -255,11 +263,18 @@ }); $scope.freePredictions = freePredictions; $scope.leagues = data[1]['data']; + if (window.cordova) { + self.products = data[2]; + } else { + self.products = []; + } }).finally(function () { $ionicLoading.hide(); }); }); + + /** End Scope event **/ diff --git a/www/js/pages/tennis/controller.js b/www/js/pages/tennis/controller.js index ab9c6b4..4f59b4c 100644 --- a/www/js/pages/tennis/controller.js +++ b/www/js/pages/tennis/controller.js @@ -7,10 +7,10 @@ /** * @ngdoc controller - * @name ChoiceController + * @name Tennis Controller * * @description - * Controller for the choice of sport page. + * Controller for the tennis index page. * * @ngInject */ @@ -21,7 +21,8 @@ $q, $ionicLoading, PurchaseService, - constantConfig + constantConfig, + purchaseConfig ) { /** @@ -29,9 +30,7 @@ **/ var deregistrationCallbackList = []; - var products = PurchaseService.getProducts('tennis'); var self = this; - var uuid = window.cordova ? ionic.Platform.device().uuid : '7f4a6a40e5c87157'; /** End Controller variables @@ -55,6 +54,10 @@ Scope functions **/ + $scope.isUndefined = function (value) { + return typeof value === 'undefined' || value === null; + }; + $scope.isBought = function (league) { return league.device_status === 'unlock'; }; @@ -107,7 +110,7 @@ } if (selectedPack !== '') { - PurchaseService.buyContent(uuid, selectedPack, $scope.selected); + PurchaseService.buyContent(constantConfig.uuid, selectedPack, $scope.selected); } }; @@ -176,7 +179,7 @@ if (packToGet !== '') { var price = ''; - products.forEach(function (el) { + self.products.forEach(function (el) { if (el.productId === packToGet) { price = el.price; } @@ -216,9 +219,14 @@ }); var freePredictionsPromise = $http.get(constantConfig.apiUrl + 'predictions/tennis/free'); - var leaguesPromise = $http.get(constantConfig.apiUrl + uuid + '/leagues/tennis'); + var leaguesPromise = $http.get(constantConfig.apiUrl + constantConfig.uuid + '/leagues/tennis'); + var promises = [freePredictionsPromise, leaguesPromise]; + if (window.cordova) { + var storePromise = inAppPurchase.getProducts(purchaseConfig['tennis']); + promises.push(storePromise); + } - $q.all([freePredictionsPromise, leaguesPromise]).then(function (data) { + $q.all(promises).then(function (data) { var freePredictions = []; data[0]['data'].forEach(function (prediction) { self.parseScore(prediction); @@ -226,6 +234,11 @@ }); $scope.freePredictions = freePredictions; $scope.leagues = data[1]['data']; + if (window.cordova) { + self.products = data[2]; + } else { + self.products = []; + } }).finally(function () { $ionicLoading.hide(); }); diff --git a/www/partials/prediction.html b/www/partials/prediction.html index dec563a..057dd9a 100644 --- a/www/partials/prediction.html +++ b/www/partials/prediction.html @@ -36,7 +36,7 @@ <div class="name">{{freePrediction.second_team.name}}</div> </div> </div> -<div class="score-container" ng-hide="freePrediction.score === null"> +<div class="score-container" ng-hide="isUndefined(freePrediction.score)"> <div class="tick"></div> <div ng-if="freePrediction.league.sport === 'football'" ng-include="'partials/score/football.html'" class="score football-score"></div> <div ng-if="freePrediction.league.sport === 'tennis'" ng-include="'partials/score/tennis.html'" class="score tennis-score"></div> diff --git a/www/partials/sport-index.html b/www/partials/sport-index.html index f7cec7e..adbe9f9 100644 --- a/www/partials/sport-index.html +++ b/www/partials/sport-index.html @@ -19,6 +19,9 @@ - {{parseDate(league.max_date)}} </div> + <div class="whiteChevron" ng-class="!isBought(league) ? 'locked' : ''"> + <img src="img/white-chevron.png" /> + </div> </div> </a> </ion-item> -- GitLab