技術と趣味の亜空間

主にゲームプログラミングとその周辺に関する記事を不定期で上げていきます

AppleStoreリジェクト対策 - 外部ブラウザの起動厳禁

概要

ゲームアプリをAppleStoreの審査に提出したところ、以下のような内容でリジェクトされた。

Guideline 4.0 - Design
We noticed that the user is taken to Safari to sign in with Twitter account, which provides a poor user experience.
Next Steps
To resolve this issue, please revise your app to enable users to sign in or register for an account in the app.
We recommend implementing the Safari View Controller API to display web content within your app. The Safari View Controller allows the display of a URL and inspection of the certificate from an embedded browser in an app so that customers can verify the webpage URL and SSL certificate to confirm they are entering their sign in credentials into a legitimate page.
Resources
For additional information on the Safari View Controller API, please review the What's New in Safari webpage.

要約すると、ゲームアプリ内からSafariを立ち上げるのはユーザー体験として良くないので変えて下さい、というもの。
これはTwitter連携によるアカウントの引き継ぎが外部ブラウザ経由でログイン認証をしているのだが、その際にApplication.OpenURL​() でブラウザを起動していたのが原因。

続きを読む

GroupByで配列を含む複数のキーから要素をグループ化できるようにする

概要

例えば、以下のようなデータがあります。

class Book
{
    public int Id { get; set; }
    public int CityId { get; set; }
    public int[] ReferenceIds { get; set; }
}

var data = new List<Book>()
{
    new Book { Id = 1, CityId = 1, ReferenceIds = new int[]{ 1 } },
    new Book { Id = 2, CityId = 1, ReferenceIds = new int[]{ 1 } },
    new Book { Id = 3, CityId = 1, ReferenceIds = new int[]{ 9, 1 } },
    new Book { Id = 4, CityId = 2, ReferenceIds = new int[]{ 1 } },
    new Book { Id = 5, CityId = 1, ReferenceIds = new int[]{ 5 } },
};

ここから、LINQGroupBy()を用いてReferenceIdsの配列数と中身の値が全て同一、かつCityIdが同じ場合は1つのグループとにまとめたい状況を考えます。
(上のコードだと、Idが1と2のクラスは1つにまとまり、それ以外のデータは別々のグループになるようにしたい)

このグループ化は、デフォルトで用意されている複数キーを使ったGroupByだと上手くまとまらなかったので、 IEqualityComparer を用いてグループ化の条件を自作します。

サンプルコード

今回はTupleを利用して複数のキーをまとめて1つのキーとみなし、IEqualityComparerを継承した等値比較クラスで判定します。

実行結果

■Group CityId:1, RefIdsLen:1
┗Id:1, CityId:1, RefIdsLen:1, RefIds:1
┗Id:2, CityId:1, RefIdsLen:1, RefIds:1
■Group CityId:1, RefIdsLen:2
┗Id:3, CityId:1, RefIdsLen:2, RefIds:9, 1
■Group CityId:2, RefIdsLen:1
┗Id:4, CityId:2, RefIdsLen:1, RefIds:1
■Group CityId:1, RefIdsLen:1
┗Id:5, CityId:1, RefIdsLen:1, RefIds:5

CityIdの値とReferenceIdsが同じものでグループ化されているのが確認できました。

おまけ

雑にやっていいならIEqualityComparerを利用せずReferenceIdsCityIdをString化して直接連結する方法でも実現可能。

var groupedDataList = data.GroupBy(d => string.Join(",", d.ReferenceIds.Append(d.CityId))).ToArray();

【Refined Github】GitHubでプルリクメニュー等が消えた場合の対応

気がついたらGitHubのUIからプルリクなどのメニューが消えていたのでそれを直した備忘録。
原因はGitHub側のUIが更新されたことで、ブラウザの拡張プラグイン「Refined Github」が対応できなくなっていたからでした。

github.com

Refined GithubはUI全般を見やすくする他、プルリクを更新順にソートしてくれたり、マージしたブランチを自動的に削除してくれるなど痒い所に手が届くので愛用しているのですが、今回のようにGitHub側でUIの更新が入るとメニューが消えてしまいますね。
普段はめったに起きないのですが、今回のようにおかしな事が起きたら機能をOFFにしてIssuesを見るなどして様子見をしてみるのが良いかもです。

【Android】課金ライブラリをAIDLからPBLへ移行させる

f:id:Goropocha:20210328235546p:plain

概要

本記事はGoogleから提供されていたAndroid インターフェース定義言語(以下、AIDL)を利用した課金処理を、Google Play Billing Library(以下、PBL)へ移行させたときの備忘録です。

developer.android.com

Goole App Storeには、AIDLを利用したアプリは2021年の11月1日からアップロードできなくなり、PBLバージョン3.0以上での実装が必須になります。
また、これから2年ごとにPBLのアップデートが定期的に必要になります。以下のリンクで更新がないか定期的にチェックすることをオススメします。

developer.android.com

◆執筆時
Android Studio バージョン: 4.0.1
Google Play Billing Library バージョン: 3.0.1

続きを読む

【Unity】Sign in with Appleをクライアントで実装する

Sign in with Apple by Unity

概要

ソシャゲのSNS連携でお馴染みのApple IDでログインできる機能「Sign in with Apple」を外部プラグインを利用してUnityで実装します。
今回はテストなのでサーバーは利用せず、クライアントでログインができるところまでとします。

◆執筆時のUnity version
2019.18f1

続きを読む

【TextMesh Pro】Unityで文字化けする箇所を除外する方法

f:id:Goropocha:20210325183456p:plain

概要

UnityでTextMesh Proのフォントアセットとスプライトアセットに未登録の文字列だけを除外するコードを作成しました。
上のトップ画像ではTextMehs Proデフォルトで入っているアセットデータで試しています。
Raw Textを見てみると、2行目は「日本語テキスト」と入力しましたが、フォントには入っていなので□となって文字化けしています。
また3行目3番目の絵文字は「👌」を指定しましたが、スプライトアセットに入っていないので同様に文字化けしてしまいました。
一方で今回コードで除外対応したValidated Text ではどちらもしっかりと削除されています。

文字化けの修正が目的なので、当たり前ですがフォントアセットとスプライトアセットどちらのデータにもUnicodeが設定されているのが前提です。

◆執筆時バージョン
Unity: 2019.4.18f1
TextMesh Pro: 2.1.1

続きを読む

ついにUnityが絵文字を公式でサポート予定に!

Unityのフォーラムを眺めていたら見つけたので投稿。

aromana said: ↑
Is the solution in this thread the best available solution for supporting emojis in text fields in Unity?
In 2021 it seems like a pretty important feature especially for mobile users.

My plan is to add support for color glyphs (emojis) in the next set of preview releases for Unity 2019.4 or newer.
This new functionality will not be in the first few preview releases but it will make it there by the time those are out of preview.
-Stephan_B, Feb 23, 2021

引用: Full Emoji Support Api (emoji Sequen

どうやらUnity 2019.4以降のバージョンでプレビュー状態を何度か経て正式に導入される予定みたいですね。
現状、絵文字表示はUnity公式でサポートされておらず、やる場合はTextMeshPro + Full Emoji Support Apiを使うのが現状ベストな方法そうです。
ただ、これは結構なデータサイズの絵文字アトラスをプロジェクトに導入しないといけないのと、異体字セレクタのサポートが無いため絵文字によっては豆腐が表示されてつらい部分があるので期待したいところ。

参考リンク

forum.unity.com