2024年1月26日金曜日

Google AdsenseやGoogle Play Consoleでシンガポールの財務情報提出

 Google AdsenseとGoogle Play Consoleでシンガポールの財務情報提出するようにとアラートが表示されていました。

承認まで2か月弱もかかったので、ブログに残しておきます。

例のごとく、非常に分かりにくく、苦労しました。


まず、シンガポールの財務情報を提出しました。その際の居住者証明をマイナンバーカードをスマホのカメラで撮影した画像で行いました。マイナンバーカードで承認されたと書かれたブログを参考にしました。

シンガポールの財務情報はすぐに承認済みになりましたが、税法上の居住地は審査中と表示されました。そして、10日後、税法上の居住地における追加書類が必要とアラート表示とメールが来ました。

ネット上で、マイナンバーカードでは承認されないという情報を見つけたので、税務署から居住者証明書をもらうことにしました。他の人のブログを参考にして、提出国をアメリカで申請してしまいました。シンガポールの財務情報は承認となっているので、何の疑問も持ちませんでした。

郵送で申請書を送付し、数日後、返信されてきたので、コンビニでPDFファイルとして取り込んで、提出しました。

年末年始を挟んだせいか、20日後に、税法上の居住地における追加書類が必要とアラート表示とメールが来ました。

Adsenseの財務情報管理のページを見返して、既に承認されたシンガポールの財務情報の提出した書類が、最初マイナンバーカードで行ったのに、居住者証明書に変わっているのに気づき、税法上の居住地は、提出国はシンガポールにしなければいけないのではないかと考えました。

税務署に提出国をシンガポールで居住者証明書を再度発行してもらいました。返信されてきた居住者証明書のPDFファイルを提出しました。PDFファイルは念のためカラーにしました。

8日後に、承認されたとメールが届きました。


税法上の居住地は、居住者証明書で行い、提出国に気を付けてください。

また、支払いが保留されているとAdsenseのページなどに表示されている間も、振り込まれていました。

Google Play ConsoleもAdsenseと同様に提出を行い、承認されました。


2023年6月20日火曜日

Google Drive api v3で例外発生

久しぶりに、はまりました。自分でも忘れないように残しておきます。


機能の更新のついでにSDKを33に、gradle-wrapper.propetiesを8.0に上げて、リリース前に念のため、releaseモードで動かしてみたら、Google Drive api V3を使用したバックアップと復元がエラーとなってしまうことに気付きました。

例外の内容は以下です。

com.google.api.client.googleapis.json.GoogleJsonResponseException: 403 Forbidden
{
  "code" : 403,
  "errors" : [ {
    "domain" : "global",
    "message" : "The request is missing a valid API key.",
    "reason" : "forbidden"
  } ],
  "message" : "The request is missing a valid API key.",
  "status" : "PERMISSION_DENIED"
}

API keyなんていままで使っていなかったので、この例外の意味は分かりませんでした。

しかし、releaseモードだけでおかしくなるのは、大抵は、難読化が原因です。


結論から書くと、proguard-rules.proに以下を追加すれば、正常に動作します。
-keep class com.google.api.services.drive.** {*;}
-keep class com.google.api.client.http.HttpHeaders {*;}



1行目は以前から記述していたのですが、今回2行目を追加しました。ここに行きつくのは結構大変でした。

まずは、世界中の誰かが解決していれば楽なので、ネット検索したのですが、見つかりませんでした。

例外の内容に従って、API keyを作成して、設定してみましたが、新たな例外になってしまいました。

あるいは、drive.files.list()等の実行時にトークンが消えているようなので、drive.files.list()実行時にトークンを渡してみると動くが、ダウンロードを行う以下の部分が違うエラーになってしまいました。
drive.files().get(fileId).executeMediaAndDownloadTo()

その他にも四苦八苦したのですが埒が明かないので、大変面倒くさいですが、debugモードとreleaseモードでデバッグをして、ライブラリ内の変数の中身を比較することにしました。
releaseモードでのデバッグは、appのbuild.gradleのbuildTypesのreleaseに以下を追加でできます。

buildTypes {
    release {
        :
        debuggable true
        :
    }
}

そして、com.google.api.client.http.HttpHeaders関連がreleaseモードでは、空になっている部分があり、そのせいで、トークンが消えていたことが分かりました。
proguard-rules.proに前述のkeepの行を追加して動かすと、バックアップも復元も全て正常に動作しました。

以上です。


2023年5月12日金曜日

フローティングメモのメモとウェブ追加

本ページでは、Androidのアプリの「フローティングメモ」に、メモ・ウェブの追加・変更をパソコンで行います。
本機能をご利用になるためには、「フローティングメモ」で定期購入とバックアップの設定を行う必要があります。
また、変更は、あらかじめ「フローティングメモ」の通常の画面で変更したいメモまたはウェブを長押しすると表示される操作選択画面で【PCで編集】を選択してデータを送信する必要があります。

分類、タイトル、内容の入力後、【入力したデータをアップロード】をクリックして下さい。
アップロード後、「フローティングメモ」の最初の画面でメニューの【同期】をタップすると取り込まれます。
















2022年9月30日金曜日

しつこい「android.os.TransactionTooLargeException」

こんにちは。



結構前から掲題の例外「android.os.TransactionTooLargeException: data parcel size 754884 bytes」が発生していて、何度も対応していたのですが、未だに稀に発生していました。

非常に稀なので、優先順位を下げていたのですが、再度本腰をあげて調査しました。



今までも自分で再現できたことが無かったのですが、まずは再現させることから取り掛かりました。

これの例外は、画面の回転、画面がバックスタックに移動、ViewPagerでスクロールなどで、画面の状態を保持する際に、データサイズが上限を超えたときに起きるようです。

ただし、上限は1MBらしいですが、1MB以下でも例外が発生しています。

状態保持は、ActivityやFragmentの「onSaveInstanceState(Bundle)」で行い、「onCreate(Bundle)」などのBundleを使って復元します。


そこで、1MB以上保持するように計算して、テストデータ作成と画面操作(スクロール&バックスタック)をしますが、例外は発生しません。

ここで、Android StudioのProfilerでMemoryのCapture heap dumpを取ってみます。

一覧の「Fragment$SavedState」をみると「Retained Size」が確かに1MB超えています。



そこで、前述の操作はDebugモードで行っていたので、Releaseモードで全く同じ操作をしてみたところ、例外発生しました。

この例外は、Debugモードでは発生しないと推測しました。あくまで推測ですが。



そして修正を施して、Releaseモードでテストを行って、例外が発生しないことを確認しました。

修正した内容は、ViewPagerを使った画面でEditTextを複数配置していて、EditTextの状態保持は既存の処理に任せていたのを自前で行うことに変更しました。

EditTextのプロパティに「android:saveEnabled="false"」を追加して、既存の処理は止めました。



これで様子見です。


以上です。


2022年9月29日木曜日

実行中の通知が表示されない

こんにちは。


Android12の動作の変更点の見逃していた部分を書いておきます。


自分が作ったアプリをAndroid12で操作していると実行中の通知が表示されないのが気になっていました。

実行中の後の完了の通知は表示されるので、緊急性はないかと後回しにしていました。


しかし、新しいアプリをリリースするにあたって、再度、Android12の動作の変更点をじっくり読み返して、やっと気づきました。


フォアグラウンド サービス通知の UX の遅延」のせいでした。

「短時間実行されるフォアグラウンド サービスのエクスペリエンスを簡素化するため、Android 12 以降を実行するデバイスでは、特定のフォアグラウンド サービスについて、フォアグラウンド サービス通知の表示を 10 秒間遅らせることができます(少数の例外があります)。この変更により、通知が表示される前に存続時間の短いタスクを完了する機会が与えられます。」


10秒も遅らせると!!

実行を通知する必要がなく、ちょっとした処理であれば、いちいち通知しないのはよいでしょうが、自分のアプリの場合は実行しているのか分からないのは困ります。


すぐに通知を表示させる方法は簡単で、以下のコメントの次の行を追加するだけです。



よかったら、アプリの上に表示できるメモ

フローティングメモ - Google Play のアプリ

をよろしくお願いします。


以上です。






 

2022年9月26日月曜日

フローティングメモの紹介動画を作りました。

こんにちは。


初めて動画を作りました。フローティングメモの紹介動画です。




動画編集ソフトは、無料で使用できるパソコン版の「Clipchamp」です。

動画編集には抵抗があったのですが、思っていたよりは難しくはなかったです。

作成した動画をgoogle playのフローティングメモのページにも設定しました。


フローティングメモ - Google Play のアプリ



2022年9月12日月曜日

新アプリ「フローティングメモ」をリリースしました!

こんにちは。

ブログを書くのは久しぶりです。


タイトルの通り、新アプリ「フローティングメモ」をリリースしました。


メモとしては、シンプルなメモですが、他のアプリの上に浮いているように表示させることができるようにしました。


通常画面の上にフローティング画面を表示


ちょっとしたメモを見るだけで、実行中のアプリがバックグランドに行ってしまい、戻ると再表示に時間がかかるってしまうことがよくあります。


「フローティングメモ」は、実行中のアプリをバックグランドに行かせず、表示します。


それと、もっと簡単にメモを確認する方法として、通知に自由にメモを設定できるようにしました。


通知に設定しておけば、通知をベローンと引っ張り出すだけで、確認できます。


通知

通知には、お好きなアプリの起動ボタンも設置できます。


ヘルプは、以下です。

https://www.bnbnapp.com/2022/07/floatingmemo-help.html


google playは、以下です。

https://play.google.com/store/apps/details?id=com.bnbnapp.floatingmemo


どうぞ、よろしくお願いします。