サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
大谷翔平
www.notice.co.jp
前回は、スレッドがリークする様子をMAT(Memory Analyzer Tool)を使って説明しました。今回は、スレッドとともによく利用されるハンドラがどのようにリークするかを調べてみます。 ハンドラは異なるスレッドから受け取ったメッセージを処理するものです。たとえば、GUIスレッドとは別のスレッドから表示データを受け取って、そのデータを表示するといった使い方をします。 GUIスレッド以外でUIを操作することができないので、GUIスレッドとひもづいたハンドラを使って、別スレッドからUI操作を実行します。Handlerクラスと共に、活躍するのがLooperクラスとMessageクラスです。 簡単に説明すれば、以下のような動作になります。 HandlerはMessageをLooperへキューイングします。 LooperはキューからMessageを取り出して、HandlerのdispatchH
com.google.android.gcmパッケージがdeprecatedされて、現在、Google Cloud Messagingを利用するには、com.google.android.gms.gcmパッケージを利用する必要があります。 旧APIも当面は運用され続けているようですが、今後の開発はcom.google.android.gms.gcmパッケージを利用した方がよいでしょう。 このパッケージを利用するには、Google Play Services SDKが必要です。 新しいパッケージでは、XMPP(Extensible Messaging and Presence Protocol)がサポートされており、プッシュ通知のようなdownstreamへの送信だけなく、upstreamに向けてメッセージを送信することができます。 XMPPをサポートしたGCM Cloud Connecti
久々にBackboneを使う機会があり、それならとMarionetteでダンスさせることにしました。 MarionetteはBackboneの冗長になりがちなBoilerPlate部分を吸収してくれるフレームワークです。 Backboneを使ったことがある人は、アプリケーションの構造として、どうあるべきか悩んだことはないでしょうか。 Marionetteには、アプリケーションクラス、モジュールクラスというアプリケーションの構造を表現するクラスがあります。 しかし、Marionetteでアプリケーションを作成する標準的な方法に関する情報も少なく、 クラスの仕様を理解するだけでは、使いこなすことが難しそうです。 今回は、Marionette.Moduleを使ってアプリケーションをモジュール化し、なおかつ、CommonJS準拠のモジュール管理をBrowserアプリでも実現できるBrowserif
Google Cloud Messagingを利用するには、サーバキーとSenderIDが必要です。 これらの情報は以前はGoogle API consoleへログインして、生成していましたが、現在ではGoogle Developers Consoleという名前でGoogleの様々なサービスの設定ができるようになりました。 いつまでサポートされるかわかりませんが、古いGoogle API consoleのインタフェースも利用できるようになっています。 しかし、Google Developers consoleの方が操作がわかりやすくなっていますので、今後はこちらを利用する方がよさそうです。何より日本語のメッセージが充実しているのもありがたいですね。 目次 Google Developers Consoleを開く プロジェクトを作成 APIを有効にする Google Cloud Messag
CakePHPのコアライブラリを共有できるようにしておくと、複数のアプリで利用できます。CakePHPのリビジョンが上がった場合も、常に最新のCakePHPが利用できるようになります。また、アプリ間で共通のModel,Controllerが共有できると、機能単位でアプリを分けることも可能になります。 環境 OS CentOS6.4 CakePHP 2.4.7 Coreライブラリを共有 Coreライブラリを最新に保つために、gitのsubmoduleを利用されている方もありますが、私の方法は、完全に別ディレクトリに最新のCakePHPをデプロイしておき、このディレクトリのCoreライブラリをアプリから参照する方法です。 まず、CakePHPをgithubからクローンします。例では/opt/cakephpに配置します。 $ cd /opt $ git clone git://github.co
モバイルサイトは画面の大きさも限られており、できるだけ多くの情報を表示するために、文章を一部だけ表示して、一覧表示したいことがあるでしょう。 文章の量によりレイアウトが乱れてしまうことを避けたい場合にも有効です。 文章を省略することや、省略されている文章があることを示す記号をエリプシス(ellipsis)といい、三点リーダーで表します。 Javascriptを利用する方法や、CSSのafter疑似要素を利用する方法などもありますが、CSS3だけで出来る方法を段階的にご紹介します。 なお、サンプルはiOS Safari(webkit)でしか動作確認していませんので、ご了承ください。 サンプルリストアイテム 以下のようなサムネイル画像とタイトル、説明文があるシンプルなリストアイテムを定義します。 このままだと、左のサムネイルの高さをはみだして説明文があふれています。 スタイルシート /* *
今のところ、iphoneにはなくてandroidに存在する機能の一つであるウィジェットは便利なものです。ホーム画面が散らかるとはいえ、利用次第で操作性が向上します。 ウィジェットを配置するとき、1×1,4×1などの表記がありますが、ウィジェットの幅や高さはセル単位で示されています。開発時はセル数ではなく、決められた計算式でdipという単位で指定します。 しかし、API Level14からこの計算式が大きく変更されたことで、想定したウィジェットセル数が正しく認識されないという問題があるようです。アプリが動作するOSのバージョンにより、セル数が変わってしまい、ウィジェットが配置できない場合もあります。こんなときの対処方法をまとめておきたいと思います。 セルの旧計算式 ウィジェットの定義はxmlにより行いますが、そのとき以下のような情報を指定します。 <?xml version="1.0" en
アンドロイドはLinuxカーネル(2.6.x-3.x)をベースにしたOSに、JavaVM(DalvikVM)を実装しており、複雑なメモリ管理を行っている。 スマートフォンの限られたリソース環境の中で、アプリケーションが快適に動作するように設計されている。メモリが足りなくなるとアプリが突然終了したり、処理速度が遅くなるので、一般のユーザーもメモリがどれぐらい空いているかといったことに関心があるだろう。 設定で実行中のアプリのメモリ利用量を見ることができるが、これは具体的にはどこの値を見てるのだろうか。スマートフォンのスペックから搭載されているメモリ容量はわかるが、実際利用できるメモリ量はどれぐらいだろうか。 スマートフォンのメモリ容量は増え続けているが、UI/UXの向上やデザインリソースの増加にともなってアンドロイドアプリ自体の容量も増加傾向にある。 アンドロイドのアプリケーションプログラマ
今回は、アンドロイドのSDカードパスの取得方法をご紹介します。一般的には、Environment.getExternalStorageDirectory()を利用すれば取得できるだろうと考えがちですが、実はSDカードのパスとは限りません。Externalという言葉が外部とかSDカードを連想しがちですが、どちらかというと拡張と考えると理解しやすいです。 KitKatの詳細が公開されましたが、SDカードに関する扱いはまた異なってくるかもしれません。KitKatが早急に広まることで、Gingerbread対応(2.3)をしなくてよくなれば、本当に助かるのですが、各ベンダーごとの実装が存在するので、そう簡単にはいかないでしょう。 通常、SDカードのマウントパスを取得するには、Environment.getExternalStorageDirectory()を使うことになっています。sdcardとい
前回はAndroidOSアプリにGoogle Analytics SDK(v3.01)を組み込みました。iOSのSDKも同様にv3.0となっています。 v3.0になってから若干インタフェースも変わっているようですが、公式サイトのドキュメントに従っても、動作しない点があったので、その点に関して説明しておきます。 恐らく、ドキュメントが更新されていないのと、若干誤った記述があるように思います。 SDKの入手方法 以下のサイトから入手するか、また、Google Analyticsでモバイル用のプロパティを作成した後、ダウンロードを促すページが表示されますので、そこからもダウンロードできます。現時点(13/11/26)ではv3.02が最新となっています。 iOS Native Application Tracking Overview Google Analytics SDK for iOS –
前回はコーディングの前の準備として、Facebook SDK3.0のダウンロード、Facebook App作成などについて説明しました。 今回は実際にアンドロイドアプリからFacebookログインする部分をコーディングしていきます。 前編の「アンドロイドアプリからFacebookeへログインする方法(前編)」も参照しながら、読んでください。 一番簡単な実装は、Facebook SDKに含まれているButtonウィジェット(com.facebook.widget.LoginButton)や認証ダイアログ(com.facebook.widget.UserSettingsFragment)を利用することだと思います。 しかし、Buttonウィジェットを使うと、ボタンのデザインに自由度が欠けるということ、また、このボタンを使わないサンプルのコードでは、パーミッションの設定方法がよくわからなかったの
Google Cloud Messaging(以下、GCMとする)は、アンドロイド端末にメッセージをプッシュ配信するクラウドサービスです。これを使うと非同期に端末アプリへメッセージ送信が可能になり、様々な通知が可能となります。 身近な例では、新着メール、アプリ更新、その他のお知らせ通知などで利用されています。あまり頻繁に通知されるとユーザーに敬遠されますので、使い方には工夫と節度が必要です。 GCMはクライアントだけではなく、メッセージを送信するサーバサイドのプログラムが必要です。少し長くなりますが、数回に分けて、その実装方法をご紹介します。Google API consoleの画面が以前と変わっているようですが、これが(2013/05)最新のものです。 注意(2014/12/5) 現在、Google API consoleは、Google Developers Consoleに切り替わっ
iphone,ipad,android用のHTML5アプリを開発していて、androidのタッチイベントの挙動が(mobile safariと比べて)おかしいなと思うことがあります。w3c Touch Eventsでの策定でも、細かなところまでは決められないだろうし、守られるものでもないだろうとは思うが、出来る限り統一されることを望みます。 W3C Touch Events version 2 機種・バージョンの差異に加えて、様々なブラウザが登場しているので、ネイティブアプリにせよ、HTML5アプリにせよ、ますます開発と試験が混沌としてきたと感じます。 手元のSonyTableS(android4.0.3)では、コンテンツをscalableに設定した場合、touchmoveイベントが取得できません。viewportにてuser-scalable=noとすると正しく取得できるようになります。
iPhoneと比べて、アンドロイドでは自由にアプリをインストールできます。たとえGoogle Playのようなマーケットに登録していなくてもインストールは可能です。しかし、アプリを更新しても、自動的にアップデートすることはできません。 弊社では企業向けタブレットアプリ開発がメインなのですが、このようなアプリは不特定多数がダウンロード可能なGoolge Playに登録するわけにもいきません。 登録してもよい場合でも、ネットワークがインターネットに接続されていないVPNであったりしますので、アプリの更新はアプリで自力で行うことになります。 プライベート・アプリマーケット 企業向けということになると、端末が数百台なんということもありますし、また端末も全国の各地の支店に配置されていたりしますから、アプリのアップデートを行うのは容易ではありません。初期キッティングでさえ、非常にコストも時間もかかりま
Parseはモバイル用BaaS(Backend as Service)を提供していますが、今回、Webホスティングサービスもリリースされました。Cloud Codeというサービスで、Javascript SDKを使ったJavascriptアプリをParse Cloudで動作させることができます。 もちろん、htmlや画像などもアップロードすることができます。使い方はHerokuと似た感じで利用できそうです(Webホスティングはファイル容量は10MBで、ファイル数は500filesまでとなっています)。 今回は、BaaSで提供されているAndroid SDK(他にiOS,OSx,Android,JavaScript,.NET用が用意されています)を使って、アンドロイドアプリから、Parseの使い方をご紹介します。SDK以外に、他にREST APIやPush Notificationも用意され
JSONはXMLよりコンパクトでシンプルな構文で扱いやすいです。アンドロイドアプリでサーバとやりとりするときはJSONを利用することが多いです。 Android SDKにもJSONライブラリはありますが、JsonPullParserはサイズが小さく高速です。そして、APT(Annotation Processing Tool)を利用してアノテーションでJSONとPOJO(Plain Old Java Object)をマッピングするという特徴があります。 またXmlPullParserと同様に、全体を読み終わるまで待つのではなく、読み終わったJSONオブジェクトインスタンスを次々と受け取ることができます。 ダウンロード ダウンロードは作者の@vvakameさんのgithubからダウンロードできます。 vvakame / JsonPullParse @vvakame の日記 JsonPullP
「Appの有効な”aps-environment”エンタイトルメント文字列が見つかりません」 この理由がわかるまで、相当はまりました。ググってみると、aps-environmentタグを確認するということと、プロビジョニングプロファイルを再度作り直してみるという記事が多かったですが、まったく解決せず、途方にくれました。 アプリのバンドル識別子に合わせる 結局、私の場合はプロビジョニングプロファイルのバンドル識別子があっていなかったということでした(ここにコメントされた方に感謝します)。 よくよく考えれば、複数のプロビジョニングプロファイルがあったとき、どれを適用するべきかと考えると、何かキーが必要だというのはわかりますね。 ※APNs(Apple Push Notification service)を利用するには、実機へインストールするプロビジョニングプロファイルには、APNsを有効にした
jQueryMobile(以下、jqm)は、パフォーマンスを向上させるために、domをキャッシュします。静的ページなら問題ないのですが、動的コンテンツでは、このキャッシュが弊害となるケースがあります。 たとえば、入力画面から入力エラー内容を伴って元の入力画面へ戻るような場合は、同じページコンテンツが返ってきますので、domの中に同じidを持つdivタグがキャッシュされることがあります。 このキャッシュは、$.mobile.page.prototype.options.domCache = falseであっても、有効なようです。jqmは遷移する前後のページを保持して遷移のビジュアルエフェクトを実現するので、このキャッシュは必須なんだろうと考えています。 そもそも、何が弊害かというと、documentの中に同じidを持つdiv(data-role=”page”を持つdivです。以下ページとしま
mobile safariで大きな画像を扱うとき、気をつけることが何点があったので、記録しておきます。 iphone4,ipad(3rd generation)は、retinaディスプレイ採用に伴って解像度が2倍になっていて、より鮮明な画像が扱えるようになっています。しかし、いままでの解像度の画像を、表示したらどうなるのか?大きさが半分(面積は1/4)になってしまうのか。 mobile safariでは、1pixelを倍にして表示するようになっています。画像の大きさは元の大きさですが、このままだとジャギーが目立った画像になってしまいます。 多くのブログで紹介されていますが、元の画像を倍の解像度におきかえて、imgタグでは従来の大きさで指定してやると、鮮明な画像が表示できます。 たとえば、正方512ピクセルの画像は、正方1024ピクセルの画像にしておいて、imgタグを以下のように書いておくと
フェイスブックページのTimeline化に伴って、カスタムアプリが表示するページには影響がありましたが、アプリ本来の機能には影響ありません。 Facebookアプリはなんだかよくわからないという人が多いのではないでしょうか。アプリに権限を要求されて、意味がよくわからず、不安な気持ちで、こわごわOKボタンを押していませんか? Facebookアプリの権限を理解すると安心してアプリを利用できます。 Facebookアプリの種類 PCから利用するFacebookアプリには大きくわけて、二種類あります(※1)。一つはFacebookの中で動作するアプリと、外部Webサイトの中で動作するアプリです。 ※1これら以外に携帯電話Web向け、iOS向け,Android向けなどがあります。 Facebook上のアプリ Facebook上のアプリには、自分にインストールして利用するものと、自分が管理するページ
楽天RMSでは、原則Javascriptやサーバサイドのプログラムが利用できません。しかし、GOLDの領域を利用すれば、Javascriptは可能になります。 楽天RMSからiframeでGOLD下のコンテンツを呼び出すことで、比較的自由にJavascriptを利用できます。 特にトップページは、GOLDのコンテンツが呼ばれるので、楽天RMSの制約なしに表現力の高いサイトが構築できます(※技術的に可能でも、楽天の制限規約がありますので、ご注意ください)。 しかし、これらのコンテンツ更新作業は、楽天RMS外での作業となり、あまりインターネットの知識のない作業者には、非常にストレスが大きいです。 たとえば、トップページに自店の商品売上ランキングなどを掲載されているところは多いと思います。 楽天RMSには自動的に自店のランキングコンテンツを生成してくれる機能がありません。 このようなコンテンツは
HTML5のinput要素には、typeによって表示形状を変えたり入力補助するソフトウェアキーボードを選択できる設定があります。typeには”password”,”number”,”email”,”url”,”tel”, “time”,”date”,”month”,”week”,”datetime”,”datetime local”,”color”(他にrange,search)などがあります。typeを適切に設定することで、モバイル端末のブラウザが入力に適したソフトウェアキーボードを表示します。 実際、どのようなソフトウェアキーボードが表示されるのかはブラウザ依存なので、今回はjQueryMobile1.0.1 日本語リファレンスを利用させていただき、iPad2の例をご紹介します。 表示されるソフトウェアキーボードは、現在のキーボードの設定によって変わります。 type English(
”アプリ開発ならおまかせください” 弊社は大阪を拠点としたアプリ開発会社です Android/iOSアプリから、Webアプリまで、トータルに開発できます。ネイティブアプリだけでなく、ハイブリッドアプリ、Webアプリの開発にも対応できるので、お客様のニーズにあった最適なアプリ開発をご提案できます。 サーバと連動して会員登録が必要なアプリや、アプリコンテンツを管理者によって制御するようなアプリは、サーバサイドの管理者アプリと連携する必要があります。弊社は、サーバサイドのアプリ開発も得意としているので、リーズナブルでトータルなご提案が可能です。 企業様のインハウス・アプリ、研究段階の実験的アプリ、IoT(Embedded Android, Arduino)、スタートアップ、ベンチャー企業様のアプリから、エンターティメントアプリまで、様々なアプリ開発にたずさわっています。 弊社アプリ開発作業受託に
このページを最初にブックマークしてみませんか?
『[Rails]passenger2.0.3(mod_rails)へ移行』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く