スマホアプリ多言語対応

制作と同じくらい動作検証が大変。

【iOSの場合】
アプリは 
「設定」→「一般」→「言語と地域」→「iPhoneの使用言語」を変更すれば
確認できる。
非対応の言語でも、優先順序に対応言語が含まれていたら選択される。

App Store の動作確認が大変
「設定」→上部にある「ユーザ名」→「iTunes と App Store」→「Apple ID」→
「Apple ID を表示」→「国または地域名」→「国または地域を変更」
https://support.apple.com/ja-jp/HT201389

読めない言語に変更した後、戻すのが大変。わかる言語になるまで選び続けるしかないのか。

xampp DocumentRoot Access forbidden! 403

httpd-vhosts.conf を変更して
プロジェクト毎に別のフォルダーを DocumentRoot にしようとすると
DocumentRoot “C:/xampp/htdocs” 以下の時は問題なかったのに
DocumentRoot “C:/projects/hogehoge\htdocs” のようにすると
Access forbidden! となる。

対処方法は Directory でフォルダーに権限を設定

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();

cordova-plugin-firebase から cordova-plugin-firebasex へ

過去の記事でビルドエラーの対策を投稿したが、今後は新たなプラグインに
切り替える必要がありそうです。

cordova-plugin-firebasex

https://github.com/dpa99c/cordova-plugin-firebasex

簡単に移行できるのか?

最低以下の環境にする必要あり。
cordova@9(CLI)
cordova-android@8(Androidプラットフォーム)
cordova-ios@5(iOSプラットフォーム)

プラグインを変更
cordova plugin rm cordova-plugin-firebase
※先に cordova platform rm android しておかないと以下のエラーが
 Uninstalling cordova-plugin-firebase from android
 Error during processing of action! Attempting to revert…

cordova-plugin-firebase を動かすために入れたプラグインはとりあえず外す
自動的に cordova-plugin-firebasex が必要なものは追加してくれるはず
cordova plugin rm cordova-android-firebase-gradle-release
cordova plugin rm cordova-android-play-services-gradle-release

firebasex を入れてみる
cordova plugin add cordova-plugin-firebasex

① onNotificationOpen() を onMessageReceived() に変更

② hasPermission の判定方法変更
if( device.platform == “iOS” ) {
window.FirebasePlugin.hasPermission(function(hasPermission){
if (hasPermission) {
console.log(“Permission to receive notification is granted.”);
} else {
console.log(“Permission to receive notification is NOT granted.”);
window.FirebasePlugin.grantPermission();
}
});
}

③ notification.tap の判定方法変更 おそらく文字列 ”foreground” もしくは “background” で判断
window.FirebasePlugin.onMessageReceived(function(notification) {
console.log(“FirebasePlugin.onMessageReceived”);

console.log(JSON.stringify(notification));

// タップして起動した場合
console.log(“Message type: ” + notification.messageType);
if(notification.messageType === “notification”){
alert(“Notification message received”);
if(notification.tap){
alert(“Tapped in ” + notification.tap);
// “foreground” もしくは “background”
}
}

// firebase からの送信時は notification.message は設定されない

if (typeof cordova !== “undefined”) {
navigator.notification.alert(
notification.message, // message(JSONで追加して送信している情報)
//notification.body, // body
onAlertDismissed, // callback
notification.title, // title
‘閉じる’ // buttonName
);

/*
if( device.platform == “Android” ) {
cordova.plugins.notification.badge.increase();
}
*/

} else {
alert(“The notification is open!”);
}
}, function(error) {
console.log(error);
});

これだけで、すんなり、そのまま動いた!!

ios 版はやはり、mac で platform add するのがよさそう。 windowsだと pod を正しくインストールできない
cordova platform rm ios
cordova platform add ios@latest

ssh でのセキュリティ rbash でいいかも

/etc/ssh/sshd_config に
ChrootDirectory を設定して、親フォルダを見れないようにするの
コマンドをコピーしたりなどで、なかなかうまくいかない。

親フォルダのパスは見えてしまうが rbash シェルを作るのが手っ取り早いかも。

ゲストユーザーは sudo や root できないように

/etc/pam.d/su を編集し、以下を有効にして
auth required pam_wheel.so use_uid

wheel グループに、 root 権限を持たせるユーザーだけを追加
vi /etc/group

FBSDKCoreKit/FBSDKCoreKit.h’ file not found cordova-plugin-faceboook4 v6.2.0

cordova-plugin-facebook4 が v5.0.0 の時はエラーがでなかったが
v6.2.0 になり、xcode でビルドしようとすると FBSDKCoreKit.h が見つからないエラー

結果、
xcode のプロジェクトを
xxxx.xcodeproj から起動していたのを
xxxx.xcworkspace から起動すれば正常にビルドできた。

2日間は悩んだ。公式サイトをじっくり確認するべきだった。
https://github.com/jeduan/cordova-plugin-facebook4/issues/820

cordova platform add ios は mac で行わないと podが正しくアップデートされない。

could not find include file pods/target

mac os か xcode をアップデートすると
上記のようなエラーが出て、xcode でコンパイルできなくなる時がある。

pod install のインストールが必要なのだが、エラーが出る

-bash: /usr/local/bin/pod: /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/ruby: bad interpreter: No such file or directory

cocoapods をアップデートする必要があるみたい。

sudo gem install -n /usr/local/bin cocoapods

でエラーがなくなった。

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

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

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

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

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

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