cordova-plugin-camera が android 13 / API33で起動しない。

android 版は 2023/9 から API33 に対応しないと、UPDATE 申請できなくなった。
なのにカメラプラグインが対応できていない・・・
cordova plugin add cordova-plugin-camera@latest

と思っていたら

cordova plugin add https://github.com/apache/cordova-plugin-camera.git

で取得した対応できていた。
プラグインIDから取得した場合、少し古いのかな。

mac os 13 で Ignoring json-1.8.6 because its extensions are not built. Try: gem pristine json –version 1.8.6

久しぶりビルドするといつでも何かが起きる。
mac os 13 にアップデートしたから?

cordova platform add ios@latest したら

 Ignoring json-1.8.6 because its extensions are not built. Try: gem pristine json –version 1.8.6
 Ignoring ffi-1.15.5 because its extensions are not built. Try: gem pristine ffi –version 1.15.5

の警告が大量発生、ただこのままでも問題なく動作するような感じだが、気持ち悪い。

sudo gem pristine json –version 1.8.6 を実行してみるが

Operation not permitted と表示され、実行できない。

どうも、ターミナルのセキュリティを変える必要があるみたい

mac のコンパネから「プライバシーとセキュリティ」→「アプリケーション管理」→「ターミナル」をチェック
 ※この時に、ターミナルは全て止めておく

その後、
> gem pristine json –version 1.8.6
> gem pristine ffi –version 1.15.5

> gem install cocoapods

> cordova platform rm ios
> cordova platform add ios@latest

解決した。

https://github.com/CocoaPods/CocoaPods/issues/11627

ITMS-90809: Deprecated API Usage

New apps that use UIWebView are no longer accepted. Instead, use WKWebView for improved security and reliability. Learn more (https://developer.apple.com/documentation/uikit/uiwebview).

Apple に ipa をアップ時、上記のようなエラーメールが届いていて、実行ファイルがアップされていなかった。
メールで届いていたので、発見に時間がかかってしまう。

Appleでは UIWebview を使えなくなってしまったようだ。

cordova iOS5.1.1 以降にする必要。

プラグインを追加
cordova plugin add cordova-plugin-wkwebview-engine

config.xml ファイルに以下を追加

<platform name="ios">
    <preference name="WKWebViewOnly" value="true" />

    <feature name="CDVWKWebViewEngine">
        <param name="ios-package" value="CDVWKWebViewEngine" />
    </feature>

    <preference name="CordovaWebViewEngine" value="CDVWKWebViewEngine" />
</platform>

そうすることで、WKWebView のみ使用されるようだ。

cordova 決済 stripe クレジットカード情報保存

商品購入時にユーザーに毎回クレジットカード情報を入力してもらうのは使い勝手が悪いので
クレジットカード情報を stripe で保存できる機能を使う必要がありそう。

クライアント(JavaScript)側で実装するのかと勘違い。
cordova-plugin-stripe を調べても見つかるわけがない。

サーバー(phpなど)側で実装する。

【クレジットカード保存してなかった時は】
// オーソリ(与信枠の確保)
$charge = \Stripe\Charge::create(array(
‘amount’ => $_POST[‘amount’],
‘currency’ => ‘jpy’,
‘source’ => $_POST[‘token_id’], // クレジットカードトークン
‘capture’ => false,
));
// 売上の確定
$charge->capture();

【クレジットカードを保存するようにする場合】
// 顧客情報作成
$stripe_customer = \Stripe\Customer::create(array(
‘source’ => $_POST[‘token_id’], // クレジットカードトークン
’email’ => $_POST[’email’], // メールアドレス
‘name’ => $_POST[‘customer_name’], // 顧客の名前
));

// オーソリ(与信枠の確保)
$charge = \Stripe\Charge::create(array(
‘amount’ => $_POST[‘amount’],
‘currency’ => ‘jpy’,
‘customer’ => $stripe_customer->id,
‘capture’ => false,
));
// 売上の確定
$charge->capture();

そして、$stripe_customer->id の値を データベース(ユーザー情報)などに保持しておく

【既にクレジットカードを保存している場合】

// データベース(ユーザー情報)から STRIPEの顧客IDを取得
$stripe_customer_id

// オーソリ(与信枠の確保)
$charge = \Stripe\Charge::create(array(
‘amount’ => $_POST[‘amount’],
‘currency’ => ‘jpy’,
‘customer’ => $stripe_customer_id,
‘capture’ => false,
));
// 売上の確定
$charge->capture();

facebook ログインエラー このアプリケーションにログインできませんでした

android で 開発時 cordova で facebook シングルサインオンを試してみると
「ログインエラー:このアプリケーションにログインできませんでした。しばらくしてから、もう一度実行してください。」のエラー

アプリのキャッシュを消しても、アプリ再インストールしても、待ってもダメ。

結果、developer facebook に登録するキーハッシュの値が正しくなかった

> keytool -exportcert -alias xxxxx -keystore xxxxx.keystore | openssl sha1 -binary | openssl base64

-alias の部分も keystore 作成時に指定した 文字と同じでないと正しい、ハッシュキーは作成されない。

cordova で windows アプリ

コマンドで環境を作る前に、visualStudioで環境が作れるのかを試す。

空プロジェクトを実行しようとすると以下のエラーが

DEP0100: ターゲット デバイスで開発者モードが有効になっていることを確認してください。エラー 800704C7 のため、開発者ライセンスを取得できませんでした。

「windows+x」 → 「設定」 → 「開発者向け」 → 「開発者モード」を選択
することで、実行できました。

WindowsアプリでもユニバーサルWindowsプラットフォーム(UWP)だから
なのでしょうね。

cordova-plugin-firebase が急にバージョンチェックでコンパイルできない

以前までコンパイルできていたプロジェクトが以下のようなエラーになる。

The library com.google.android.gms:play-services-measurement-base is being requested by various other libraries at [[15.0.2,15.0.2]], but resolves to 15.0.4. Disable the plugin and check your dependencies tree using ./gradlew :app:dependencies.

ネットで色々と調べていると、
https://github.com/arnesson/cordova-plugin-firebase/issues/1066

cordova-plugin-firebase で利用される個々のライブラリのバージョンを指定する必要があるとのこと
とりあえず、
cordova platform rm android
cordova plugin rm cordova-plugin-firebase
cordova plugin add cordova-plugin-firebase@latest –save
plugins\cordova-plugin-firebase\plugin.xml を編集して
====================================
<framework src=”com.google.android.gms:play-services-tagmanager:16+” />
<framework src=”com.google.firebase:firebase-core:16.0.8″ />
<framework src=”com.google.firebase:firebase-messaging:17.5.0″ />
<framework src=”com.google.firebase:firebase-config:16.4.1″ />
<framework src=”com.google.firebase:firebase-perf:16.2.4″ />
====================================
cordova platform add android@latest

cordova run android
だが、別のエラーが
platforms\android\build.gradle を編集して
====================================
classpath ‘com.google.gms:google-services:4.1.0’

classpath ‘com.google.gms:google-services:4.2.0’
====================================
cordova run android
だが、別のエラーが

以下のプラグインも追加で必要そうだ。
cordova plugin add cordova-android-firebase-gradle-release@3.0.0
cordova plugin add cordova-android-play-services-gradle-release@3.0.0
※最新で 4.0.0 だったが、3.0.0 でないとエラー。詳しくは調べずに、3.0.0 に。

根本的に cordova-plugin-firebase の更新を待つべきかもしれないが
依存関係を無視するという方法があり
platforms\android\app\build.gradle を編集して
最終行に以下を追加
====================================
com.google.gms.googleservices.GoogleServicesPlugin.config.disableVersionCheck = true
====================================
cordova run android
で実行はできた。プッシュ通知は安定して送られるのか?
この解決はあかんのだろう。

facebook 指定されたURLは、アプリケーションの設定で許可されていません

テストユーザーを登録したのに、件名のようなエラーがでる。
Androidでテストするには Androidのプラットフォーム追加を developer facebook で行っておかないといけない。

アプリIDはanroidで開発者登録しておいた方が良いし
Androidなら、キーハッシュが必要。