2024年2月1日木曜日

PayPalからの「ご対応が必要です: 推定支出をご提出ください」の申告方法

 PayPalからの「ご対応が必要です: 推定支出をご提出ください」というメールが届いた。

(前略)行っていただく必要のある手順は以下のとおりです。

  • まだPayPalアカウントに銀行口座を登録されていない場合はご登録ください。
  • ◯月のPayPalでの使用予定金額*をお知らせください

はいはい、申告すればいいのねって感じだったが、肝心のその申告方法がわからなかった。

問い合わせた結果、「PayPalでの」という部分のリンクをから進むのが正解なのだが、そのリンクから申告ページが表示されるまでにはメールが届いてから3営業日ほど必要とのことだった。

というわけで正解は「メールが届いてから3営業日ほど待って、[PayPalでの] の部分のリンクをクリックする」でした。同じ状況で困ってる人はとりあえず待ちましょう。

2021年3月20日土曜日

Android PieでImageViewやbackgroundに設定した画像の色が変わる

 Android PieでImageViewやbackgroundに設定した画像の色が変わる現象に遭遇した。
(静的に色が変わったり、短い期間に動的に繰り返し変わってチカチカ点滅するような感じになる)

今のところAndroid Pie ( Android 9 )のSO-05KとEssential Phone PH-1で発生。またユーザーさんのレビューとしても上記チカチカが挙がっていて、そちらのOSもAndroid Pie。

モバイルSuicaやウェザーニュースのアプリでも明らかに開発側が意図していないだろう変色が起きていることから、広く発生している問題なのだろうと思う。

というわけで自分のアプリで少し現象を追ってみると大変不思議な挙動で、まず初回インストールでは発生しない。アップデートインストールで発生する。

発生した場合色が変わるタイミングが不明(起動直後に変わったり変わらなかったり)
状況的にはAdmobの特定のバナー広告を読み込むと発生しているように見える。(広告をロードしない場合は発生しなかったが、たまたま顕在化しなかっただけかもしれないので確定的ではない)
Admobのバージョンを18.6.0まで以降19.8.0までいくつかのバージョンで試したが、いずれもNG。

回避方法としてはハードウェアアクセセラレーションをオフにするとこの現象は発生しなくなる。
android:hardwareAccelerated="false"
でもこれだとパフォーマンスが下がってアニメーションがカクカクになってしまうので、
backgroundをvector drawableにする( vector drawableなら発生しない )などしてなるべく影響範囲を抑えたうえ、
どうしてもラスター画像が必要なところに対してだけ
if (Build.VERSION.SDK_INT == Build.VERSION_CODES.P) {
imageView.setLayerType(View.LAYER_TYPE_SOFTWARE, null );
}
としてハードウェアアクセラレーションを無効にするとよい。

おそらく何らかの条件が重なった時にだけ起こる問題のようで、StackOverflowでも全然見つからない。
こんなので困ってる人はそうそういないと思うけど、もしいたら参考にしてください。

2021年1月2日土曜日

Macで音が変な時(音飛び、プチプチ音、クリック音がする)はiOSシミュレーターが原因かも

Macで再生音がおかしくなる問題が発生して困った。
音飛びというよりはプチプチ音が断続的に入るイメージ。
非常に耳障りが悪い。

直接的な原因としてはバッファアンダーランな感じ。
(断続的にサンプル値が0になるとこういう音になる)

YoutubeでもZoomでも発生。
スピーカーでもイヤホンでも同じ。

で原因を探していると以下を見つけた
 https://developer.apple.com/forums/thread/132423

端的に言えばiOSシミュレーターを起動していると発生するよ、というもの。
確かにiOSシミュレーターを落としたら直った。

CatalinaでもBig Surでも発生する模様。

XCode12から発生し始めたらしい。直してほしいなあ。

2020年9月14日月曜日

フォルダを標準ファイルアプリで開くIntent

Android 10で導入されたScoped Storageによって、ストレージに読み書きしていたアプリの開発者は大変な目にあっていますが、私も例に漏れず対応に追われています。

中でも困っているのが、自作のアプリが部分的にファイルエクスプローラー機能を持っている点。

MANAGE_EXTERNAL_STORAGE を使うという最終手段は残っていますが、恐らくGoogle Playのポリシー的に許可されないだろうという気持ちもあり、それ以外の道を探しています。

自前のエクスプローラー機能ではフォルダの作成やリネーム、移動などの基本的なファイル操作ができるのですが、requestLegacyExternalStorageが使えなくなるだろうAndroid 12では今のままでは使えなくなります。

大体手段として全てSAFでやるという方法もありますが、ちょっと対応とテストが大変なのでやめることにしました。

ファイルを開きたい場合ACTION_GET_CONTENTを使うとファイルピッカーを起動できますが、この場合フォルダの作成などファイル編集系メニューが表示されません。

ファイルピッカーとしてではなく、単に¥フォルダを指定してファイルアプリを起動するには以下のようなコードを呼び出します。

※ uri%A3はパスセパレーターです。

Intent intent = new Intent(Intent.ACTION_VIEW);

Uri uri = Uri.parse("content://com.android.externalstorage.documents/document/primary%3APictures");
intent.setData(uri);
if (intent.resolveActivityInfo(getPackageManager(), 0) != null)
{
startActivity(intent);
}else{
Toast.makeText( App.getContext(), "Failed to open file explorer", Toast.LENGTH_SHORT ).show();
}

2019年12月18日水曜日

iOSアプリのアプリ内課金の審査で"デベロッパの対応が必要"と言われる

かなりトラブったのでメモ。

iOSアプリのアプリ内課金を非消耗型からサブスクリプション型に変えた
非消耗型の時には特に苦労した覚えがないのだが、
今回はApp内課金を審査したところ"デベロッパの対応が必要"という形で差し戻された

内容を読むと「君のアプリがちゃんとサブスクリプションに対応できてるか確認するからバイナリをアップロードしてね」というもの。

これが不親切で具体的にどういう手順でバイナリをアップロードすればいいのかが全く書かれていない。そして、App Store Connect内を隅から隅まで探してもそれに対応するようなアップロード場所がない。

調べたところフォーラムで対応策が書かれていた(codeulikeさんの投稿)
https://forums.developer.apple.com/thread/35757

以下日本語版手順
1.App内課金から、差し戻されたサブスクリションを削除して、作り直し。この時「審査へ提出」してはならない。
※製品IDを変えないといけなくなるが、この状態に陥っている場合これは避けられない(個別に問い合わせればなんとかしてくれるかもしれない)

2.新しい製品IDで動作確認。

3.普段通りアプリのリリース作業をする(Xcodeからアップロード->App Store Connectで編集)。この時、App Store Connect上で情報を入力する時にGame Centerの項目の上に「App内課金」という項目が付加されるので、ここで1で作り直したApp内課金を追加する。1で「審査へ提出」してしまった場合はこの項目が表示されないのでもう一度やりなおし。


2019年7月12日金曜日

Gitで SSL certificate problem: Invalid certificate chainと表示されクローンできない

Gitで SSL certificate problem: Invalid certificate chainと表示されクローンできない

こんな時Web上ではSSLの検証をoffにすれば解決するよという情報が目につくが、
自分の場合は端末の時刻が年単位でずれているせいだった。

時刻を直すことで無事cloneできるようになった。

2019年5月6日月曜日

Androidのjava.net.URI.relativizeの挙動がおかしい

URI base = new URI("http://hostname/root");
URI uri  = new URI("http://hostname/root/yyy/zzz.html");
URI rel = base.relativize(uri);

上記コードのrelは
yyy/zzz.html
となるのが正しい挙動(Javaではそうなる)のはずだが、
Android 8ではroot/yyy/zzz.html が返ってくる。

調べてみると、Androidのrerativizeのソースにこの挙動が明記されていた

// Android-changed: The original OpenJdk implementation would append a trailing slash
// to paths like "/a/b" before relativizing them. This would relativize /a/b/c to
// "/c" against "/a/b" the android implementation did not do this. It would assume that
// "b" wasn't a directory and relativize the path to "/b/c". The spec is pretty vague
// about this but this change is being made because we have several tests that expect
// this behaviour.

解決策はない? 自分はhttp://www.devx.com/tips/Tip/13737 を使うことにした