65.9K
CodeProject 正在变化。 阅读更多。
Home

使用 Ionic 1 和 ngCordova 构建多语言手电筒移动应用

starIconstarIconstarIconstarIconstarIcon

5.00/5 (2投票s)

2016 年 12 月 3 日

CPOL

8分钟阅读

viewsIcon

15236

在本教程中,我们将学习如何使用 Ionic 1 和 ngCordova 构建一个 Android 手电筒应用程序,以及如何使用 angular-translate 为我们的应用程序添加多语言支持。

引言

在本教程中,我们将使用混合移动开发框架 Ionic 1 结合 ngCordova 和多个 Cordova 插件来构建一个 Android 手电筒移动应用程序(如果您使用 MAC 进行开发,也可以构建 iOS 版本)。

您可以在Android 应用商店下载此应用。

您也可以克隆其GitHub 仓库

通过构建此应用程序,我们将涵盖如何使用不同的 Cordova 插件来访问多个原生设备功能。

我们还将使用 ngCordova,它是一组封装 Cordova 插件的 Angular.js 服务。

在开始之前,让我们突出本教程的主要标题:

因此,我们将了解如何生成或创建 Ionic 1 项目,添加目标平台和 Cordova 插件。

  • 我们将了解如何使我们的应用程序支持多种语言。
  • 我们将学习如何访问设备相机闪光灯并将其打开和关闭。
  • 我们将学习如何通过 AdMob 盈利。
  • 我们将学习如何生成应用程序资源:图标和启动屏。
  • 我们将学习如何准备应用程序以发布到应用商店。

首先,为还不熟悉 Ionic 框架的人介绍一下。Ionic 是一个混合移动框架,它允许 Web 开发人员使用他们已经熟悉的技能(JavaScript、HTML 和 CSS)来构建移动应用程序。事实上,任何人都可以使用 Ionic 1 进行开发,而不仅仅是 Web 开发人员,因为学习 Web 的三大支柱并不难,而且您甚至不需要具备 HTML、CSS 和 JavaScript 高度熟练的技能就可以开始使用 Ionic 框架。Ionic 使用 Angular.js 框架来构建应用程序代码,并使用 HTML 和 CSS 进行呈现和主题化。Ionic 基于 Cordova,这是一个流行的包装器/框架,用于访问相机、加速计、联系人等原生设备功能。有关混合开发的信息,请阅读为什么选择混合移动开发

在撰写本文时,Ionic 有两个版本:Ionic 1 和 Ionic 2。Ionic 2 由 Ionic 团队从头开始重写,并基于 Angular 2 而不是 Angular.js。但由于 Ionic 2 仍处于 RC(发布候选)版本,因此我们将使用 Ionic 1 来构建我们的应用程序。

那么,让我们开始吧。首先,您需要安装 Ionic CLI(命令行界面)。打开您的命令提示符(Windows)或终端(Linux 或 MAC),然后输入以下命令:

    npm install -g ionic

您还应该安装 Cordova。

    npm install -g cordova

正如您所看到的,我们使用 NPM 来安装 Ionic CLI,因为它是一个 Node.js 工具(就像如今任何出色的 CLI 工具一样),所以您需要在操作系统上安装 Node.js。如果没有,请从官方 Nodejs 网站获取安装程序,或遵循本教程如何使用 NVM 安装 Node.js

请注意,如果您想构建 Android 或 iOS(仅限 MAC)移动应用程序,您需要安装 Java 和 Android SDK,或者在 iOS 的情况下安装 XCode。您应该在网上找到有关如何安装这些要求的教程。

现在,安装 Ionic CLI 后,让我们开始构建我们的 Ionic 1 移动应用程序(基于侧边菜单模板)。

     ionic start easylight sidemenu --app-id "com.techiediaries.easylight"

Ionic CLI 将负责下载侧边菜单模板并生成您的起始应用程序,其中包含一些默认页面和一个侧边菜单。

我们使用 --app-id 开关来告诉 Ionic 应用程序的包名称是什么。如果您不提供,Ionic 将为您生成一个随机名称,但您可以在项目 config.xml 文件中稍后更改它。

    <widget id="com.techiediaries.switchlight" version="0.0.1" 
     xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="https://cordova.net.cn/ns/1.0">

接下来,我们需要添加目标原生平台:

    cordova platform add android  // for Android

    cordova platform add ios      // for ios

但是,您需要确保已安装原生平台的 SDK。Android 的 Java SDK 和 Android SDK,以及 iOS 的 XCode。

此外,除非您在 MAC 系统上进行开发,否则您将无法添加 iOS 平台并构建您的应用程序以针对 iOS。对于 Android,您可以在 Linux/Windows 或 MAC 上进行目标构建。

现在,进入您的应用程序目录,然后使用 bower 安装 ngCordova 库:

    bower install ng-cordova 

如果您花时间查看项目结构,您应该会注意到 package.json、bower.json 和 gulpfile.js 等文件和文件夹,这意味着 Ionic 使用 NPM 和 Bower 作为包管理器,并使用 Gulp 作为任务运行器。所以,如果您已经熟悉这些工具,您应该会感觉很自在。

现在要编辑/添加文件,我们需要进入 www 文件夹,在那里您应该会找到 Angular.js 代码和 HTML 视图。
打开您的 index.html 文件,并在 app.js 和控制器之前包含 ngCordova。

    <script src="lib/ngCordova/dist/ng-cordova.min.js"></script>

接下来,打开 app.js 并将 ngCordova 作为 Angular.js 应用程序的依赖项添加进去。

    angular.module('starter', ['ionic','ngCordova','starter.controllers'])

添加多语言支持

由于 Ionic 使用 Angular.js,我们将利用一个 Angular.js 库来为我们的 Ionic 应用程序添加 i18n 支持。所以,请继续使用 Bower 安装 angular-translate。

   bower install angular-translate

接下来,在我们的 index.html 文件中,在 app.js 之前添加它。

   <script src="lib/angular-translate/angular-translate.min.js"></script>

接下来,将 'pascalprecht.translate' 添加到您的应用程序依赖项中。

    angular.module('starter', ['ionic','ngCordova','pascalprecht.translate','starter.controllers']) 

run() 方法中,注入 $cordovaGlobalization$translate

    angular.module('starter', ['ionic','ngCordova','pascalprecht.translate','starter.controllers'])
    .run(function($ionicPlatform,$cordovaGlobalization,$translate) {
                $cordovaGlobalization.getPreferredLanguage().then(
                    function(result) {
                      console.log("the language " + angular.toJson(result));
                      var parts = result.value.split('-');
                      if(parts.length > 0)
                      {
                        var lang = parts[0];
                        $translate.use(lang);
                      }else
                      {
                        $translate.use('en');
                      }
                    },
                    function(error) {

                    });        
    })

那么,我们做了什么?

我们使用了 $cordovaGlobalization.getPreferredLanguage() 来获取运行应用程序的设备的语言,然后使用 $translate.use() 来设置 angular-translate 将使用的语言。这样,如果设备语言存在相应的翻译,我们的应用程序将以设备语言显示;否则,将使用英语。

接下来,在 app.config() 方法中,注入 $translateProvider 并设置我们应用程序不同语言的字符串。

  var en_translations = {
    app_title : "EasyLight",
    app_desc : "EasyLight lets you use your mobile as a flashlight",
    app_author : "Built by Ahmed Bouchefra",
    light_on : "Switch the light on",
    light_off : "Switch the light off",
    enable_accelo : "Enable/Disable the accelometer",
    menu_home: "Home",
    menu_about: "About",
    rate: "Rate"
  };
  var fr_translations = {
    app_title : "TorcheSimple",
    app_desc : "TorcheSimple vous permets d'utiliser votre phone comme une torche ",
    app_author : "Crée par Ahmed Bouchefra",    
    light_on : "Activer/Désactiver l'éclairage",
    light_off : "Éteindre l'éclairage ",
    enable_accelo : "Activer l'accéléromètre" ,
    menu_home: "Principal",
    menu_about: "A Propos",
    rate: "Rate"
  };
  
var ar_translations = {
  app_title : "شعلة",
  app_desc : "شعلة تطبيق يسمح لك باستعمال المحمول كمصباح يدوي بكل سهولة",
  app_author : "المبرمج : احمد بوشفرة",
  light_on : "أشعل النور",
  light_off : "أطفئ النور",
  enable_accelo : "تمكين التسارع",
  menu_home: "الصفحة الرئيسية",
  menu_about: "حول",
  rate: "Rate"
  };

    $translateProvider
        .translations('en', en_translations) // we provide English translations
        .translations('fr',fr_translations)  // Frensh translations
        .translations('ar',ar_translations)  // Arabic translations
        .preferredLanguage('en');            // we set the default language 

现在,在我们的模板中,我们应该使用 translate 过滤器来显示任何 string。例如:

    {{"app_title" | translate }}        

如何访问设备相机闪光灯?

由于我们正在构建一个手电筒应用程序,我们需要访问设备的相机闪光灯,因此我们需要安装 cordova camera 插件。

在您的 Ionic 项目文件夹下,运行:

        cordova plug in add plug in 

接下来,添加以下代码来访问相机闪光灯:

    angular.module('starter', ['ionic','ngCordova','pascalprecht.translate','starter.controllers'])

    .run(function($ionicPlatform,$cordovaFlashlight,$cordovaGlobalization,$translate) {
        /* ....
            Omitted some code parts
            ......
        */
        $cordovaFlashlight.available().then(function(availability) {

            $cordovaFlashlight.switchOn().then(
              function (success) {
                  console.log("Flashlight is on !");
              },
              function (error) {
                console.log('Error while switching Flashlight on')
              }
            );      

        }, function () {

          alert('Flashlight is not available');

        });       
    });        

此代码将检查闪光灯是否可用,然后在应用程序启动时打开闪光灯。

接下来,我们需要添加一系列控制器方法,以便能够将其关闭并重新打开。

angular.module('starter.controllers', [])
.controller('HomeCtrl', function($scope,$cordovaFlashlight) {
  
  $scope.isOn = true;
  $scope.turnOn = function(){
        //nativeclick.trigger();
        $scope.isOn = true;
        $cordovaFlashlight.switchOn().then(
          function (success) { 
              console.log("Flashlight is on !");
          },
          function (error) { 
            console.log('Error while switching Flashlight on')
          }
        );          
  }
  $scope.turnOff = function(){
        //nativeclick.trigger();
        $scope.isOn = false;
        $cordovaFlashlight.switchOff().then(
          function (success) { 
              console.log("Flashlight is off !");
          },
          function (error) { 
            console.log('Error while switching Flashlight off')
          }
        );    
  }});

所以,您可以看到我们向 $scope 添加了两个方法 turnOn()turnOff()。现在我们需要将它们绑定到主模板。

home.html

    <ion-view view-title="{{'app_title' | translate }}" style="background: #0d455f">
      <ion-content style="overflow-y: auto;">

      <h1>
          <img style="width: 100%;height: 100%;padding:5px; " src="img/title.png">
      </h1>

           <div class="item item-body"  style="background: #0d455f">
               <button class="button button-full button-energized" ng-click="turnOn()">
                {{"light_on" | translate }}
            </button>
            <button class="button button-full button-assertive" ng-click="turnOff()">
                {{"light_off" | translate }}
            </button>
            
           </div>

        </div>
    </ion-content>
    </ion-view>

通过 AdMob 盈利

在本部分,我们将为我们的应用程序添加 AdMob 盈利支持。由于 AdMob 使用原生广告,我们需要安装一个 Cordova 插件。所以在您的终端/命令提示符中,执行:

    cordova plug in add plug in

或者

    cordova plug in add https://github.com/floatinghotpot/cordova-plugin-admob

接下来,我们需要添加一些设置。

因此,在您的应用程序 .run() 方法中,添加以下代码:

    window.plugins.AdMob.setOptions( {
          publisherId: 'ca-app-pub-9293763250492023/8573028797',
          interstitialAdId: '',
          bannerAtTop: false,   // set to true, to put banner at top
          overlap: false,       // set to true, to allow banner overlap webview
          offsetTopBar: false,  // set to true to avoid ios7 status bar overlap
          isTesting: true,      // receiving test ad
          autoShow: true        // auto show interstitial ad when loaded
    });

    window.plugins.AdMob.createBannerView(); 

当然,您需要更改 publisher id 以反映您自己的 AdMob publisher id,除非您希望我通过您的应用程序赚钱。

此外,请确保在您要将应用程序发布到应用商店时将 isTesting 设置为 false。但在开发过程中,建议将 isTesting 设置为 true,这样您在测试应用程序时就不会意外点击您的广告,这违反了 Google AdMob 的条款。

准备应用程序以发布到应用商店

最后一步是准备我们的移动应用程序以供应用商店发布。我将仅发布到 Google 应用商店,因为我只针对 Android 设备。

首先,我们需要生成应用程序资源,例如图标和启动屏。转到项目根目录下的 resources 文件夹。您应该会找到两张图片 icon.pngsplash.png,以及两个文件夹 Androidios,其中包含适用于 Android 和 iOS 的资源,具有不同的分辨率和宽高比。

您不必修改 Androidios 文件夹中的资源,您只需要提供源图像 icon.pngsplash.png(您也可以使用 Photoshop 和 Illustrator 图像),然后输入:

    ionic resources 

然后等待一段时间,Ionic 将生成不同分辨率和宽高比的平台特定资源。

您需要为所需的最大尺寸创建资源。Ionic CLI 将负责调整大小和裁剪以适应不同的设备分辨率。

图标的最小尺寸应为 192×192 px。

启动图像的最小尺寸应为 2208x2208 px,所有 artwork 都应居中放置在一个 1200x1200 px 的正方形内。

接下来,要为发布构建准备项目,请删除不再需要的插件。

 cordova plug in rm plug in

然后,使用以下命令使用 cordova 构建应用程序以供发布:

cordova build --release android

接下来,您应该对应用程序进行签名,然后才能将其上传到商店。因此,首先,使用 keytool 根据密钥短语和其他一些信息生成密钥,这些信息将在执行后由该工具询问您。

    keytool -genkey -v -keystore my-release-key.keystore -alias alias_name 
            -keyalg RSA -keysize 2048 -validity 10000

然后使用 jarsigner 工具使用生成的密钥实际签名您的 apk。

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 
          -keystore my-release-key.keystore my-apk-unsigned.apk alias_name

接下来,您应该使用以下命令对签名后的 apk 进行对齐:

     zipalign -v 4 myapk-unsigned.apk myapk.apk

现在,如果一切顺利,您应该会得到 myapk.apk 文件,该文件已准备好发布到Android 应用商店

您可以在Android 应用商店下载演示应用程序。

您还可以克隆最终 GitHub 仓库,以便查看完整的应用程序源代码。

结论

因此,在本教程中,我们涵盖了如何使用 Ionic 1 和 Cordova 构建 Android 应用程序。我们还学习了如何准备应用程序以发布到 Android 应用商店。如果您有 MAC,您也可以为 iOS 构建您的应用程序。

这篇博文使用 Ionic 1 和 ngCordova 构建多语言手电筒移动应用程序首次发布于techiediaries

© . All rights reserved.