20190607のAndroidに関する記事は3件です。

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.cs
using 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>

参考リンク

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

iOS/Android設定画面の各アプリの画面から独自の設定やライセンス表示をするには?

iOS/Android において、変更頻度の低いアプリの設定や、直接ユーザーには関係のないライセンス表示のような画面は、アプリの中から遷移させる必要性は薄いですし、その遷移のためのボタンの領域を確保するのはもったいないですよね。

ということで、各OSの設定画面にあるアプリ情報の画面でそれを行う方法をまとめます。

iOS

iOS では Settings.bundle を用いることで iOS設定画面の各アプリの画面でそのアプリの設定項目を表示することができます。

Appleサポート アプリの場合

アプリの設定

アプリの設定項目を 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 P の場合

Android N,O の場合

アプリの設定

Android Jetpack の Preference 機能を使うことで、XML でアプリの設定項目を定義するだけで設定画面を構築することができます。ここで設定された項目はアプリからは SharedPreferences により取得できるようになります。詳細は公式ドキュメントを読みましょう!

Android Developers / Android Jetpack / 設定

ライセンス表示

com.google.gms:oss-licenses を使いましょう!これによりアプリが依存しているライブラリのライセンス情報を取得し、それを OssLicensesMenuActivity で表示することができます。

上記の Preference 機能では設定項目からインテントを投げるアクションも定義できるので、そこから OssLicensesMenuActivity を開くと良さそうです。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【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も選択肢に表示されるようになります。
スクリーンショット 2019-06-07 1.27.58.png

差分の取得

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型で取得します。

ライブラリを導入するのは少し手間ですが、とてもシンプルなコードで差分を出すことができました:tada:

参考

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む