cordova facebookシングルサインオン

cordova-plugin-facebook4 を使ってみたところ簡単にできそう
https://github.com/jeduan/cordova-plugin-facebook4.git
v2.3

① まず、facebook のシングルサインオンを使う場合に
facebook のアプリ登録に android の key hashes を設定する必要がある

keytool -exportcert -alias “エイリアス名” -keystore “Keystoreファイルのパス” | openssl sha1 -binary | openssl base64

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

以下のような文字列が表示される

2Sxvqct/Qq9fRzDlvigsuMyOrds= (適当に記載)

② facebook に登録する
https://developers.facebook.com/

アプリID
 1593090350168457

APP_NAME
 sampleapp

ANDROID_SDK_VERSION
 ”” (指定しない)

【Android】

〇 Google Playパッケージ名
 com.hogehoge.sampleapp

〇 キーハッシュ
 2Sxvqct/Qq9fRzDlvigsuMyOrds=

〇 シングルサインオン
 ON にする

【iOS】

〇 バンドルID
 com.hogehoge.sampleapp

〇 シングルサインオン
 ON にする
 

※ 設定時、com.hogehoge.sampleappが見つからないなど表示されるが、リリース前なので気にしない

※ 性別や年齢にアクセスしたい場合は facebook に申請を行い認証される必要がある。
  テストアカウントだと問題ない。
  https://developers.facebook.com/docs/facebook-login/permissions

  申請せずに、アクセスできるのは email first_name last_name など少ない


// ===========================================================
// ページを呼び出した時点で呼ばれるようにしている
// ===========================================================
function onPageLoad() {
    console.log("onPageLoad() *******************************");

    facebookConnectPlugin.getLoginStatus(onStatusSuccess, onStatusFailure)
}

function onStatusSuccess(pData) {
    console.log('onStatusSuccess()  pData ' + JSON.stringify(pData) );

    $("#status").html(JSON.stringify(pData));
}

function onStatusFailure() {
    console.log("onStatusFailure () *******************************");

    $("#status").html("onStatusFailure");
}

// ===========================================================
// ログイン
// ===========================================================
function onLogin() {
  console.log("onLogin () *******************************");

//  facebookConnectPlugin.login(['email', 'public_profile'], onLoginSuccess, onLoginFailure);
  facebookConnectPlugin.login(null, onLoginSuccess, onLoginFailure);
//facebookConnectPlugin.login(["email"], onLoginSuccess, onLoginFailure);

}

function onLoginSuccess(pData) {
    console.log('onLoginSuccess()  pData ' + JSON.stringify(pData) );
    $("#status").html(JSON.stringify(pData));

/*
    facebookConnectPlugin.getAccessToken(function(token) {
        console.log("Token: " + token);
    }, function(err) {
        console.log("Could not get access token: " + err);
    });
*/
    console.log("" + pData.authResponse.userID);

//    facebookConnectPlugin.api('/me?fields=id,email,first_name,last_name,name&access_token=' + pData.authResponse.accessToken, null,
//    facebookConnectPlugin.api(pData.authResponse.userID + "/?fields=id,email,first_name,last_name,name", ["email", "public_profile"],
      facebookConnectPlugin.api(pData.authResponse.userID + "/?fields=id,email,first_name,last_name,name", null,
    function (result) {
      alert("Result: " + JSON.stringify(result));
    }, function (error) {
      alert("Failed: " + JSON.stringify(error));
    });

}

function onLoginFailure() {
    console.log("onLoginFailure () *******************************");

    $("#status").html("onLoginFailure");
}

// ===========================================================
// ログアウト
// ===========================================================
function onLogout() {
  console.log("onLogout () *******************************");

  facebookConnectPlugin.logout( onLogoutSuccess, onLogoutFailure);
}

function onLogoutSuccess(pData) {
    console.log('onLogoutSuccess()  pData ' + JSON.stringify(pData) );

    $("#status").html(JSON.stringify(pData));
}

function onLogoutFailure() {
    console.log("onLogoutFailure () *******************************");

    $("#status").html("onLogoutFailure");
}

iOS 課金テスト

App Store Connect で新規アプリを追加する
Bundle ID を合わせておく。

機能 → App内課金 から
テストで使用する商品を登録する

製品ID を合わせておく

トップに戻って、
ユーザーと役割 → Sandboxテスター から
課金テストをするApple IDを登録する(既にあればそれを利用する)

テストに使用する iPhoneで課金テストのアカウントでサインインし直す。

Android で課金テスト「出版社はこのアイテムを購入できません」でる

出版社という意味が良くわからないが、
開発者アカウントではという意味だと思われる。

「開発者アカウントではこのアイテムを購入できません」

テスト用に別のアカウントを作成してAndroidに設定して動作確認。
とても面倒くさい。

「指定したアイテムを購入できません」と出たら
テストアカウントでログインされていない可能性もあるので、
アカウントを変更してから、アプリをストアからダウンロードして確認。

重要なことは、テストで課金してしまわないように
テストを行うアカウントを
google play console の
設定 → デベロッパーアカウント → アカウントの詳細 → ライセンス テスト に
カンマ区切りでアカウントを追加しておくこと

そうすると、購入ダイアログで
「これはテスト用の注文です。課金は発生しません。」
と表示される。

Android で課金テスト

google play console でアプリを登録する
 画面キャプチャーやアイコン等も必要なのでそれなりに準備が必要

テストなんで、
「内部テスト版」で設定。

色々設定して、申請すると1時間くらいして、公開される。

そうすると、以下のようなURLが出てくるので
テストユーザーに登録している端末でアプリをダウンロード

https://play.google.com/apps/internaltest/999999999999999999999

一度でも流れがわかっていたらたいしたことないんだけどね。