Google Playで課金実装していないのに、「アプリ内課金あり」と表示されてしまう

Google Play アプリ内課金あり

実装環境

  • Unity2021.3.14f1
  • Firebase10.3.0
  • AdMob7.20

上記のように課金機能を実装していないのに、「アプリ内課金あり」と表示されてしまいました。
※しかもなぜか、PCのブラウザでGooglePlayを見ると「アプリ内課金あり」は表示されませんでした。

FirebaseやAdMobを入れた際になんらかの原因で課金ありと認識されてしまった可能性がないか調べたところ、Unity Package Managerから、In App Purchasingを削除したところ、無事GooglePlayから「アプリ内課金あり」は消えていました。

AndroidManifest.xmlの下記パーミッションを削除すれば解消されるケースもあるようですが、自分の場合はもともとBILLINGパーミッションの記載はなかったのでこちらの方法にいきつきました。

<uses-permission android:name="com.android.vending.BILLING" />

参考になれば嬉しいです。

Xcodeビルド時に「Undefined Symbol: method descriptor for Swift.CustomStringConvertible.des…」

Unity製のアプリをXcodeビルド時にみたことないエラーが大量に。

エラー100件…

エラー内容↓
Showing Recent Issues
Undefined symbol: method descriptor for Swift.CustomStringConvertible.description.getter : Swift.String

Undefined symbol: protocol descriptor for Swift.CustomStringConvertible

Undefined symbol: __swiftEmptyDictionarySingleton

Undefined symbol: _swift_errorRelease

Undefined symbol: method descriptor for Swift.Error._userInfo.getter : Swift.AnyObject?

Undefined symbol: method descriptor for Swift.Error._code.getter : Swift.Int

Undefined symbol: method descriptor for Swift.Error._getEmbeddedNSError() -> Swift.AnyObject?

Undefined symbol: (extension in Foundation):Swift.Error< where A: Foundation.CustomNSError>._code.getter : Swift.Int

Undefined symbol: protocol conformance descriptor for Swift.Int : Swift.FixedWidthInteger in Swift

Undefined symbol: type metadata for Any

Undefined symbol: type metadata for Swift.Int

Undefined symbol: method descriptor for Foundation._ObjectiveCBridgeableError.init(_bridgedNSError: __shared __C.NSError) -> A?

Undefined symbol: base conformance descriptor for Foundation._BridgedStoredNSError: Swift.Hashable

Undefined symbol: (extension in Foundation):Foundation._BridgedStoredNSError.errorCode.getter : Swift.Int

Undefined symbol: (extension in Foundation):Foundation._BridgedStoredNSError._getEmbeddedNSError() -> Swift.AnyObject?

Undefined symbol: base conformance descriptor for Foundation._BridgedStoredNSError: Foundation.CustomNSError

Undefined symbol: method descriptor for Foundation._BridgedStoredNSError.init(_nsError: __C.NSError) -> A

Undefined symbol: associated conformance descriptor for Foundation._BridgedStoredNSError.Code: Swift.RawRepresentable

Undefined symbol: associated conformance descriptor for Foundation._ErrorCodeProtocol._ErrorType: Foundation._BridgedStoredNSError

Undefined symbol: protocol descriptor for Foundation._ErrorCodeProtocol

Undefined symbol: _swift_bridgeObjectRetain

Undefined symbol: associated conformance descriptor for Swift.ExpressibleByStringLiteral.StringLiteralType: Swift._ExpressibleByBuiltinStringLiteral

Undefined symbol: method descriptor for Foundation.CustomNSError.errorCode.getter : Swift.Int

Undefined symbol: (extension in Foundation):Foundation._BridgedStoredNSError.hash(into: inout Swift.Hasher) -> ()

Undefined symbol: _swift_getObjCClassFromMetadata

Undefined symbol: associated type descriptor for _ErrorType

Undefined symbol: method descriptor for Swift.ExpressibleByExtendedGraphemeClusterLiteral.init(extendedGraphemeClusterLiteral: A.ExtendedGraphemeClusterLiteralType) -> A

Undefined symbol: protocol descriptor for Swift.ExpressibleByUnicodeScalarLiteral

Undefined symbol: (extension in Foundation):Foundation._BridgedStoredNSError.errorUserInfo.getter : [Swift.String : Any]

Undefined symbol: method descriptor for Foundation._BridgedStoredNSError._nsError.getter : __C.NSError

Undefined symbol: base conformance descriptor for Swift.ExpressibleByStringLiteral: Swift.ExpressibleByExtendedGraphemeClusterLiteral

Undefined symbol: (extension in Foundation):Swift.Error< where A: Foundation.CustomNSError>._domain.getter : Swift.String

Undefined symbol: (extension in Foundation):Foundation._BridgedStoredNSError.init(_bridgedNSError: __C.NSError) -> A?

Undefined symbol: method descriptor for Swift.ExpressibleByStringLiteral.init(stringLiteral: A.StringLiteralType) -> A

Undefined symbol: protocol witness table for Swift.String : Swift._ExpressibleByBuiltinExtendedGraphemeClusterLiteral in Swift

Undefined symbol: protocol witness table for Swift.String : Swift._ExpressibleByBuiltinStringLiteral in Swift

Undefined symbol: base conformance descriptor for Foundation.CustomNSError: Swift.Error

Undefined symbol: _swift_unknownObjectRetain

Undefined symbol: static Swift._DictionaryStorage.allocate(capacity: Swift.Int) -> Swift._DictionaryStorage<A, B>

Undefined symbol: protocol descriptor for Foundation.CustomNSError

Undefined symbol: _swift_initStaticObject

Undefined symbol: Swift._findStringSwitchCaseWithCache(cases: [Swift.StaticString], string: Swift.String, cache: inout Swift._OpaqueStringSwitchCache) -> Swift.Int

Undefined symbol: type metadata for Swift.StaticString

Undefined symbol: _swift_getWitnessTable

Undefined symbol: Swift.Hasher._combine(Swift.UInt) -> ()

Undefined symbol: Swift._StringObject.rawBits.getter : (Swift.UInt64, Swift.UInt64)

Undefined symbol: method descriptor for static Swift._ObjectiveCBridgeable._unconditionallyBridgeFromObjectiveC(A._ObjectiveCType?) -> A

Undefined symbol: associated type descriptor for ExtendedGraphemeClusterLiteralType

Undefined symbol: __swiftEmptyArrayStorage

Undefined symbol: associated type descriptor for UnicodeScalarLiteralType

Undefined symbol: protocol descriptor for Swift._HasCustomAnyHashableRepresentation

Undefined symbol: protocol descriptor for Swift.ExpressibleByExtendedGraphemeClusterLiteral

Undefined symbol: _swift_errorRetain

Undefined symbol: method descriptor for Swift.RawRepresentable.init(rawValue: A.RawValue) -> A?

Undefined symbol: method descriptor for static Swift._ObjectiveCBridgeable._conditionallyBridgeFromObjectiveC(_: A._ObjectiveCType, result: inout A?) -> Swift.Bool

Undefined symbol: Swift.Hasher.init(_seed: Swift.Int) -> Swift.Hasher

Undefined symbol: method descriptor for static Swift._ObjectiveCBridgeable._forceBridgeFromObjectiveC(_: A._ObjectiveCType, result: inout A?) -> ()

Undefined symbol: protocol descriptor for Swift._ObjectiveCBridgeable

Undefined symbol: value witness table for Builtin.Int32

Undefined symbol: base conformance descriptor for Swift._SwiftNewtypeWrapper: Swift._HasCustomAnyHashableRepresentation

Undefined symbol: __swift_FORCE_LOAD_$_swiftCompatibilityDynamicReplacements

Undefined symbol: static (extension in Foundation):Foundation._BridgedStoredNSError.== infix(A, A) -> Swift.Bool

Undefined symbol: protocol descriptor for Swift.ExpressibleByStringLiteral

Undefined symbol: base conformance descriptor for Swift._SwiftNewtypeWrapper: Swift.RawRepresentable

Undefined symbol: (extension in Foundation):Foundation._BridgedStoredNSError.init(_: A.Code, userInfo: [Swift.String : Any]) -> A

Undefined symbol: protocol descriptor for Swift._SwiftNewtypeWrapper

Undefined symbol: method descriptor for Swift.Error._domain.getter : Swift.String

Undefined symbol: __swift_FORCE_LOAD_$_swiftCompatibility50

Undefined symbol: protocol descriptor for Swift.RawRepresentable

Undefined symbol: method descriptor for static Foundation.CustomNSError.errorDomain.getter : Swift.String

Undefined symbol: (extension in Foundation):Swift.String._bridgeToObjectiveC() -> __C.NSString

Undefined symbol: Swift.String.hashValue.getter : Swift.Int

Undefined symbol: protocol descriptor for Swift.Equatable

Undefined symbol: base conformance descriptor for Swift.Hashable: Swift.Equatable

Undefined symbol: _swift_arrayDestroy

Undefined symbol: _swift_retain

Undefined symbol: protocol witness table for Swift.String : Swift.Hashable in Swift

Undefined symbol: (extension in Swift):Swift.Error._userInfo.getter : Swift.AnyObject?

Undefined symbol: protocol descriptor for Swift.Hashable

Undefined symbol: associated conformance descriptor for Swift.ExpressibleByUnicodeScalarLiteral.UnicodeScalarLiteralType: Swift._ExpressibleByBuiltinUnicodeScalarLiteral

Undefined symbol: method descriptor for Foundation.CustomNSError.errorUserInfo.getter : [Swift.String : Any]

Undefined symbol: associated type descriptor for StringLiteralType

Undefined symbol: static (extension in Foundation):Swift.String._conditionallyBridgeFromObjectiveC(_: __C.NSString, result: inout Swift.String?) -> Swift.Bool

Undefined symbol: static (extension in Foundation):Swift.String._forceBridgeFromObjectiveC(_: __C.NSString, result: inout Swift.String?) -> ()

Undefined symbol: protocol witness table for Swift.String : Swift._ExpressibleByBuiltinUnicodeScalarLiteral in Swift

Undefined symbol: method descriptor for Swift.Hashable.hashValue.getter : Swift.Int

Undefined symbol: type metadata accessor for Swift._ContiguousArrayStorage

Undefined symbol: protocol descriptor for Swift.Error

Undefined symbol: method descriptor for Swift._ObjectiveCBridgeable._bridgeToObjectiveC() -> A._ObjectiveCType

Undefined symbol: method descriptor for Swift.RawRepresentable.rawValue.getter : A.RawValue

Undefined symbol: _swift_allocObject

Undefined symbol: associated conformance descriptor for Foundation._BridgedStoredNSError.Code: Foundation._ErrorCodeProtocol

Undefined symbol: base conformance descriptor for Foundation._ErrorCodeProtocol: Swift.Equatable

Undefined symbol: static Swift._SetStorage.resize(original: Swift.__RawSetStorage, capacity: Swift.Int, move: Swift.Bool) -> Swift._SetStorage<A>

Undefined symbol: static (extension in Foundation):Swift.Set._unconditionallyBridgeFromObjectiveC(__C.NSSet?) -> Swift.Set<A>

Undefined symbol: associated type descriptor for Code

Undefined symbol: Swift.ELEMENT_TYPE_OF_SET_VIOLATES_HASHABLE_REQUIREMENTS(Any.Type) -> Swift.Never

Undefined symbol: method descriptor for Swift.Hashable.hash(into: inout Swift.Hasher) -> ()

Undefined symbol: associated conformance descriptor for Swift.ExpressibleByExtendedGraphemeClusterLiteral.ExtendedGraphemeClusterLiteralType: Swift._ExpressibleByBuiltinExtendedGraphemeClusterLiteral

Undefined symbol: Swift.Hasher._finalize() -> Swift.Int

なんのこっちゃと思いググったら、あった。

参考サイト:https://github.com/mxcl/PromiseKit/issues/1059
m(_ _)m

この手順どおりに、作ったプロジェクトファイル内に、swiftファイルをただ作る。

そして作る際に、「Create Bridging Header」を選択

下記のように空のswiftファイルが追加されていればOK

ビルドしてみると、、、、!通った!

あっぱれ!

Unity NGUIのUI Labelのフォント名をスクリプトで取得

Unity NGUIラベルで指定のフォントを使っているものだけ抽出するのに、
必要なので調べてみた。

UILabel label = targetObject.GetComponent<UILabel>();

// Debug.Log("label.trueTypeFont.fontNames:" + label.trueTypeFont.fontNames.ToString());

Debug.Log("label.trueTypeFont.fontNames:" + label.trueTypeFont.name.ToString()); //これでフォント名取得できる!

label.trueTypeFont.fontNamesでは取得できないので注意

Unity NGUIのローカライズをスクリプトからKey指定で変更可能に

上記のようにNGUIUI Localizeで用意してあるローカライズ文言をスクリプトから、切り替える方法。

targetLabelGameObject.GetComponent<UILocalize>().key = "GOOD";

対象のUI Labelと同じgameobjectにUI Localizeコンポーネントがアタッチされていれば、これでOK!

ただし、UILabelのテキストが即時変わらない事があるので、
その場合は、一度下記のように非アクティブ→アクティブにすると反映される。

targetLabelGameObject.GetComponent<UILocalize>().key = "GOOD";
targetLabelGameObject.SetActive(false);
targetLabelGameObject.SetActive(true);

Unity2019 2.12f1で、AndroidのUnityロゴスプラッシュが紫色に

環境

  • Unity2019 2.12f1
  • MacOS 10.15.1
  • Androidビルド

上記環境で、Androidで実行するとスプラッシュから紫色になって、
logcatでエラーも吐かない原因不明の状態になった。

デフォルトのUnityロゴのスプラッシュさえ紫色に…

PlayerSettingや、Graphicsなどの設定おResetして、
デフォルトの状態にしても状態が回復せず、

別のSceneを読み込んでもデフォルトのskyboxが出るだけ。



原因がわからず、とりあえずUnityプロジェクトを新規作成し、
作ったデータをExportして移行したら…
直った!

Unity2019 2.12f1で、Androidビルド時に「Shader compiler: Compile Hidden/CubeBlend – Pass 0, Fragment Program: Internal error, unrecognized message from the shader compiler process. Please report a bug including this shader and the editor log.」

環境

  • Unity2019 2.12f1
  • MacOS 10.15.1
  • Androidビルド

Androidでいつものようにビルドしていると、下記エラーで表示される

Shader compiler: Compile Hidden/CubeBlend - Pass 0, Fragment Program: Internal error, unrecognized message from the shader compiler process.  Please report a bug including this shader and the editor log.

ググると下記記事に参考になりました。

https://forum.unity.com/threads/unity-2019-2-7-build-ios-crashes-in-shader-compile.757754/

Unity2019 3.0(beta)から、UnityShaderCompilerファイルをコピーし、
Unity2019 2.12f1のUnityShaderCompilerファイルを上書きすれば解決するとの事。

こういうフォルダにはいっている→「/Applications/Unity/Hub/Editor/2019.2.12f1/Unity.app/Contents/Tools/UnityShaderCompiler」

実際やってみたけど。
本当にエラーがなくなりました。

また、上記フォーラムにありがたいことのUnity2019 3.0(beta)のUnityShaderCompilerだけ添付してくれている人もいる。(Unityごとダウンローづする手間が省ける)

NGUIのUiButtonで、タップ時とタップを離した時のイベント取得メモ(ロングタップ等の判定に)

タップイベントを取得したいスクリプトに下記を追記し、

サンプルコード


public void OnPress(bool isDown) { Debug.Log("onPress: " + UIEventTrigger.current.name); if (UIEventTrigger.current.name.Equals("Btn_Boost")) { jetBtnFlg = true; } } public void OnRelease() { Debug.Log("onRelease:" + UIEventTrigger.current.name); if (UIEventTrigger.current.name.Equals("Btn_Boost")) { jetBtnFlg = false; } }

あとは、NGUIのUiButtonに、「UI Event trigger」をアタッチし、

下記キャプチャを参考に、Notifyに「OnPress」と「OnRelease」を伝達したい、
上記コードのGameObjectをセットし、OnPressとOnReleaseメソッドを選択してあげるだけ!

よく忘れてしまうのでメモ!

あと、「Event Trigger」と 「UI Event Trigger」というのがあり、NGUIのものはUI Event Triggerになるので注意!

Unityで、実機だけデバッグログを表示しない設定

アプリを長期間かけて作っていると色々デバッグログを仕掛けたくなるもの、
これがどんどん増えていくと、リリースする前に一気に非表示にしたいもの。

で、スマホはデバッグログを表示しないで、Unity上で作っている際は一括で非表示する方法

Unity2017〜?用


void Awake(){ #if UNITY_EDITOR // Unity上で、デバッグログ出力 Debug.unityLogger.logEnabled = true; #else // それ以外(実機)はデバッグログを出力しない Debug.unityLogger.logEnabled = false; #endif }

Unity5系?用


void Awake(){ #if UNITY_EDITOR // Unity上で、デバッグログ出力 Debug.logger.logEnabled = true; #else // 実機はデバッグログを出力しない Debug.logger.logEnabled = false; #endif }

無効にするタイミングは一番最初にするように調整してね。

Unity ゲームなどで使う赤から青など徐々に色を変える計算

Unityで、指定色から指定色に切り替わる処理を書くが、毎回忘れてしまうので、メモ!

下記のように、赤から、緑など。通常の黒から白や、透過度を徐々に変えるのは簡単だが、
RGBをいじって、青から、赤などの色変化の計算はちょっと手間なので忘れてしまう。

指定の色から、指定の色に徐々に色が変わるサンプルスクリプト



// Color(0.17254901960784f ,0.074509803921569f ,0.062745098039216f); // スタートカ ラー // Color(0.97647058823529f ,0.83921568627451f ,0.31764705882353f); // ゴールカラー // グラデーションのポジションを管理する値 0f〜1f float currentPointColor = (float)gameCheckPoint / (float)goalCheckPoint; float r = (0.97f - 0.17f) * currentPointColor + 0.17f; // 指定の色から指定色へグラデーション。 float g = (0.89f - 0.07f) * currentPointColor + 0.07f; // 指定の色から指定色へグラデーション。 float b = (0.31f - 0.06f) * currentPointColor + 0.06f; // 指定の色から指定色へグラデーション。 scaffoldObj.transform.Find("background").GetComponent<SpriteRenderer>().color = new Color(r,g,b);

ポイント


float r = (0.97f - 0.17f) * currentPointColor + 0.17f;

R = (Rのゴール値 – Rのスタート値) * グラデーションのポイントを管理 + Rのスタート値 という意味

※RはRGBの赤

また、RGBの#ffffffなどのHEX値から、上記Coloe型の0f,0f,0fのフォーマットに変換する場合は、下記ツールを使うと簡単に変換できます。

#ff0000 → 1f,0f,0f 変換ツール

Androidアプリのよくあるイカしたアプリのダウンロードボタンの作成方法! と、流入元分析!

クレカの有効期限切れで、、サーバー落ちてましたw。。

SEOだいぶ下がったか、、泣

というわけで、泣く子も黙るわけでもない久々の更新

アプリDLボタンのバッジ作成ツール

ここからバッジをサクッと生成できるんす!

https://play.google.com/intl/ja/badges/

UTMソース や、UTMキャンペーン を指定して、

どのブログや、SNSから流入してDLしたなどがわかるようになってます。

レポートは、Google Play Consoleの下記画面から見れるようです。

UTMタグで獲得チャネルの分析

https://developers.google.com/analytics/devguides/collection/android/v4/campaigns#google-play-url-builder

GooglePlay向けのUTMタグ生成サイトが、404になっていて、
どこで、android用のUTMタグの正しい形式を確認すればとおもっていましたが、バッジ作成ツールで生成すればよかったんですね。
先程の、バッジツールで、UTMソースや、キャンペーンを指定するとタグが反映されるので、
そちらでわかります。


<a href='https://play.google.com/store/apps/details?id=[パッケージ名]&utm_source=[UTMソース]&utm_campaign=[UTMキャンペーン]&pcampaignid=MKT-Other-global-all-co-prtnr-py-PartBadge-Mar2515-1'><img alt='Google Play で手に入れよう' src='https://play.google.com/intl/ja/badges/images/generic/ja_badge_web_generic.png'/></a>

この部分。


https://play.google.com/store/apps/details?id=[パッケージ名]&utm_source=[UTMソース]&utm_campaign=[UTMキャンペーン]

他にも便利なツールが色々

こちらはiOS/Androidのバッジも作れるすぐれもの!

http://mama-hack.com/app-reach/

関係ありそうなサイト一覧