Unityバージョン2019.3.15f1から2020.3.18f1へ上げ admobバージョンv5.4.0からv6.1.2へ上げた際のエラー
Assets>ExternalDependencyManager>Editor>Google.VersionHandlerのファイルを消したら消えました。
Unityバージョン2019.3.15f1から2020.3.18f1へ上げ admobバージョンv5.4.0からv6.1.2へ上げた際のエラー
Assets>ExternalDependencyManager>Editor>Google.VersionHandlerのファイルを消したら消えました。
UnityでのPlayFab使用におけるログイン方法です。
こちらの記事でログインを実装しましたが、
ログインに使用する文字列は"GettingStartedGuide"の固定されたものとなっています。
(PlayFabのアカウント情報の下の方を見ると、PlayFabIDと紐づいている文字列が表示されます)
そのため、誰がログインしても同じPlayFabアカウントとなってしまうので、
端末ごとにログインに使う文字列を変えてやる必要があります。
そこで、端末ごとにログインできるようにしたのが下記のコードになります。
(kanさんのブログ(文末の参考を参照)内容を私でも直感的にわかるように書き換えました。)
using System; using PlayFab; using PlayFab.ClientModels; using UnityEngine; /// <summary> /// PlayFabのログイン処理を行うクラス /// </summary> public class PlayFabLogin : MonoBehaviour { private bool _shouldCreateAccount;//アカウントを作成するか private string _customID;//ログイン時に使うID //================================================================================= //ログイン処理 //================================================================================= public void Start() { Login(); } //ログイン実行 private void Login() { _customID = LoadCustomID(); var request = new LoginWithCustomIDRequest { CustomId = _customID, CreateAccount = _shouldCreateAccount };//補足 既にアカウントが作成されており、CreateAccountがtrueになっていてもエラーにはならない PlayFabClientAPI.LoginWithCustomID(request, OnLoginSuccess, OnLoginFailure); } //ログイン成功 private void OnLoginSuccess(LoginResult result) { //アカウントを作成しようとしたのに、IDが既に使われていて、出来なかった場合 if (_shouldCreateAccount == true && result.NewlyCreated == false) { Debug.LogWarning("CustomId :" +_customID+ "は既に使われています。"); Login();//ログインしなおし return; } //アカウント新規作成できたらIDを保存 if (result.NewlyCreated == true) { SaveCustomID(); Debug.Log("新規作成成功"); } Debug.Log("ログイン成功!!"); } //ログイン失敗 private void OnLoginFailure(PlayFabError error) { Debug.LogError("PlayFabのログインに失敗\n" + error.GenerateErrorReport()); } //================================================================================= //カスタムIDの取得 //================================================================================= //IDを保存する時のKEY private static readonly string CUSTOM_ID_SAVE_KEY = "CUSTOM_ID_SAVE_KEY"; //IDを取得 private string LoadCustomID() { //IDをセーブデータから取得 string id = PlayerPrefs.GetString(CUSTOM_ID_SAVE_KEY); //idの中身がnullもしくは空の文字列("")の場合は_shouldCreateAccountはtrueになる。 _shouldCreateAccount = string.IsNullOrEmpty(id); //idの中身がない場合、文字列を新規作成 if (_shouldCreateAccount==true) { return GenerateCustomID();//文字列を新規作成 } else { return id;//セーブされた文字列を返す } } //IDの保存 private void SaveCustomID() { PlayerPrefs.SetString(CUSTOM_ID_SAVE_KEY, _customID); } //================================================================================= //カスタムIDの生成 //================================================================================= //IDを生成する //ユニークな文字列をGuidを使用し生成 //https://docs.microsoft.com/ja-jp/dotnet/api/system.guid.tostring?redirectedfrom=MSDN&view=netframework-4.8#System_Guid_ToString_System_String_ private string GenerateCustomID() { //Guidの構造体生成 Guid guid = Guid.NewGuid(); return guid.ToString("N");//書式指定子はNを指定 詳細は「Guid.ToString メソッド」のドキュメント参照 } }
処理の流れとしては、こちらになります。
1.初ログイン時にIDを生成(32桁のランダムな英数字)
2.既にそのIDが使われている場合は新たにIDを生成(使われていないIDを見つけるまで)
3.ログインが成功したらIDをPlayerPrefsに保存
4.2回目以降はPlayerPrefsに保存されたIDでログイン
詳細な内容はコメントを見ていただければ把握できると思います。
ログインに使用する文字列はPlayerPrefsで保存しているので、
Androidはアプリをアンインストールしてもデータを消さない限り大丈夫ですが、
iOSの方はアプリをアンインストールすると文字列のセーブデータが消えてしまいます。
その点を理解した上で実装をお願いします。
UnityでのPlayFab使用におけるUnity側での初期設定方法です。
前回までの記事でPlayFabを使う準備ができたら
試しにPlayFabと通信してログインができるか試してみます。
前回の記事1 marumaro7.hatenablog.com
前回の記事2 marumaro7.hatenablog.com
スクリプトを入れるオブジェクトを作ります。
「空のゲームオブジェクト」を作成し、「PlayFabLogin」と名前をつけておきます。
Assets直下にScripsフォルダを作成
→作成したフォルダ内でスクリプトを新規作成
→スクリプトの名前を「PlayFabLogin」としてスクリプトを作成します。
(名前はなんでも良いのですが、テスト用のコードと同じにしておきます。)
コードは、PlayFabの公式ページにテスト用のコードがあるので、
こちらを少しわかりやすくしたものを使用します。
元コードはリンク先の「最初の API 呼び出しを実行する」の部分です。
ちなみに「API」とは、「Application Programming Interface」の頭文字です。
ひらたくいうと、PlayFabで用意している便利関数のことです。
PlayFabのAPIを呼び出して処理をしていきます。
下記のコードを、作成したスクリプトに貼り付けます。
using PlayFab;//追加 using PlayFab.ClientModels;//追加 using UnityEngine; public class PlayFabLogin : MonoBehaviour { public void Start() { //リクエスト生成 var request = new LoginWithCustomIDRequest { CustomId = "GettingStartedGuide", CreateAccount = true }; //ログイン処理実行 PlayFabClientAPI.LoginWithCustomID(request, OnLoginSuccess, OnLoginFailure); } //ログイン成功時に呼び出される関数 private void OnLoginSuccess(LoginResult result) { Debug.Log("ログイン成功!!"); } //ログイン失敗時に呼び出される関数 private void OnLoginFailure(PlayFabError error) { Debug.LogError("ログインに失敗しました。"); Debug.LogError(error.GenerateErrorReport());//エラー内容 } }
ひとまず、コード内容はおいておいて、スクリプトをセーブし、
「PlayFabManager」に割り当てて、実行してみます。
実行後、無事ログインが成功しました!
ここでPlayFab側のダッシュボードを見てみると、ユーザーの数が増えていることがわかります。
(変化がない場合は2分程度待ってください。)
※「金額」と書いてありますが、「数」の間違い(原文は「amount」)なので
ユーザー数と思ってください。
ユーザーIDは
プレイヤー>検索
で確認することができます。
ちなみに「前回のログイン」に表示される日時は
協定世界時 (UTC)となっているので、
表示されるのは日本時間から9時間引いたものとなります。
これでPlayFabと通信ができました!
実運用上このままのコードでは問題があるので、
次回は問題点を考慮したログイン機能を実装していきます。
UnityでのPlayFab使用におけるUnity側での初期設定方法です。
前回の記事
marumaro7.hatenablog.com
Unity2020.3.18f1
Unity側でPlayFabを扱えるようにしていきます。
下記サイトより「エディター拡張機能」をダウンロード
https://docs.microsoft.com/ja-jp/gaming/playfab/sdks/unity3d/
「クイック ダウンロード リンク: PlayFab SDK 用の Unity エディター拡張機能」
をクリックしてダウンロード
実装したいプロジェクトを開いて、先ほどのエディター拡張をインポートします。
すると、PlayFabのウインドウが現れます。
今表示されているのは、アカウントを作る画面なので、
何も入力せずに「LOG IN」ボタンを押します。
ログイン画面が表示されるので、
PlayFabに登録したアドレスとパスワードを入力し、ログインします。
PlayFabのSDKがないよ〜と言われるのでインストールボタンを押します。
数十秒待ってインストール完了画面が出たら終了です。
<追記>
2022年7月現在
Unityバージョン:2021.3.3f1
PlayFab SDKバージョン:2.113.210830
では下記のようなエラーが出ます。
PlayFab公式によると無視してOKだそうです。
そのうち改善されると思います。
<エラー文>
A Native Collection has not been disposed, resulting in a memory leak. Enable Full StackTraces to get more details.
PlayFab側と通信できるように前もって作っておいたタイトルを指定します。
SETTINGSをクリック
1.STUDIO
2.TITLE ID
を選択
以上でUnity側の初期設定は完了です。 簡単ですね!!
<追記>
REQUEST TYPE は 「Unity Web Request」に設定して下さい。
情報元
次回はいよいよ通信を行います。
SDKバージョン2.110ではバグがありますので修正が必要でした。
PlayFabEditorDataService.csの22行目を変更。
public bool CompressApiData = false;
情報元
UnityでのPlayFabを使用におけるPlayFab側での初期設定方法です。
下記ページで「PlayFabを無料で試す」からアカウント登録
https://azure.microsoft.com/ja-jp/services/playfab/
メールアドレスやパスワードを入力
アカウントを作成すると認証メールが届くので、認証してログインしてください。
PlayFabの言語を日本語に設定します。(お好みです。)
→PlayFab画面の右上のアイコン
→マイプロフィール
→言語
→日本語を選択
タイトルを作成します。
タイトルとは、アプリとPlayFabを紐づけるための箱のようなものです。
右側の「・・・」ボタンから新しいタイトルを選択します。
タイトルの名前を決めます。
ジャンルやら色々項目がありますが、タイトルの名前以外は設定しなくても影響がないので、
名前だけ入れて「タイトルを作成」を押します。
作成すると自動的にタイトルの設定画面に遷移します。
まずはここまででPlayFab側の設定は完了です。
次回はUnity側での設定を行います。
【Unity】PlayFab 初期設定 <Unity側> marumaro7.hatenablog.com
app-ads.txt ファイル設定の備忘録です。
自分のアプリ紹介サイトに設置する方法になります。
環境は、エックスサーバーとワードプレスです。
注意!!
ネットでapp-ads.txtで検索するとads.txtの記事がたくさん出てきますが
app-ads.txtとads.txtは別物なので注意してください!
エックスサーバーではads.txtを簡単に設定するメニューがあるのですが。
そこにapp-ads.txtを登録しても、ads.txtとして登録されてしまうのでうまくいきません。
app-ads.txtについてはこちらで概要を掴みました。 magazine.fluct.jp
基本的に公式の手順に沿って進めました。
無料でできる方法もあるかもしれませんが、
広告のない自分のサイトがほしかったこともあり、
エックスサーバー(Xserver
)と契約しました。
ワードプレスの知識は一切ありませんでしたが、
契約の際、ボタン一つでワードプレスと連携して
同時に申し込みできるのでとても楽でした。
その後のアプリ紹介サイトの作成の方で
ワードプレスの使い方から学ばないといけなかったので
それに一番時間を使っています。
こんなページを作りました。 maruapps.com
公式ページのこの部分に沿って登録しました。
公式ページに沿って、設置する文字列を取得し、
メモ帳などにメモしていきます。
この情報はエックスサーバーでの設定で使用します。
公式に沿って進めていき、表示された文字をコピーします。
(6.コピーするコード スニペットの横にある コピー をクリックします。)の部分
コピーした文字を貼り付けます。
今回はmac標準のテキストエディットを使用しました。
<追記>
pub-○○ のパブリッシャーIDの部分が自動でコピーされないようになっていました。
パブリッシャーIDの確認方法
AdMobのホーム画面
→設定
→アカウント情報
→パブリッシャーID
で確認することができます。
数字の部分は16桁になります。
app-ads.txtを設置するとテスト広告が出なくなるようなので、
下記のページの注意書きに沿ってこちらの情報も追記します。
(iOSのページを載せていますが、Androidのページでも同じことが書いてありました。)
改行して追記します。
この文字列はあとから使うので、メモ帳は開いたままにしておきます。
エックスサーバーにログインします。
ファイル管理を押します。
ご自身のドメインをダブルクリックして開いてください。
さらに、「public_html」をダブルクリックします。
ここにファイルを作成するので「新規ファイル」を押します。
「新規ファイル」を押すとこのような画面になるので
ファイル名:app-ads.txt
ファイル名の文字コード:UTF-8
に設定してファイルを作成します。
これで空のapp-ads.txtファイルを作ることができました。
app-ads.txtの中身はまだ空っぽなので、
app-ads.txtを選択し、「編集」を押して中身を設定していきます。
編集を押してファイルを開いたら、
先ほど仮置きしたコードを貼り付け、
保存文字コードを「UTF-8」に設定し、更新を押します。
ご自分のドメインの後ろに/app-ads.txtを付けたURLを検索し、
設定したテキストが表示されるかを確認します。
例:http://●●.com/app-ads.txt
公式の通り、サイトを見つけてもらえるまで待ちます。
AdMobの
>app-ads.txt画面
>アプリ一覧 右側の上矢印
>アップデートを確認
を押してみるとすぐ検索してくれるかもしれません。
app-ads.txt一覧の画面でアプリのステータスが有効になっていることを確認して終了です。
Unityのダッシュボード上でApp-ads.txtを設定したのでメモ
→Monetization
→Organization Settings
→Developer Websiteで対象のホームページを登録
→追加するApp-ads.txtの文字列をコピー
→「4.エックスサーバーに 情報を登録」で行なったapp-ads.txtの編集画面を開く
→コピーした文字列を追加して更新保存文字コードをUTF-8へ設定するのをお忘れなく)
→Unityのダッシュボードのページを更新してこのような
「Your app-ads.txt file is up-to-date. No action needed at this time.」
の緑チェックマークが出ていればOKです。
わかれば簡単なんですが、
最初はapp-ads.txtとads.txtの情報の区別がつかず、
かなり回り道をしてしまいました。
あなたの時短になれば幸いです。
突然ですが、Unity本を出版しました!
こちらを読むことで、スクリプトの基礎固めができます!
現在、kindle unlimitedで読み放題設定中です。今のうちにどうぞ!
もっと早く教えてほしかった!Unity C#入門
サブスク実装時の課金審査 却下理由のメモです。
Guideline 3.1.1 - Business - Payments - In-App Purchase
We have begun the review of your in-app purchases but aren't able to continue because your submitted in-app purchases indicate a change of business model for your app.
Specifically, your existing Consumable and Non-Consumable business model has changed to include a auto-renewable subscription in-app purchase business model type.
Therefore, we need to verify the implementation of your submitted in-app purchases in the app to ensure your app, and its in-app purchases, are in compliance with the App Store Review Guidelines.
Next Steps
In order to approve your your new in-app purchase business model, we have to verify the purchasability of the items being sold. Please upload a new binary and make sure that your new in-app purchase products are available for purchase at the time of review.
ガイドライン3.1.1 - ビジネス - 支払い - アプリ内課金
アプリ内課金の審査を開始しましたが、提出されたアプリ内課金がアプリのビジネスモデルの変更を示しているため、審査を継続することができません。
具体的には、既存の消費型および非消費型のビジネスモデルが、自動更新可能なサブスクリプションのアプリ内課金のビジネスモデルタイプに変更されています。
そのため、お客様のアプリとそのアプリ内課金がApp Store Review Guidelinesに準拠していることを確認するために、お客様が提出したアプリ内課金の実装を確認する必要があります。
次のステップ
お客様の新しいアプリ内課金のビジネスモデルを承認するためには、販売されるアイテムの購入可能性を検証する必要があります。新しいバイナリをアップロードして、審査時に新しいアプリ内課金商品が購入可能であることを確認してください。
----------------------------------
う〜ん
私の頭では理解ができません。。。
とりあえずここに赤印が付いていました。
ローカライズ設定のところに
標準の言語に設定している「英語」がなかったのが原因と推測
1箇所目
2箇所目
1箇所目
2箇所目
タイトルや説明文を変更しても赤い印が消えなかったため
一旦 言語の項目を消してから再設定しました。
(例:日本語の項目消す→+ボタン→日本語の項目追加)
説明文を少し改良しました。
審査落ちしました。
Guideline 3.1.2 - Business - Payments - Subscriptions
We noticed that your app did not meet all the terms and conditions for auto-renewing subscriptions, as specified in Schedule 2, section 3.8(b) of the Paid Applications agreement.
We were unable to find the following required information in your app's binary:
–Title of publication or service -Length of subscription (time period and content or services provided during each subscription period) - Price of subscription, and price per unit if appropriate – A functional link to the Terms of Use (EULA) – A functional link to the privacy policy
We were unable to find the following required item(s) in your app's metadata:
– A functional link to the Terms of Use (EULA) – A functional link to the privacy policy
Next Steps
To resolve this issue, please add this missing information. If the above information is present, please reply to this message in Resolution Center to provide details on where to locate it.
If you are using the standard Apple Terms of Use (EULA), you will need to include a link to the Terms of Use in your App Description. If you are using a custom EULA, add it in App Store Connect.
Resources
Guideline 2.1 - Performance - App Completeness
We have returned your in-app purchase products to you as the required binary was not submitted. When you are ready to submit the binary, please resubmit the in-app purchase products with the binary.
Next Steps
Learn more about offering in-app purchases in App Store Connect Help.
ガイドライン3.1.2-ビジネス-支払い-サブスクリプション
有料アプリケーション契約のスケジュール2、セクション3.8(b)で指定されているように、アプリが自動更新サブスクリプションのすべての利用規約を満たしていないことに気付きました。
アプリのバイナリで次の必要な情報を見つけることができませんでした。
–出版物またはサービスのタイトル -サブスクリプションの期間(期間および各サブスクリプション期間中に提供されるコンテンツまたはサービス) -サブスクリプションの価格、および必要に応じてユニットあたりの価格 –利用規約(EULA)への機能リンク –プライバシーポリシーへの機能的なリンク
アプリのメタデータで次の必須アイテムが見つかりませんでした。
–利用規約(EULA)への機能リンク –プライバシーポリシーへの機能的なリンク
次のステップ
この問題を解決するには、この不足している情報を追加してください。上記の情報が存在する場合は、解決センターでこのメッセージに返信して、その場所の詳細を提供してください。
標準のApple利用規約(EULA)を使用している場合は、アプリの説明に利用規約へのリンクを含める必要があります。カスタムEULAを使用している場合は、App StoreConnectに追加します。
資力
-AppStoreで自動更新可能なサブスクリプションを提供する方法の詳細をご覧ください。 -有料アプリケーション契約を確認します(App Store Connectのログインが必要です)。
ガイドライン2.1-パフォーマンス-アプリの完全性
必要なバイナリが送信されなかったため、アプリ内購入製品を返品しました。バイナリを送信する準備ができたら、バイナリを使用してアプリ内購入商品を再送信してください。
次のステップ
アプリ内購入の提供について詳しくは、App StoreConnectヘルプをご覧ください。
Legal - Licensed Application End User License Agreement - Apple
https://help.apple.com/app-store-connect/#/dev7fa2fff96