- 投稿日:2019-06-07T21:25:38+09:00
UnityAdMobPluginアプデ時のエラー対処方法
はじめに
AdMobプラグインアップデート後に以下のエラーがiOS/Android共に発生
The Google Mobile Ads SDK was initialized incorrectly実装環境
- Unity 2019.1.4f1
- Google Mobile Ads Unity Plugin v3.17
対処方法
AppIDの設定箇所が重複しているため、以下のファイルの該当部分をコメントアウト
もしくはAppIDをセットするiOS
GoogleMobileAds/Editor/PListProcessor.csusing System.IO; using UnityEditor; using UnityEditor.Callbacks; using UnityEditor.iOS.Xcode; public static class PListProcessor { [PostProcessBuild] public static void OnPostProcessBuild(BuildTarget buildTarget, string path) { // Replace with your iOS AdMob app ID. Your AdMob App ID will look // similar to this sample ID: ca-app-pub-3940256099942544~1458002511 //以下の部分をコメントアウト /* string appId = "ADMOB_APPLICATION_ID"; string plistPath = Path.Combine(path, "Info.plist"); PlistDocument plist = new PlistDocument(); plist.ReadFromFile(plistPath); plist.root.SetString("GADApplicationIdentifier", appId); File.WriteAllText(plistPath, plist.WriteToString()); */ } }Android
Plugins/Android/GoogleMobileAdsPlugin/AndroidManifest.xml<?xml version="1.0" encoding="utf-8"?> <!-- This Google Mobile Ads plugin library manifest will get merged with your application's manifest, adding the necessary activity and permissions required for displaying ads. --> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.google.unity.ads" android:versionName="1.0" android:versionCode="1"> <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="19" /> <application> <uses-library android:required="false" android:name="org.apache.http.legacy"/> <!-- Your AdMob App ID will look similar to this sample ID: ca-app-pub-3940256099942544~3347511713 --> <!-- 以下の部分をコメントアウト --> <!-- <meta-data android:name="com.google.android.gms.ads.APPLICATION_ID" android:value="[ADMOB APPLICATION ID]"/> --> </application> </manifest>参考リンク
- 投稿日:2019-06-07T13:49:08+09:00
iOS/Android設定画面の各アプリの画面から独自の設定やライセンス表示をするには?
iOS/Android において、変更頻度の低いアプリの設定や、直接ユーザーには関係のないライセンス表示のような画面は、アプリの中から遷移させる必要性は薄いですし、その遷移のためのボタンの領域を確保するのはもったいないですよね。
ということで、各OSの設定画面にあるアプリ情報の画面でそれを行う方法をまとめます。
iOS
iOS では Settings.bundle を用いることで iOS設定画面の各アプリの画面でそのアプリの設定項目を表示することができます。
アプリの設定
アプリの設定項目を Settings.bundle として定義しておくだけです。ここで設定された項目はアプリからは UserDefaults により取得できるようになります。詳細は公式ドキュメントを読みましょう!
Preferences and Settings Programming Guide / Implementing an iOS Settings Bundle
ライセンス表示
LicensePlist を使いましょう!
CocoaPods や Carthage でインストールしたライブラリからライセンス一覧を生成して Settings.bundle への組み込みまで自動でやってくれます。Android
Android N 以降限定ですが、マニフェストファイル中の Activity の Intent Filter に ACTION_APPLICATION_PREFERENCES を追加することで、Android 設定画面のアプリ情報画面にその Activity への導線が表示されるようになります。
AndroidManifest.xml<activity android:name=".SettingActivity"> <intent-filter> <action android:name="android.intent.action.APPLICATION_PREFERENCES" /> </intent-filter> </activity>アプリの設定
Android Jetpack の Preference 機能を使うことで、XML でアプリの設定項目を定義するだけで設定画面を構築することができます。ここで設定された項目はアプリからは SharedPreferences により取得できるようになります。詳細は公式ドキュメントを読みましょう!
Android Developers / Android Jetpack / 設定
ライセンス表示
com.google.gms:oss-licenses を使いましょう!これによりアプリが依存しているライブラリのライセンス情報を取得し、それを
OssLicensesMenuActivity
で表示することができます。上記の Preference 機能では設定項目からインテントを投げるアクションも定義できるので、そこから
OssLicensesMenuActivity
を開くと良さそうです。
- 投稿日:2019-06-07T02:13:18+09:00
【Kotlin】日付を比較し、その差分を取得する
今日の日付と他の日付を比較して差分を出したい、みたいなことってよくありますよね。
例 - 今日;2019/06/07 - 他の日付:2019/06/01 - 差分:6日方法はいくつかあると思いますが、なるべくシンプルに書ける方法を模索しました。これはそのときのメモです。
ポイント
java.time.LocalDate
は使えない
java.time.LocalDate
は、Java8からjava.time
パッケージに追加された日付を扱うAPIです。
これを使って今日の日付を取得しようとすると以下のように書きます。val today = LocalDate.now()しかしこれだと
now()
の部分にエラーが表示されます。Call requires API level 26 (current min is 15): java.time.LocalDate#nowこのエラーはminSdkで26未満を設定している場合に表示されるもので、
java.time.LocalDate
を使うためにはAndroidのAPI26(Android8.0/Oreo)以上が必要になるとこのこと。
でも大抵のアプリはまだAndroid5.0とか6.0くらいまではサポートしていると思うので、残念ながらこれは使えないケースが多そうです。ThreeTenABPライブラリを使う
そこで、代わりにThreeTenABPを使います。
ThreeTenABPはざっくり言うと、java.time.LocalDate
などの新しいAPIをAndroidでも問題なく使えるようにバックポートしたライブラリです。作者はわれらがJake神。詳細は下記を参照してください。
GitHub - JakeWharton/ThreeTenABP: An adaptation of the JSR-310 backport for Android.コード
前置きが長くなりましたが、ThreeTenABPの
LocalDate
を使って日付の差分を取得します。ThreeTenABPの導入
build.gradleに下記を追加。
implementation 'com.jakewharton.threetenabp:threetenabp:1.2.1'Applicationクラスの
onCreate()
内で初期化します。class Application : Application() { override fun onCreate() { super.onCreate() // 初期化 AndroidThreeTen.init(this) } }AndroidManifestのapplicationタグ内に下記を追加。
<application android:name=".Application" </application>ここまで完了すると、
java.time.LocalDate
の他にorg.threeten.bp.LocalDate
も選択肢に表示されるようになります。
差分の取得
val today = LocalDate.now() //2019-06-07 val day1 = LocalDate.parse("2019-06-01") val diff = today.compareTo(day1) //6(Int)
LocalDate.now()
でLocalDate型の現在日付を取得。
LocalDate.parse("2019-06-01")
は、引数で指定した文字列をもとにLocalDateクラスのインスタンスを返します。
最後にtoday.compareTo(day1)
で2つのLocalDate型を比較し、差分をInt型で取得します。ライブラリを導入するのは少し手間ですが、とてもシンプルなコードで差分を出すことができました
参考