- 1. Unity IAPは公式APIドキュメントがないので課金処理は自前ネイティブ実装がいいかも
- 2. WebViewでIntent://~をハンドリング
- 3. android の alfred を 使った面会システム (ポケットWiFiで距離延長)
- 4. こんなソースコードはイヤだ-分岐はギリギリまで待ってみよう
- 5. Android 電卓のデザインを作成
- 6. Threadを使って一定時間毎にイベントを発生
- 7. 独自のリスナーイベントを作成
- 8. [作業メモ]Firebase Crashlyticsの導入
- 9. Github Actionsを用いてFirebase Test Lab上で実機テストをする方法
- 10. Recipe: LiveData.observe with NonNull
- 11. 【Amazon Alexa】ウチのスマートホーム環境を晒す。【全力で横着しよう!】
- 12. Spek FrameworkをアップデートしたらTestができなくなった
- 13. 電子機器類がオンライン授業に対応しているか否か分類出来るかメモ
- 14. Androidで確実にアプリ評価をあげる方法
- 15. Androidの実機テストで、AdMobの広告が表示されない
- 16. Android の Gradle の感覚を掴むためのざっくりとした説明
- 17. Android端末とPCを接続し、PCのchrome DevToolsを利用する方法
- 18. FlutterアプリをCodemagicでCDしてみた(App Store Connect)
- 19. Android Fragmentの中にタブ付きスワイプビューを作る(kotlin)
- 20. GitHub ActionsでAndroidアプリのCIを構築する方法
Unity IAPは公式APIドキュメントがないので課金処理は自前ネイティブ実装がいいかも
# まとめ
– https://docs.unity3d.com/Manual/UnityIAP.html
– マニュアルはある。しかしAPIについての最新の説明は存在しないので自己責任でやるしかない。
– 自分でネイティブ連携するのが最強# 現状
– https://forum.unity.com/threads/where-has-unity-iap-scripting-reference-gone.660454/
– Where Has Unity Iap Scripting Reference Gone?(Unity IAPのスクリプトリファレンスどこにやった?)-https://forum.unity.com/threads/where-has-unity-iap-scripting-reference-gone.660454/#post-4543948
> Understood on the concern. As we are moving more towards Package Manager, we’ve had to adjust our doc
WebViewでIntent://~をハンドリング
WebViewで外部サイトを表示するようなアプリを作成していると、ページ上の「アプリで見る」みたいなボタンを押すとintent://~というリンクが投げられてくることがある事に気づくと思います。
Chromeアプリなどでそこをタッチするとそのサイトのアプリ版がインストールされていればアプリが開き、インストールされていなければPlay Storeアプリが開いてそのアプリのページに飛ばされます。
これを自作WebViewで実現しようとしたらハマりにハマったので備忘録。# 解決法
まずは結論から。
WebViewClientCompatクラスのshouldOverrideUrlLoadingメソッドの中で [Intent.URI_INTENT_SCHEME](https://developer.android.com/reference/android/content/Intent#URI_INTENT_SCHEME)を使用してパースしてやる。“`kotlin
val webViewClient = object : WebViewClientCompat() {
overrid
android の alfred を 使った面会システム (ポケットWiFiで距離延長)
##コロナのため 患者さんを直接 家族に会わすことはできません。 そこで 使用しなくなった古いアンドロイドタブレットのカメラを利用し、家族はノートPCの画面を使って面会します。 目玉(カメラ)さえついていればスマホでもOKです。
![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211097/1038d9be-dc6d-7cec-3741-a35f1c52172f.png)
|wifi電波状況がよければ 下図のポケットwifiは省略できます|
|:—|
|古物ばかり使ってるので安価です。なおandroidアプリのalfredは無料版で十分ですし、あとノートPCに無料のgoogle クロミウムをいれたら 準備完了です|
|二人 (タブレットとノートPC)は 銀河いやちがったインターネットの上で出会います、彦星と織姫のように|![alfred.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211097/15
こんなソースコードはイヤだ-分岐はギリギリまで待ってみよう
プログラムのソースコードのより良い書き方をまとめていこうと思います。
# 分岐はギリギリまで待ってみよう
“`sample.kt
val numbers = arrayOf(1, 2, 3)
val text = if (isComma) numbers.joinToString(“,”) else numbers.joinToString(“/”)
“`[どのようにリファクタリングできるのか](https://www.sentohsharyoga.com/ja/bad_source_code/entry/use_branch_small_area)
Android 電卓のデザインを作成
#はじめに
こんな感じの電卓みたいなデザインを作ります。
**Android初心者で、XMLがそもそもわからない人向け!**
#電卓のデザインを作成
[Androidのレイアウト?初心者向けざっくり理解](https://qiita.com/mii-chang/items/ee965c1e8826d4e59414)
こちらをまずは読むと、より理解が深まるかと。**全体的なやり方としては、`LinearLayout`の中にさらに`LinearLayout`を入れ込む感じ。**
##まずは横幅が均等なボタンを4つ
#はじめに
Threadを使って一定時間毎にイベントを発生させるアプリを作ります。
独自イベントは、別途独自イベントを紹介するページを参考にして下さい。#アプリの仕様
ボタンを押すとカウンターが自動的にカウントアップするアプリを作ります。
100ms 1/10秒ごとに1カウントアップします。
開始ボタンでカウントアップ開始、停止ボタンがカウントアップを停止します。
※中断は未使用#準備
スレッドを使うのですがそのまま使うと画面View(UI)にアクセス出来ないのでcoroutines(コルーチン)を使用します。コルーチンを使うにはGradleスクリプトのbuild.gradle(app)に下記を追加する必要があります。##build.gradle(app)
“`build.gradle(app)
dependencies {
省略
implementation ‘org.jetbrains.kotlinx:kotlinx-coroutines-android:1.1.1’
}
“`##strings.xml
“`strings.xml
独自のリスナーイベントを作成
#はじめに
Androidのソフト開発ではイベントを受け取るためにリスナーを使います。
ボタンをクリックするとonClickイベントが発生するのでそれをリスナーで受け取って処理できるので無駄がありません。
では自分で作ったクラスに独自のイベントを作成するにはどのようにすれば良いのでしょうか?
ネットや書籍を調べても書かれていません。他の人はどのようにして設計しているのか不思議です。説明はしますが、何の資料も無いため手探りで適当に作っていたら偶然出来ただけなので詳細な説明は出来ません。むしろ何故動いているのか知りたいぐらいです。
#クラスの設計
独自のイベントを使うクラスを設計してみます。
クラス**Calc**はメソッド**execute**の引数v1とv2の商を計算するクラスとします。
計算が出来れば**onSuccess()**イベントが発生し、右式に**0**を渡されると**onDivZero()**イベントを発生させます。##レイアウト設計
“`activity_main.xml
[作業メモ]Firebase Crashlyticsの導入
## 事前準備
– Android Studio## Firebase SDKの導入
https://firebase.google.com/docs/android/setup## Crashlyticsの導入
https://firebase.google.com/docs/crashlytics/get-started?platform=android#kotlin+ktx## 次のステップ
– [強制クラッシュで検証](https://firebase.google.com/docs/crashlytics/test-implementation?platform=android)
– [カスタマイズ](https://firebase.google.com/docs/crashlytics/customize-crash-reports?platform=android)
## ハマりポイント
公式の導入手順ドキュメントは多言語対応していますけど、日本語の場合にAndroid版の導入手順はまだないらしいです。なので言語を英語に切り替えてから、Andro
Github Actionsを用いてFirebase Test Lab上で実機テストをする方法
# 概要
本記事ではGithub Actionsを使用して、Firebase Test Labで実機テストを行う方法を紹介します。
具体的には、プルリクエストをトリガーにGithub Actionsのworkflowが起動し、Firebase Test Lab上でRoboテストを、自動で走らせる方法を紹介します。## きっかけ
これを試したきっかけは、仕事先でライブラリのアップデートをした際に、クラッシュ等がないかの確認のため、実機をポチポチするという作業がとても面倒に感じられ、Firebase Test Labで自動化できるのではないかと考えたことです。
さらにその調査がプルリクをトリガーに走ってくれたら素敵だと思いGithub Actionsを用いました。# はじめに
Androidの実機を用いたテストはとても骨が折れるといわれています。
その理由の一つとして、端末の多さがあげられます。(参考: [Android端末一覧(Wikipedia)](https://ja.wikipedia.org/wiki/Android%E7%AB%AF%E6%9C%AB%E4%B8%80%
Recipe: LiveData.observe with NonNull
### Problem
“`kotlin
viewModel.order.observe(viewLifecycleOwner, Observe {
it?.let { applyCurrentOrder(it) }
})
“`
toooooo many redundant code for just observe NonNull object with `LiveData`.# Ingredients
1. `lifecycle-livedata-ktx` version 2.1.0 or higher
2. Kotlin# Metod
#### First.
Add a dependency `lifecycle-livedata-ktx` in `app/build.gradle`.“`gradle
dependencies {
def lifecycle_version = “2.1.0” // or higher
…
implementation “androidx.l
【Amazon Alexa】ウチのスマートホーム環境を晒す。【全力で横着しよう!】
#全力で横着しよう!
– 忙しい時ほどリモコンが見つからない
– 寝ているときに照明を消したい
– 真夏、真冬に家に入った瞬間が不快
– ジム帰りにお風呂が沸いていて欲しい
– 朝急いでいて自動掃除機動かし忘れた
– smart home化に興味はあるが、難しそう
– ~~灯りがついていない家がさみしい~~そんなことを考えたことがある人にオススメする「スマートホーム化」の記事です
知り合いから「音声で家電操作ってどうやってるの?」と聞かれることがあるのでご紹介。
#環境の紹介
・androidのスマホ(iOSで対応のアプリがあるか未確認です)
・tp-linkのwi-fi無線LANルーター
・amazon prime会員である
・[Echo Dot](https://www.amazon.co.jp/dp/B07PFFMQ64/ref=fs_ods_fs_aucc_cru)(べつにdotでなくともEchoでもEcho plusでもOK)
・[TECKIN スマートプラグ](https://www.amazon.co.jp/%E3%82%B9%E3%83%9E%E3%83%
Spek FrameworkをアップデートしたらTestができなくなった
Spek Frameworkをアップデートしたらエラーが出て、困ったので、その対処を残します。
# エラー内容(Spek Framework 2.0.11-IJ2019.2)
バージョンを上げたら以下のようなエラーがでた(以前のバーションだと出なかった)
“`
io/mockk/proxy/MockKAgentFactory
java.lang.NoClassDefFoundError: io/mockk/proxy/MockKAgentFactory
…java.lang.NoClassDefFoundError: Could not initialize class io.mockk.impl.JvmMockKGateway
…
“`# 対処
根本的な問題の解決にはなっていないが、一時的な対処として以前のバージョンに戻してみた。## Step1
事前に、Android StudioからSpek FrameworkをUninstallしてください。
まず、[Spek Framework](https://plugins.jetbrains.com/plu
電子機器類がオンライン授業に対応しているか否か分類出来るかメモ
最近オンライン授業に使われているサービスを、少し書き並べてみます。
+ HTML5ブラウザを前提としたWebサービス
+ WebブラウザベースのLMS (moodleとか)
+ Web会議システム (zoom, WebExとか)
+ G Suite, MS Office365 のWebブラウザベースのもの
+ G Suite for Education Apps
+ Google Classroom
+ Hangouts Meet
+ Youtube ?
+ Microsoft Office365 Apps
+ Word, Excel, Powerpoint
+ Teams ほか
+ (サービスに紐づいた様々な)アプリ
+ zoom
+ Cisco WebEx
+ ほかで、ご家庭でお持ちのハードウェアは何種類かに分かれ、このサービスが必ずしも満足に動作するとは限らないわけです。ちょっと分類してみます。
| PC系 | PC(Windows) | PC(macOS) | PC(Chr
Androidで確実にアプリ評価をあげる方法
#これ実行したらどこかの誰かに怒られそうなので、コード、スクショ等一切のせません。
Androidの場合評価ダイアログというものが存在しないのはみなさんご存知だと思います。
IOSだと星を選択して評価を送信するダイアログがあります。もし、作成したい場合自作するしかないのですが、IOSみたく星を選択することは不可能でPlayStoreに飛ばすしか手段がありません。その代わり項目等も自作するしかありません。
#その代わり項目等も自作するしかありません。
はい。お気づきの方はその通り。
星5つの場合だけ評価させる方法があります。
それはダイアログのボタンを3つ用意し、・星5の場合はレビューお願いします。
・問題がある場合はお問い合わせへ
・あとで見るのようにしてしまえば良いのです。
問題がある場合にはお問い合わせにいくし、星5ならレビューを書いてくれます。ただこれを行い審査が通るかどうかは不明です。
評価の不正コントロールと取られても無理ない内容だと思うのであまりおすすめはしないです。やるというなら自己責任で
Androidの実機テストで、AdMobの広告が表示されない
# 事象
AdMobを利用していて、Googleの用意するテスト用の広告ユニットIDでビルドすると表示される。
なのに本番用では表示されない…~~~
I/Ads: Ad failed to load : 3
(中略)
I/Ads: Use RequestConfiguration.Builder().setTestDeviceIds(Arrays.asList(“XXXXXXXXX”) to get test ads on this device.
~~~といったエラーがでる…
# 解決方法
エラーメッセージにある通りですが、~~~
RequestConfiguration.Builder().setTestDeviceIds
~~~をアプリコード中に記述します。
というか、AdMobのドキュメントにも書いてあります……
https://developers.google.com/admob/android/test-ads?hl=ja#add_your_test_deviceどこにこのコードを書くべきか?というところですが、広告表示前に一度呼び出されれば良いよ
Android の Gradle の感覚を掴むためのざっくりとした説明
## 前略: Gradleは奥が深くできることが多いがなるべくシンプルに説明したい
GradleはAndroidアプリ開発には必須なスキルですが、環境設定系の内容なので役割として触れる人が限られてしまうことが多いのではないかと思います。
そんなGradleに対して、なんとなくストレスを減らし、なんとなく感覚を掴む、チーム内での最低限の共通認識にする、などに役立てたらとと思ってます。
なるべく短く簡潔を心がけますm(_ _)m## Gradle is
– オープンソースのビルドシステムです。
例えばJavaプロジェクトではjarファイルを、JavaのWebアプリならwarファイルを作ってくれたり、汎用性の高さからさまざまなプラットフォームで使われています。
ビルドはすべてプラグインで行うようになっていて、JavaをビルドしてJarファイルを作りたいなら build.gradle ファイルに以下を定義して gradle を実行します。
“`groovy
apply plugin: ‘java’
“`
– ローカル上やネットワークリポジトリ上にあるライブラリとの依存関係の解決がで
Android端末とPCを接続し、PCのchrome DevToolsを利用する方法
## おおまかな手順
1. Androidの開発向けオプションを有効にする
2. USBでPCに接続する
3. PC側のChromeで`chrome://inspect`に接続する### 操作した環境
– macOS 10.14.6
– Android 9## 詳細
### 1. Androidの開発向けオプションを有効にする
1. `設定`から`端末情報`の画面に進む
2. 下部にある`ビルド番号`を7回タップすると開発向けオプションが有効になる
3. `設定`から`システム`の画面にいき、`詳細設定`を開く
4. `開発向けオプション`が表示されているのでタップ
5. 少し下に画面スクロールするとある`USBデバッグ`をONにする → `ここ忘れがち`### 2. USBでPCに接続する
1. USBでPCに接続する
2. Android側で「USBデバッグを許可しますか?」と聞かれるのでOKで許可する
3. Android側のChromeを立ち上げて適当なwebページを表示する### 3. PC側のChromeで`chrome://inspect`に接続する
1
FlutterアプリをCodemagicでCDしてみた(App Store Connect)
Google Playストア版の続きになります。
FlutterアプリをCodemagicでCDしてみた(Google Playストア)
https://qiita.com/kasa_le/items/17720a02ea0a4de2b66eCodemagicへは、すでにtagトリガーなどで動くワークフローがあるものとします。
([こちらの記事](https://qiita.com/kasa_le/items/d23075d817f42e869778#codemagic%E3%81%AB%E5%85%A5%E3%82%8C%E3%81%A6%E3%81%BF%E3%81%9F)などを参照して下さい。)
また、App Store Connectにて、アプリを登録済で、かつTestFlightへ手動でアプリ公開をしたことがあることが前提です。
([こちらの記事](https://qiita.com/kasa_le/items/fed9f25b92091bd162ce)などを参照して下さい。)# 手順
基本的には以下のページの通りです。
https://docs.codemag
Android Fragmentの中にタブ付きスワイプビューを作る(kotlin)
#はじめに
完成イメージはこんな感じAndroid kotlin
fragmentの中にViewPageでスワイプできる画面を作る pic.twitter.com/uayDvUnmIr— げん げんと (@gento34165638) May 31, 2020
「`BottomNavigationView`のボタンから遷移した先の、fragmentのページの中で、さらにfragmentで
GitHub ActionsでAndroidアプリのCIを構築する方法
## はじめに
GitHub Actionsを使い、Androidアプリのビルドと単体テスト、静的解析を行うCIを構築します。
## 本記事で書かないこと
– GitHub Actionsの概要や基本的な操作方法
[私が以前書いた記事](https://qiita.com/uhooi/items/29664ecf0254eb637951) が参考になると思います## 設定ファイルの紹介
設定ファイルの内容を上から順に紹介します。
### name
ワークフローの名前を設定します。
私は単純に「CI」としています。
“`yaml:ci.yml
name: CI
“`### on
ワークフローを実行するトリガーを設定します。
私はGit-flowモデルで開発しており、以下のように設定しています。
“`yaml:ci.yml
on:
push:
branches:
– master
– develop
paths-ignore:
– docs/**
– README.md