プログラミング

cordovaでのadmob広告の表示について(cordova-plugin-admob-free)

こんばんわ!cowboyです☆

最近新たにUnityによるアプリ開発を始めて、一つ目のアプリの進捗が40%の状態です。
微妙にSwiftやJavaScript, C#は書き方が違うし、最近は3Dモデリングソフトや3DCADも使い始めて、それも微妙に操作が違っていててんやわんやしています(´・ω・`)
そもそも音楽のブログなのか、プログラムのブログなのか、はたまた写真のブログなのかわからなくなってきてます!!(笑)


さて、以前にCordovaで最もよく使われているであろうAdmobプラグイン、cordova-admob-pro が広告トラフィックの2%を抜いているという記事を軽く書きました。


しかしながら、いまだに「CordovaでAdmobを載せるにはcordova-admob-pro を使いましょう」という記事が新たに書かれています。
しかもトラフィックが2%抜かれていることに触れずに。

あまりにもあれなので、トラフィックが抜かれず、無料のAdmobプラグインを紹介しておきます。

cordova-plugin-admob-free とういうプラグインで、以下のコマンドでインストールできます。

cordova plugin add cordova-plugin-admob-free --save

作者が他のAdmobプラグインとの違いを図示してくれているので転載します。

比較プラグイン

更新もなかなかの頻度で行われています。
プラグイン自体の内容はcordova-plugin-admob-simple からトラフィックを抜く部分のコードを削除したものが基本となっているそうです。(cordova-plugin-admob-simple 自体は cordova-plugin-admob をフォークしたものらしい。ややこしい笑)

なのでコーディングはcordova-plugin-admob-simple を参考に(というかそのまま)書けばオーケー。
ちゃんとインタースティシャル広告、動画リワードにも対応しています。


ちなみにいまだにCordova公式、またはAdmob公式のプラグインは出ていません。
もう出ないのかな?

万が一要望があれば(ないか笑)各広告のコーディングについても書きたいと思います。

以上、cowboyでした!うぇいうぇい☆

記事が良かったなら↓をクリックして応援願いますm(_ _)m


Amazon Fireタブレットとアプリ利用での読み上げ機能について

こんばんわ!cowboyです☆

先日、Amazon社が発売しているタブレット、Kindleの10.1インチモデルである「Fire HD 10」にニューモデルが発表しました。



実際の発売開始は2017/10/11からで価格は18,980円(プライム会員だとここから4000円引き)です。
安いですね。
スペックは高性能ってわけではないけど、ネットとか動画を見るくらいなら十分だと思いますね。
またOSはアマゾン独自のFire OS。これはこちらの記事(ウィンタブ:Amazon Fire OS - Amazonサービスに最適化されたAndroid(かのあゆ))が結構詳しく解説してくれています。
あとはアプリかな。
google playが入ってなく(入れる方法はあるが、セキュリティー的にはNG)、アプリはアマゾンアプリストアからインストールする必要があり、これがまたアプリ数が少ないんですよね。

というわけで僕も「接客英語アプリ」だけアプリストアで公開しています。
内容は基本時にAndroid版やiPhone版と同じなのですが、ちょっとだけアマゾンFireタブレットに最適化しています。






正直、アマゾンFireタブレット実機の情報って少ないんですよね。
アプリ開発する際に参考にできるものがほぼ無い。

というわけでテスト用にFire 7を購入しました!!
ちなみにこれもプライム会員なら4000円引きの4980円となります!





購入後2時間ほどチェックしました。
前述したように、ネットや動画程度ならなんの不満も無いくらいよくできている。
安いしいいね!!


ただiPad Airを持っているので、使うことはないかな~。
しかしながら実機を触らないとわからないことが色々ありましたので、購入して良かったです。
特にText to Speechはアプリで使おうとする場合は独特なので。
というかこの辺の資料はアマゾン側が用意してくれても良い気がします(^_^;)



他のアプリ開発社の参考になるかもしれないので、2017/9/28の時点でかんたんに書くと、
1. Text to Speech機能は搭載されているが、初期設定では無効になっている。
2. Googleの読み上げ機能は利用できない(アマゾンストアに「Googleテキスト読み上げ」が公開されていないため)。
3. 読み上げ速度は0.7~4倍速の範囲(あまり遅くできない)
4. 疑問文はきちんと語尾があがる。
5. 数字の読み上げが1000以上だと、単なる数字の羅列と認識する。例えば「2150 yen」はtwo thousand one hundred fifty yenと読んでほしいのに、two one five zero yenと発音されます(困)


以前はFireタブレットのエミュレータをアマゾンが用意していてくれていたんですが、現在はサポートなしです。

Fireタブレットでの表示確認をする場合は、スクリーンサイズやメモリの大きさがこちら(Tablet Device Specifications)で公開されているので、Android Studioで自分でエミュレータを作ります。
基本はAndroid5.1(または5.1.1)をカスタマイズしたものなので、殆どのAndroidアプリはそのまま動くと思いますが、読み上げ機能を利用しているアプリはいろいろ仕様が違うので注意したほうがいいと思います。

以上cowboyでした!うぇい☆



記事が良かったなら↓をクリックして応援願いますm(_ _)m


Cordova Androidでエミュレータにビルドできない件

こんばんわ!!cowboyです☆

今回はプログラミングのcordovaについて。

今年の4月にAndroid SDK Toolsのバージョンが25.3.1になってから、Googleが "android avd"と"android sdk"のコマンドを無効にしました。
さらにスタンドアローンのAndroid SDK manager、AVD managerがなくなり、Android Studioでの管理となりました。つまりAndroid Studioのインストールは必須です。
フォルダ構成等にも変更があったようで、cordovaから直接Androidエミュレータへのビルドができなくなっていました。


一応、cordova-androidプロジェクトフォルダ内のgradleを読み込んでAndroid Studioからエミュレータにビルドしたり、Androidエミュレータを既に起動している状態から"cordova emulate android"コマンド実行でエミュレータにビルドできるのですが、いちいちめんどくさかった。
海外の掲示板とか覗いても同じことで多くの人が悩んでいて、解決策としては、バージョンの古いAndroid SDK Toolsに戻す方法がベストアンサーとなっていました。


もちろんcordovaサイドもバージョンアップしてそれらの変更に対応していると公式でアナウンスされているのですが、なぜか"cordova emulate android"のコマンドでエラーを吐いてしまう。
これは僕の開発環境の問題かと思っていました(海外の掲示板によると全く同じ症状の人がたくさんいたけれども)。

そんな中、5/4にcordovaのメジャーアップデータであるcordova7.0が公開されました。それとともにcordova androidが6.2.3に更新されました。
そのアナウンスの中の一文に驚愕しました。以下引用です(リンク)。

"We are happy to announce that Cordova Android 6.2.3 has been released!
This patch release actually adds support for the Android SDK Tools v26 and newer.
Unfortunately, we forgot to include these changes in the 6.2.2 release.

Cordova Android 6.2.3をリリースできて嬉しいよ!
このパッチはAndroid SDK Tools v26以上を本当にサポートするようになったよ。
残念なことに、6.2.2リリースの際にはこれらの変更を含めるのを忘れちゃったんだ。"



・・・マジか!!アナウンスではビシッと対応をうたっていたのに、まさかのcordova側の対応忘れとは。。。(笑)

というわけで今あるプロジェクトを以下のコマンドでcordova androidを更新しましょう(@6.2.3をわざわざ付けないと何故か6.2.2が適応されてしまう)。

cordova platform update android@6.2.3
(新しくプロジェクトを作る場合はcordova platform add android@6.2.3)

しかしここでまた1つ問題が。
MacOS Sierraだとcordova emulate androidを行うときちんとAndroidエミュレータが立ち上がり、アプリがビルドされたのですが、Windows10だと次のようなエラーが出ました。

"Gradle: not installed
Could not find an installed version of Gradle either in Android Studio,
or on your system to install the gradle wrapper. Please include gradle
in your path, or install Android Studio"


どうやらAndroid SDK Tools v25.3.1以降ではGradleのパスが変わっているようです。
Macではなぜか特に何もしなくても大丈夫でした。とりあえずWindows10でパスを追加しましょう。

[コントロールパネル] - [システム] - [システムの詳細設定]メニューで表示される[システムのプロパティ]ダイアログボックスの[詳細設定]タブを開く。
環境変数をクリックすると、環境変数のダイアログボックスが表示されるので、[(ユーザーアカウント)のユーザー環境変数]内の[新規]ボタンをクリックして以下の内容を登録する。
(画像ではパスは既に追加済みです。)
cordova環境変数



変数名:GRADLE_HOME
変数値:Android Studioまでのパス¥gradle

Android Studioまでのパスは各自書き換えて下さい。
コマンドプロントで"gradle -version"を実行してgradleのバージョンが表示されればOKです。

これでWindows10でも"cordova emulate android"コマンドでAndroidエミュレータに直接ビルドできるはずです。
やっぱり新しい機能が追加されていたり、バグやセキュリティ面を考えると最新版を使っている方が安心できます(^^)
もちろん、最新バージョンで不具合が増えていることもありますが(笑)

以上cowboyでした☆うぇいうぇいうぇい!!

記事が良かったなら↓をクリックして応援願いますm(_ _)m








Cordovaでのハイブリッドアプリ開発でつまずいたこと

こんばんわ!cowboyです☆

「接客英語アプリ」のiPhone版もアンドロイド版も更新し、iPad版もリリースしたので一段落です。

僕はCordovaを使ったハイブリッドアプリ開発(1つのコードでiOS・Androidの両方のアプリを開発する)の手法を取っているのですが、まあちょこちょこうまくいかず(特にiOS版)に詰まりましたよ(^_^;)

今回は(特にiOS版で)大きく詰まったところTop3を紹介したいと思います。

①Cordovaのサードパーティー製Admobプラグインはトラフィックを2%抜かれる。

CordovaでAdmob広告を載せるためにプラグインを導入するんですが、公式がないのでサードパーティー製を使うわけです。
ネットで検索すると日本語のサイトではcordova-admob-proがよく(というかほぼ)紹介されているんですね。
じゃあ使おうかと思って作者のGitHubのREADMEを読むと以下のように書いてます。

"You can use this plugin for free during trial purpose. If it earns less than $1000 for you, you can continue to use for free.

If use in commercial project, please get a license, or, you have monetized more than $1000 using this plugin, you are also required to: either get a commercial license ($20), or, no need pay but share 2% Ad traffic, read the License Agreement for details. As a commercial customer, you will be supported with high priority, via private email or even Skype chat."


みんな、よく英語読まないと。やられてますよ(笑)
20ドル払ってライセンスを買わないと、トラフィックの2%抜かれます。
まあ収益が1000ドルを超えないと抜かないって書いてますが、微妙ですね。

じゃあ違う人が作ったプラグインを使おうと探しましたが、他の方も「2%のトラフィックを寄付としてもらうよ!払いたくなかったら自分でコードとハックしてね!バルセロナから愛をこめて☆」みたいな感じで同じでした。

それならばプラグイン無しで自力でadmob SDKをcordovaに組み込むぜ!!と2日かけて取り組みました!!

挫折orz

というわけで現状はadmob-proをハックした人のプラグインを信じて使わせていただいています。
まじでグーグルさん、公式でプラグイン出してくれませんかね。安心して広告載せれません(^_^;)
とりあえずは解決(としよう)!

②iOSでfirebaseプラグインを実装するとエラーが生じる
Firebaseの解析を利用するためにfirebaseプラグインを組み込んだのですが、Androidでは何のエラーも吐かなかったのですが、iOSだと何故か実機でアプリをどうさせることが出来ません(エミュレーターなら起動する)。
以下のようなエラーが出て、SigningのTeamを正しいものに選択しても何故か認証が通りません。

Check dependencies
Automatic signing is unable to resolve an issue with the "○○○(アプリ名)" target's entitlements files.Remove the entitlements or switch to manual signing and resolve the issue by downloading a provisioning profile from the developer website.
Provisioning profile "iOS Team Provisioning Profile: ○○○◯(アプリのプロジェクト名)" doesn't include the aps-environment entitlement.
Code signing is required for product type 'Application' in SDK 'iOS 10.2'


めちゃめちゃ困った。調べまくっても何も情報がない。Stack Overflow(海外の技術者の掲示板みたいなもの)で調べてもわからない。同じようなエラーの対処法をしても全く治らないし、そもそも原因が違う。

Xcodeで色々いじってたらTARGET→Capabilities→Push NotificationsをONにしたら治りました。
Firebaseは通知を出したりできるので、ここがONになっていないとエラーがでるようですね。
Swiftでコーディングするときはpodを使うので、そのへんは自動でやってくれているようなので全然気づかなかった。
とりあえず解決!!

③iOSで読み上げ機能(tts)を利用する際に、実機でのみ正常に動作しない
さあ実際にコードが書き終わってエミュレーターでの検証も完了したので、実機テストということで、僕が唯一持ってるiOS製品、iPad Airで実行しました。
あれ?なんか、挙動が違う!!
エミュレーターでは読み上げ中に違う文章を読み上げさせようとすると、読み上げ途中の音声を停止して新たに読み上げ音声が再生されます。しかし実機では読み上げ途中に違う文章を読み上げさせようとすると、停止せずにそのまま読み切った後しばらく新しい読み上げ音声を生成しようとしません。
おかしい。
というわけでログを見るとエラーが出てますね。はい。

AVAudioSession.mm:1053:-[AVAudioSession setActive:withOptions:error:]: Deactivation an audio session that has running I/O. All I/O should be stopped or paused prior to deactivating the audio session.

これに関してはStack Overflowでもちょくちょくと話題になっていて、safari(つまりiOSのWebView)では音声再生中に別の音声命令(例えば停止や別の文章を読み上げさせる)を行うとエラーが起きて正しく動作しないとのこと。
その対処法の結論が「iOSのWebViewのバグだから諦めろ」でした(^_^;)
なんだと?WebViewのバグだと?じゃあUIWebViewじゃなくてWKWebView(こっちのほうがクラッシュとかが少ないらしい)に変えてみる!!

結果ダメでした。

なんてこった。エミュレーター上では予定通りの挙動をするのに実機でダメだなんで。。。

というわけで全部詰まったんですが、③だけが解決策を見つけることができませんでした。
なのでiOS版はhtml5・CSS3・JavaScriptによるハイブリッド開発を断念して、普通にSwiftで更新しました。
う〜ん、AndroidとiOSのアプリ同時開発ができると思ったんですが、うまくいかないですね(^_^;)
一応オーディオを扱わなければ問題なさそうなので、そういうアプリを開発するときはCordovaだけで開発したいと思います。

以上cowboyでした!!うぇいうぇいうぇい☆


記事が良かったなら↓をクリックして応援願いますm(_ _)m