Add AdNetwork
This commit is contained in:
parent
189ed1c365
commit
52bc654764
|
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: a541636fe019e4287bbde9fc5406301a
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 949bf3efe84914b718a63835d0f934f3
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,7 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 39dd59b7c002145379fd263f890f693f
|
||||
TextScriptImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Binary file not shown.
|
|
@ -0,0 +1,33 @@
|
|||
fileFormatVersion: 2
|
||||
guid: abf765bf3ce5f4d189d796a59a689c18
|
||||
PluginImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
iconMap: {}
|
||||
executionOrder: {}
|
||||
defineConstraints: []
|
||||
isPreloaded: 0
|
||||
isOverridable: 0
|
||||
isExplicitlyReferenced: 0
|
||||
validateReferences: 1
|
||||
platformData:
|
||||
- first:
|
||||
Any:
|
||||
second:
|
||||
enabled: 0
|
||||
settings: {}
|
||||
- first:
|
||||
Editor: Editor
|
||||
second:
|
||||
enabled: 1
|
||||
settings:
|
||||
DefaultValueInitialized: true
|
||||
- first:
|
||||
Windows Store Apps: WindowsStoreApps
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: AnyCPU
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Binary file not shown.
|
|
@ -0,0 +1,33 @@
|
|||
fileFormatVersion: 2
|
||||
guid: deecd3a85ccc84a13a0bf611ba4cdbac
|
||||
PluginImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
iconMap: {}
|
||||
executionOrder: {}
|
||||
defineConstraints: []
|
||||
isPreloaded: 0
|
||||
isOverridable: 0
|
||||
isExplicitlyReferenced: 0
|
||||
validateReferences: 1
|
||||
platformData:
|
||||
- first:
|
||||
Any:
|
||||
second:
|
||||
enabled: 0
|
||||
settings: {}
|
||||
- first:
|
||||
Editor: Editor
|
||||
second:
|
||||
enabled: 1
|
||||
settings:
|
||||
DefaultValueInitialized: true
|
||||
- first:
|
||||
Windows Store Apps: WindowsStoreApps
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: AnyCPU
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Binary file not shown.
|
|
@ -0,0 +1,33 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 3a4e527f4fff0443887e8a099e7f5c02
|
||||
PluginImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
iconMap: {}
|
||||
executionOrder: {}
|
||||
defineConstraints: []
|
||||
isPreloaded: 0
|
||||
isOverridable: 0
|
||||
isExplicitlyReferenced: 0
|
||||
validateReferences: 1
|
||||
platformData:
|
||||
- first:
|
||||
Any:
|
||||
second:
|
||||
enabled: 0
|
||||
settings: {}
|
||||
- first:
|
||||
Editor: Editor
|
||||
second:
|
||||
enabled: 1
|
||||
settings:
|
||||
DefaultValueInitialized: true
|
||||
- first:
|
||||
Windows Store Apps: WindowsStoreApps
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: AnyCPU
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Binary file not shown.
|
|
@ -0,0 +1,33 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 592cfd036a2c941f9ad2da0e1eb567ba
|
||||
PluginImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
iconMap: {}
|
||||
executionOrder: {}
|
||||
defineConstraints: []
|
||||
isPreloaded: 0
|
||||
isOverridable: 0
|
||||
isExplicitlyReferenced: 0
|
||||
validateReferences: 1
|
||||
platformData:
|
||||
- first:
|
||||
Any:
|
||||
second:
|
||||
enabled: 0
|
||||
settings: {}
|
||||
- first:
|
||||
Editor: Editor
|
||||
second:
|
||||
enabled: 1
|
||||
settings:
|
||||
DefaultValueInitialized: true
|
||||
- first:
|
||||
Windows Store Apps: WindowsStoreApps
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: AnyCPU
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Binary file not shown.
|
|
@ -0,0 +1,33 @@
|
|||
fileFormatVersion: 2
|
||||
guid: b94960ef1b252403380dd890e1c05761
|
||||
PluginImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
iconMap: {}
|
||||
executionOrder: {}
|
||||
defineConstraints: []
|
||||
isPreloaded: 0
|
||||
isOverridable: 0
|
||||
isExplicitlyReferenced: 0
|
||||
validateReferences: 1
|
||||
platformData:
|
||||
- first:
|
||||
Any:
|
||||
second:
|
||||
enabled: 0
|
||||
settings: {}
|
||||
- first:
|
||||
Editor: Editor
|
||||
second:
|
||||
enabled: 1
|
||||
settings:
|
||||
DefaultValueInitialized: true
|
||||
- first:
|
||||
Windows Store Apps: WindowsStoreApps
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: AnyCPU
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
|
@ -0,0 +1,245 @@
|
|||
Copyright (C) 2014 Google Inc.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
|
||||
Apache License
|
||||
Version 2.0, January 2004
|
||||
http://www.apache.org/licenses/
|
||||
|
||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||
|
||||
1. Definitions.
|
||||
|
||||
"License" shall mean the terms and conditions for use, reproduction,
|
||||
and distribution as defined by Sections 1 through 9 of this document.
|
||||
|
||||
"Licensor" shall mean the copyright owner or entity authorized by
|
||||
the copyright owner that is granting the License.
|
||||
|
||||
"Legal Entity" shall mean the union of the acting entity and all
|
||||
other entities that control, are controlled by, or are under common
|
||||
control with that entity. For the purposes of this definition,
|
||||
"control" means (i) the power, direct or indirect, to cause the
|
||||
direction or management of such entity, whether by contract or
|
||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||
|
||||
"You" (or "Your") shall mean an individual or Legal Entity
|
||||
exercising permissions granted by this License.
|
||||
|
||||
"Source" form shall mean the preferred form for making modifications,
|
||||
including but not limited to software source code, documentation
|
||||
source, and configuration files.
|
||||
|
||||
"Object" form shall mean any form resulting from mechanical
|
||||
transformation or translation of a Source form, including but
|
||||
not limited to compiled object code, generated documentation,
|
||||
and conversions to other media types.
|
||||
|
||||
"Work" shall mean the work of authorship, whether in Source or
|
||||
Object form, made available under the License, as indicated by a
|
||||
copyright notice that is included in or attached to the work
|
||||
(an example is provided in the Appendix below).
|
||||
|
||||
"Derivative Works" shall mean any work, whether in Source or Object
|
||||
form, that is based on (or derived from) the Work and for which the
|
||||
editorial revisions, annotations, elaborations, or other modifications
|
||||
represent, as a whole, an original work of authorship. For the purposes
|
||||
of this License, Derivative Works shall not include works that remain
|
||||
separable from, or merely link (or bind by name) to the interfaces of,
|
||||
the Work and Derivative Works thereof.
|
||||
|
||||
"Contribution" shall mean any work of authorship, including
|
||||
the original version of the Work and any modifications or additions
|
||||
to that Work or Derivative Works thereof, that is intentionally
|
||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||
or by an individual or Legal Entity authorized to submit on behalf of
|
||||
the copyright owner. For the purposes of this definition, "submitted"
|
||||
means any form of electronic, verbal, or written communication sent
|
||||
to the Licensor or its representatives, including but not limited to
|
||||
communication on electronic mailing lists, source code control systems,
|
||||
and issue tracking systems that are managed by, or on behalf of, the
|
||||
Licensor for the purpose of discussing and improving the Work, but
|
||||
excluding communication that is conspicuously marked or otherwise
|
||||
designated in writing by the copyright owner as "Not a Contribution."
|
||||
|
||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||
on behalf of whom a Contribution has been received by Licensor and
|
||||
subsequently incorporated within the Work.
|
||||
|
||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
copyright license to reproduce, prepare Derivative Works of,
|
||||
publicly display, publicly perform, sublicense, and distribute the
|
||||
Work and such Derivative Works in Source or Object form.
|
||||
|
||||
3. Grant of Patent License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
(except as stated in this section) patent license to make, have made,
|
||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||
where such license applies only to those patent claims licensable
|
||||
by such Contributor that are necessarily infringed by their
|
||||
Contribution(s) alone or by combination of their Contribution(s)
|
||||
with the Work to which such Contribution(s) was submitted. If You
|
||||
institute patent litigation against any entity (including a
|
||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||
or a Contribution incorporated within the Work constitutes direct
|
||||
or contributory patent infringement, then any patent licenses
|
||||
granted to You under this License for that Work shall terminate
|
||||
as of the date such litigation is filed.
|
||||
|
||||
4. Redistribution. You may reproduce and distribute copies of the
|
||||
Work or Derivative Works thereof in any medium, with or without
|
||||
modifications, and in Source or Object form, provided that You
|
||||
meet the following conditions:
|
||||
|
||||
(a) You must give any other recipients of the Work or
|
||||
Derivative Works a copy of this License; and
|
||||
|
||||
(b) You must cause any modified files to carry prominent notices
|
||||
stating that You changed the files; and
|
||||
|
||||
(c) You must retain, in the Source form of any Derivative Works
|
||||
that You distribute, all copyright, patent, trademark, and
|
||||
attribution notices from the Source form of the Work,
|
||||
excluding those notices that do not pertain to any part of
|
||||
the Derivative Works; and
|
||||
|
||||
(d) If the Work includes a "NOTICE" text file as part of its
|
||||
distribution, then any Derivative Works that You distribute must
|
||||
include a readable copy of the attribution notices contained
|
||||
within such NOTICE file, excluding those notices that do not
|
||||
pertain to any part of the Derivative Works, in at least one
|
||||
of the following places: within a NOTICE text file distributed
|
||||
as part of the Derivative Works; within the Source form or
|
||||
documentation, if provided along with the Derivative Works; or,
|
||||
within a display generated by the Derivative Works, if and
|
||||
wherever such third-party notices normally appear. The contents
|
||||
of the NOTICE file are for informational purposes only and
|
||||
do not modify the License. You may add Your own attribution
|
||||
notices within Derivative Works that You distribute, alongside
|
||||
or as an addendum to the NOTICE text from the Work, provided
|
||||
that such additional attribution notices cannot be construed
|
||||
as modifying the License.
|
||||
|
||||
You may add Your own copyright statement to Your modifications and
|
||||
may provide additional or different license terms and conditions
|
||||
for use, reproduction, or distribution of Your modifications, or
|
||||
for any such Derivative Works as a whole, provided Your use,
|
||||
reproduction, and distribution of the Work otherwise complies with
|
||||
the conditions stated in this License.
|
||||
|
||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||
any Contribution intentionally submitted for inclusion in the Work
|
||||
by You to the Licensor shall be under the terms and conditions of
|
||||
this License, without any additional terms or conditions.
|
||||
Notwithstanding the above, nothing herein shall supersede or modify
|
||||
the terms of any separate license agreement you may have executed
|
||||
with Licensor regarding such Contributions.
|
||||
|
||||
6. Trademarks. This License does not grant permission to use the trade
|
||||
names, trademarks, service marks, or product names of the Licensor,
|
||||
except as required for reasonable and customary use in describing the
|
||||
origin of the Work and reproducing the content of the NOTICE file.
|
||||
|
||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||
agreed to in writing, Licensor provides the Work (and each
|
||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
implied, including, without limitation, any warranties or conditions
|
||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||
appropriateness of using or redistributing the Work and assume any
|
||||
risks associated with Your exercise of permissions under this License.
|
||||
|
||||
8. Limitation of Liability. In no event and under no legal theory,
|
||||
whether in tort (including negligence), contract, or otherwise,
|
||||
unless required by applicable law (such as deliberate and grossly
|
||||
negligent acts) or agreed to in writing, shall any Contributor be
|
||||
liable to You for damages, including any direct, indirect, special,
|
||||
incidental, or consequential damages of any character arising as a
|
||||
result of this License or out of the use or inability to use the
|
||||
Work (including but not limited to damages for loss of goodwill,
|
||||
work stoppage, computer failure or malfunction, or any and all
|
||||
other commercial damages or losses), even if such Contributor
|
||||
has been advised of the possibility of such damages.
|
||||
|
||||
9. Accepting Warranty or Additional Liability. While redistributing
|
||||
the Work or Derivative Works thereof, You may choose to offer,
|
||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||
or other liability obligations and/or rights consistent with this
|
||||
License. However, in accepting such obligations, You may act only
|
||||
on Your own behalf and on Your sole responsibility, not on behalf
|
||||
of any other Contributor, and only if You agree to indemnify,
|
||||
defend, and hold each Contributor harmless for any liability
|
||||
incurred by, or claims asserted against, such Contributor by reason
|
||||
of your accepting any such warranty or additional liability.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
APPENDIX: How to apply the Apache License to your work.
|
||||
|
||||
To apply the Apache License to your work, attach the following
|
||||
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||
replaced with your own identifying information. (Don't include
|
||||
the brackets!) The text should be enclosed in the appropriate
|
||||
comment syntax for the file format. We also recommend that a
|
||||
file or class name and description of purpose be included on the
|
||||
same "printed page" as the copyright notice for easier
|
||||
identification within third-party archives.
|
||||
|
||||
Copyright [yyyy] [name of copyright owner]
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
|
||||
====================================================================================================
|
||||
This package uses MiniJSON
|
||||
|
||||
Copyright (c) 2013 Calvin Rien
|
||||
|
||||
Based on the JSON parser by Patrick van Bergen
|
||||
http://techblog.procurios.nl/k/618/news/view/14605/14863/How-do-I-write-my-own-parser-for-JSON.html
|
||||
|
||||
Simplified it so that it doesn't throw exceptions
|
||||
and can be used in Unity iPhone with maximum code stripping.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
"Software"), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Software, and to
|
||||
permit persons to whom the Software is furnished to do so, subject to
|
||||
the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 807495fed00f447198f5a6bc6a416c69
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
|
@ -0,0 +1,768 @@
|
|||
External Dependency Manager for Unity
|
||||
========
|
||||
|
||||
# Overview
|
||||
|
||||
The External Dependency Manager for Unity (EDM4U)
|
||||
(formerly Play Services Resolver / Jar Resolver) is intended to be used by any
|
||||
Unity plugin that requires:
|
||||
|
||||
* Android specific libraries (e.g
|
||||
[AARs](https://developer.android.com/studio/projects/android-library.html)).
|
||||
* iOS [CocoaPods](https://cocoapods.org/).
|
||||
* Version management of transitive dependencies.
|
||||
* Management of Package Manager (PM) Registries.
|
||||
|
||||
Updated releases are available on
|
||||
[GitHub](https://github.com/googlesamples/unity-jar-resolver)
|
||||
|
||||
# Background
|
||||
|
||||
Many Unity plugins have dependencies upon Android specific libraries, iOS
|
||||
CocoaPods, and sometimes have transitive dependencies upon other Unity plugins.
|
||||
This causes the following problems:
|
||||
|
||||
* Integrating platform specific (e.g Android and iOS) libraries within a
|
||||
Unity project can be complex and a burden on a Unity plugin maintainer.
|
||||
* The process of resolving conflicting dependencies on platform specific
|
||||
libraries is pushed to the developer attempting to use a Unity plugin.
|
||||
The developer trying to use you plugin is very likely to give up when
|
||||
faced with Android or iOS specific build errors.
|
||||
* The process of resolving conflicting Unity plugins (due to shared Unity
|
||||
plugin components) is pushed to the developer attempting to use your Unity
|
||||
plugin. In an effort to resolve conflicts, the developer will very likely
|
||||
attempt to resolve problems by deleting random files in your plugin,
|
||||
report bugs when that doesn't work and finally give up.
|
||||
|
||||
EDM provides solutions for each of these problems.
|
||||
|
||||
## Android Dependency Management
|
||||
|
||||
The *Android Resolver* component of this plugin will download and integrate
|
||||
Android library dependencies and handle any conflicts between plugins that share
|
||||
the same dependencies.
|
||||
|
||||
Without the Android Resolver, typically Unity plugins bundle their AAR and
|
||||
JAR dependencies, e.g. a Unity plugin `SomePlugin` that requires the Google
|
||||
Play Games Android library would redistribute the library and its transitive
|
||||
dependencies in the folder `SomePlugin/Android/`. When a user imports
|
||||
`SomeOtherPlugin` that includes the same libraries (potentially at different
|
||||
versions) in `SomeOtherPlugin/Android/`, the developer using `SomePlugin` and
|
||||
`SomeOtherPlugin` will see an error when building for Android that can be hard
|
||||
to interpret.
|
||||
|
||||
Using the Android Resolver to manage Android library dependencies:
|
||||
|
||||
* Solves Android library conflicts between plugins.
|
||||
* Handles all of the various processing steps required to use Android
|
||||
libraries (AARs, JARs) in Unity 4.x and above projects. Almost all
|
||||
versions of Unity have - at best - partial support for AARs.
|
||||
* (Experimental) Supports minification of included Java components without
|
||||
exporting a project.
|
||||
|
||||
## iOS Dependency Management
|
||||
|
||||
The *iOS Resolver* component of this plugin integrates with
|
||||
[CocoaPods](https://cocoapods.org/) to download and integrate iOS libraries
|
||||
and frameworks into the Xcode project Unity generates when building for iOS.
|
||||
Using CocoaPods allows multiple plugins to utilize shared components without
|
||||
forcing developers to fix either duplicate or incompatible versions of
|
||||
libraries included through multiple Unity plugins in their project.
|
||||
|
||||
## Package Manager Registry Setup
|
||||
|
||||
The [Package Manager](https://docs.unity3d.com/Manual/Packages.html)
|
||||
(PM) makes use of [NPM](https://www.npmjs.com/) registry servers for package
|
||||
hosting and provides ways to discover, install, upgrade and uninstall packages.
|
||||
This makes it easier for developers to manage plugins within their projects.
|
||||
|
||||
However, installing additional package registries requires a few manual steps
|
||||
that can potentially be error prone. The *Package Manager Resolver*
|
||||
component of this plugin integrates with
|
||||
[PM](https://docs.unity3d.com/Manual/Packages.html) to provide a way to
|
||||
auto-install PM package registries when a `.unitypackage` is installed which
|
||||
allows plugin maintainers to ship a `.unitypackage` that can provide access
|
||||
to their own PM registry server to make it easier for developers to
|
||||
manage their plugins.
|
||||
|
||||
## Unity Plugin Version Management
|
||||
|
||||
Finally, the *Version Handler* component of this plugin simplifies the process
|
||||
of managing transitive dependencies of Unity plugins and each plugin's upgrade
|
||||
process.
|
||||
|
||||
For example, without the Version Handler plugin, if:
|
||||
|
||||
* Unity plugin `SomePlugin` includes `EDM4U` plugin at
|
||||
version 1.1.
|
||||
* Unity plugin `SomeOtherPlugin` includes `EDM4U`
|
||||
plugin at version 1.2.
|
||||
|
||||
The version of `EDM4U` included in the developer's project depends upon the
|
||||
order the developer imports `SomePlugin` or `SomeOtherPlugin`.
|
||||
|
||||
This results in:
|
||||
|
||||
* `EDM4U` at version 1.2, if `SomePlugin` is imported then `SomeOtherPlugin`
|
||||
is imported.
|
||||
* `EDM4U` at version 1.1, if `SomeOtherPlugin` is imported then
|
||||
`SomePlugin` is imported.
|
||||
|
||||
The Version Handler solves the problem of managing transitive dependencies by:
|
||||
|
||||
* Specifying a set of packaging requirements that enable a plugin at
|
||||
different versions to be imported into a Unity project.
|
||||
* Providing activation logic that selects the latest version of a plugin
|
||||
within a project.
|
||||
|
||||
When using the Version Handler to manage `EDM4U` included in `SomePlugin` and
|
||||
`SomeOtherPlugin`, from the prior example, version 1.2 will always be the
|
||||
version activated in a developer's Unity project.
|
||||
|
||||
Plugin creators are encouraged to adopt this library to ease integration for
|
||||
their customers. For more information about integrating EDM4U
|
||||
into your own plugin, see the [Plugin Redistribution](#plugin-redistribution)
|
||||
section of this document.
|
||||
|
||||
# Analytics
|
||||
|
||||
The External Dependency Manager for Unity plugin by default logs usage to Google
|
||||
Analytics. The purpose of the logging is to quantitatively measure the usage of
|
||||
functionality, to gather reports on integration failures and to inform future
|
||||
improvements to the developer experience of the External Dependency Manager
|
||||
plugin. Note that the analytics collected are limited to the scope of the EDM4U
|
||||
plugin’s usage.
|
||||
|
||||
For details of what is logged, please refer to the usage of
|
||||
`EditorMeasurement.Report()` in the source code.
|
||||
|
||||
# Requirements
|
||||
|
||||
The *Android Resolver* and *iOS Resolver* components of the plugin only work
|
||||
with Unity version 4.6.8 or higher.
|
||||
|
||||
The *Version Handler* component only works with Unity 5.x or higher as it
|
||||
depends upon the `PluginImporter` UnityEditor API.
|
||||
|
||||
The *Package Manager Resolver* component only works with
|
||||
Unity 2018.4 or above, when
|
||||
[scoped registry](https://docs.unity3d.com/Manual/upm-scoped.html)
|
||||
support was added to the Package Manager.
|
||||
|
||||
# Getting Started
|
||||
|
||||
Before you import EDM4U into your plugin project, you first
|
||||
need to consider whether you intend to *redistribute* `EDM4U`
|
||||
along with your own plugin.
|
||||
|
||||
## Plugin Redistribution
|
||||
|
||||
If you're a plugin maintainer, redistributing `EDM4U` inside your own plugin
|
||||
will ease the integration process for your users, by resolving dependency
|
||||
conflicts between your plugin and other plugins in a user's project.
|
||||
|
||||
If you wish to redistribute `EDM4U` inside your plugin,
|
||||
you **must** follow these steps when importing the
|
||||
`external-dependency-manager-*.unitypackage`, and when exporting your own plugin
|
||||
package:
|
||||
|
||||
1. Import the `external-dependency-manager-*.unitypackage` into your plugin
|
||||
project by
|
||||
[running Unity from the command line](https://docs.unity3d.com/Manual/CommandLineArguments.html), ensuring that
|
||||
you add the `-gvh_disable` option.
|
||||
1. Export your plugin by [running Unity from the command line](https://docs.unity3d.com/Manual/CommandLineArguments.html), ensuring that
|
||||
you:
|
||||
- Include the contents of the `Assets/PlayServicesResolver` and
|
||||
`Assets/ExternalDependencyManager` directory.
|
||||
- Add the `-gvh_disable` option.
|
||||
|
||||
You **must** specify the `-gvh_disable` option in order for the Version
|
||||
Handler to work correctly!
|
||||
|
||||
For example, the following command will import the
|
||||
`external-dependency-manager-1.2.46.0.unitypackage` into the project
|
||||
`MyPluginProject` and export the entire Assets folder to
|
||||
`MyPlugin.unitypackage`:
|
||||
|
||||
```
|
||||
Unity -gvh_disable \
|
||||
-batchmode \
|
||||
-importPackage external-dependency-manager-1.2.46.0.unitypackage \
|
||||
-projectPath MyPluginProject \
|
||||
-exportPackage Assets MyPlugin.unitypackage \
|
||||
-quit
|
||||
```
|
||||
|
||||
### Background
|
||||
|
||||
The *Version Handler* component relies upon deferring the load of editor DLLs
|
||||
so that it can run first and determine the latest version of a plugin component
|
||||
to activate. The build of `EDM4U` plugin has Unity asset metadata that is
|
||||
configured so that the editor components are not initially enabled when it's
|
||||
imported into a Unity project. To maintain this configuration when importing
|
||||
the `external-dependency-manager.unitypackage` into a Unity plugin project, you
|
||||
*must* specify the command line option `-gvh_disable` which will prevent the
|
||||
Version Handler component from running and changing the Unity asset metadata.
|
||||
|
||||
# Android Resolver Usage
|
||||
|
||||
The Android Resolver copies specified dependencies from local or remote Maven
|
||||
repositories into the Unity project when a user selects Android as the build
|
||||
target in the Unity editor.
|
||||
|
||||
1. Add the `external-dependency-manager-*.unitypackage` to your plugin
|
||||
project (assuming you are developing a plugin). If you are redistributing
|
||||
EDM4U with your plugin, you **must** follow the
|
||||
import steps in the [Getting Started](#getting-started) section!
|
||||
|
||||
2. Copy and rename the
|
||||
[SampleDependencies.xml](https://github.com/googlesamples/unity-jar-resolver/blob/master/sample/Assets/ExternalDependencyManager/Editor/SampleDependencies.xml)
|
||||
file into your plugin and add the dependencies your plugin requires.
|
||||
|
||||
The XML file just needs to be under an `Editor` directory and match the
|
||||
name `*Dependencies.xml`. For example,
|
||||
`MyPlugin/Editor/MyPluginDependencies.xml`.
|
||||
|
||||
3. Follow the steps in the [Getting Started](#getting-started)
|
||||
section when you are exporting your plugin package.
|
||||
|
||||
For example, to add the Google Play Games library
|
||||
(`com.google.android.gms:play-services-games` package) at version `9.8.0` to
|
||||
the set of a plugin's Android dependencies:
|
||||
|
||||
```
|
||||
<dependencies>
|
||||
<androidPackages>
|
||||
<androidPackage spec="com.google.android.gms:play-services-games:9.8.0">
|
||||
<androidSdkPackageIds>
|
||||
<androidSdkPackageId>extra-google-m2repository</androidSdkPackageId>
|
||||
</androidSdkPackageIds>
|
||||
</androidPackage>
|
||||
</androidPackages>
|
||||
</dependencies>
|
||||
```
|
||||
|
||||
The version specification (last component) supports:
|
||||
|
||||
* Specific versions e.g `9.8.0`
|
||||
* Partial matches e.g `9.8.+` would match 9.8.0, 9.8.1 etc. choosing the most
|
||||
recent version.
|
||||
* Latest version using `LATEST` or `+`. We do *not* recommend using this
|
||||
unless you're 100% sure the library you depend upon will not break your
|
||||
Unity plugin in future.
|
||||
|
||||
The above example specifies the dependency as a component of the Android SDK
|
||||
manager such that the Android SDK manager will be executed to install the
|
||||
package if it's not found. If your Android dependency is located on Maven
|
||||
central it's possible to specify the package simply using the `androidPackage`
|
||||
element:
|
||||
|
||||
```
|
||||
<dependencies>
|
||||
<androidPackages>
|
||||
<androidPackage spec="com.google.api-client:google-api-client-android:1.22.0" />
|
||||
</androidPackages>
|
||||
</dependencies>
|
||||
```
|
||||
|
||||
## Auto-resolution
|
||||
|
||||
By default the Android Resolver automatically monitors the dependencies you have
|
||||
specified and the `Plugins/Android` folder of your Unity project. The
|
||||
resolution process runs when the specified dependencies are not present in your
|
||||
project.
|
||||
|
||||
The *auto-resolution* process can be disabled via the
|
||||
`Assets > External Dependency Manager > Android Resolver > Settings` menu.
|
||||
|
||||
Manual resolution can be performed using the following menu options:
|
||||
|
||||
* `Assets > External Dependency Manager > Android Resolver > Resolve`
|
||||
* `Assets > External Dependency Manager > Android Resolver > Force Resolve`
|
||||
|
||||
## Deleting libraries
|
||||
|
||||
Resolved packages are tracked via asset labels by the Android Resolver.
|
||||
They can easily be deleted using the
|
||||
`Assets > External Dependency Manager > Android Resolver > Delete Resolved Libraries`
|
||||
menu item.
|
||||
|
||||
## Android Manifest Variable Processing
|
||||
|
||||
Some AAR files (for example play-services-measurement) contain variables that
|
||||
are processed by the Android Gradle plugin. Unfortunately, Unity does not
|
||||
perform the same processing when using Unity's Internal Build System, so the
|
||||
Android Resolver plugin handles known cases of this variable substitution
|
||||
by exploding the AAR into a folder and replacing `${applicationId}` with the
|
||||
`bundleID`.
|
||||
|
||||
Disabling AAR explosion and therefore Android manifest processing can be done
|
||||
via the `Assets > External Dependency Manager > Android Resolver > Settings`
|
||||
menu. You may want to disable explosion of AARs if you're exporting a project
|
||||
to be built with Gradle / Android Studio.
|
||||
|
||||
## ABI Stripping
|
||||
|
||||
Some AAR files contain native libraries (.so files) for each ABI supported
|
||||
by Android. Unfortunately, when targeting a single ABI (e.g x86), Unity does
|
||||
not strip native libraries for unused ABIs. To strip unused ABIs, the Android
|
||||
Resolver plugin explodes an AAR into a folder and removes unused ABIs to
|
||||
reduce the built APK size. Furthermore, if native libraries are not stripped
|
||||
from an APK (e.g you have a mix of Unity's x86 library and some armeabi-v7a
|
||||
libraries) Android may attempt to load the wrong library for the current
|
||||
runtime ABI completely breaking your plugin when targeting some architectures.
|
||||
|
||||
AAR explosion and therefore ABI stripping can be disabled via the
|
||||
`Assets > External Dependency Manager > Android Resolver > Settings` menu.
|
||||
You may want to disable explosion of AARs if you're exporting a project to be
|
||||
built with Gradle / Android Studio.
|
||||
|
||||
## Resolution Strategies
|
||||
|
||||
By default the Android Resolver will use Gradle to download dependencies prior
|
||||
to integrating them into a Unity project. This works with Unity's internal
|
||||
build system and Gradle / Android Studio project export.
|
||||
|
||||
It's possible to change the resolution strategy via the
|
||||
`Assets > External Dependency Manager > Android Resolver > Settings` menu.
|
||||
|
||||
### Download Artifacts with Gradle
|
||||
|
||||
Using the default resolution strategy, the Android resolver executes the
|
||||
following operations:
|
||||
|
||||
- Remove the result of previous Android resolutions.
|
||||
e.g Delete all files and directories labeled with "gpsr" under
|
||||
`Plugins/Android` from the project.
|
||||
- Collect the set of Android dependencies (libraries) specified by a
|
||||
project's `*Dependencies.xml` files.
|
||||
- Run `download_artifacts.gradle` with Gradle to resolve conflicts and,
|
||||
if successful, download the set of resolved Android libraries (AARs, JARs).
|
||||
- Process each AAR / JAR so that it can be used with the currently selected
|
||||
Unity build system (e.g Internal vs. Gradle, Export vs. No Export).
|
||||
This involves patching each reference to `applicationId` in the
|
||||
AndroidManifest.xml with the project's bundle ID. This means resolution
|
||||
must be run if the bundle ID is changed again.
|
||||
- Move the processed AARs to `Plugins/Android` so they will be included when
|
||||
Unity invokes the Android build.
|
||||
|
||||
### Integrate into mainTemplate.gradle
|
||||
|
||||
Unity 5.6 introduced support for customizing the `build.gradle` used to build
|
||||
Unity projects with Gradle. When the *Patch mainTemplate.gradle* setting is
|
||||
enabled, rather than downloading artifacts before the build, Android resolution
|
||||
results in the execution of the following operations:
|
||||
|
||||
- Remove the result of previous Android resolutions.
|
||||
e.g Delete all files and directories labeled with "gpsr" under
|
||||
`Plugins/Android` from the project and remove sections delimited with
|
||||
`// Android Resolver * Start` and `// Android Resolver * End` lines.
|
||||
- Collect the set of Android dependencies (libraries) specified by a
|
||||
project's `*Dependencies.xml` files.
|
||||
- Rename any `.srcaar` files in the build to `.aar` and exclude them from
|
||||
being included directly by Unity in the Android build as
|
||||
`mainTemplate.gradle` will be patched to include them instead from their
|
||||
local maven repositories.
|
||||
- Inject the required Gradle repositories into `mainTemplate.gradle` at the
|
||||
line matching the pattern
|
||||
`.*apply plugin: 'com\.android\.(application|library)'.*` or the section
|
||||
starting at the line `// Android Resolver Repos Start`.
|
||||
If you want to control the injection point in the file, the section
|
||||
delimited by the lines `// Android Resolver Repos Start` and
|
||||
`// Android Resolver Repos End` should be placed in the global scope
|
||||
before the `dependencies` section.
|
||||
- Inject the required Android dependencies (libraries) into
|
||||
`mainTemplate.gradle` at the line matching the pattern `***DEPS***` or
|
||||
the section starting at the line `// Android Resolver Dependencies Start`.
|
||||
If you want to control the injection point in the file, the section
|
||||
delimited by the lines `// Android Resolver Dependencies Start` and
|
||||
`// Android Resolver Dependencies End` should be placed in the
|
||||
`dependencies` section.
|
||||
- Inject the packaging options logic, which excludes architecture specific
|
||||
libraries based upon the selected build target, into `mainTemplate.gradle`
|
||||
at the line matching the pattern `android +{` or the section starting at
|
||||
the line `// Android Resolver Exclusions Start`.
|
||||
If you want to control the injection point in the file, the section
|
||||
delimited by the lines `// Android Resolver Exclusions Start` and
|
||||
`// Android Resolver Exclusions End` should be placed in the global
|
||||
scope before the `android` section.
|
||||
|
||||
## Dependency Tracking
|
||||
|
||||
The Android Resolver creates the
|
||||
`ProjectSettings/AndroidResolverDependencies.xml` to quickly determine the set
|
||||
of resolved dependencies in a project. This is used by the auto-resolution
|
||||
process to only run the expensive resolution process when necessary.
|
||||
|
||||
## Displaying Dependencies
|
||||
|
||||
It's possible to display the set of dependencies the Android Resolver
|
||||
would download and process in your project via the
|
||||
`Assets > External Dependency Manager > Android Resolver > Display Libraries`
|
||||
menu item.
|
||||
|
||||
# iOS Resolver Usage
|
||||
|
||||
The iOS resolver component of this plugin manages
|
||||
[CocoaPods](https://cocoapods.org/). A CocoaPods `Podfile` is generated and
|
||||
the `pod` tool is executed as a post build process step to add dependencies
|
||||
to the Xcode project exported by Unity.
|
||||
|
||||
Dependencies for iOS are added by referring to CocoaPods.
|
||||
|
||||
1. Add the `external-dependency-manager-*.unitypackage` to your plugin
|
||||
project (assuming you are developing a plugin). If you are redistributing
|
||||
EDM4U with your plugin, you **must** follow the
|
||||
import steps in the [Getting Started](#getting-started) section!
|
||||
|
||||
2. Copy and rename the
|
||||
[SampleDependencies.xml](https://github.com/googlesamples/unity-jar-resolver/blob/master/sample/Assets/ExternalDependencyManager/Editor/SampleDependencies.xml)
|
||||
file into your plugin and add the dependencies your plugin requires.
|
||||
|
||||
The XML file just needs to be under an `Editor` directory and match the
|
||||
name `*Dependencies.xml`. For example,
|
||||
`MyPlugin/Editor/MyPluginDependencies.xml`.
|
||||
|
||||
3. Follow the steps in the [Getting Started](#getting-started)
|
||||
section when you are exporting your plugin package.
|
||||
|
||||
For example, to add the AdMob pod, version 7.0 or greater with bitcode enabled:
|
||||
|
||||
```
|
||||
<dependencies>
|
||||
<iosPods>
|
||||
<iosPod name="Google-Mobile-Ads-SDK" version="~> 7.0" bitcodeEnabled="true"
|
||||
minTargetSdk="6.0" addToAllTargets="false" />
|
||||
</iosPods>
|
||||
</dependencies>
|
||||
```
|
||||
|
||||
## Integration Strategies
|
||||
|
||||
The `CocoaPods` are either:
|
||||
* Downloaded and injected into the Xcode project file directly, rather than
|
||||
creating a separate xcworkspace. We call this `Xcode project` integration.
|
||||
* If the Unity version supports opening a xcworkspace file, the `pod` tool
|
||||
is used as intended to generate a xcworkspace which references the
|
||||
CocoaPods. We call this `Xcode workspace` integration.
|
||||
|
||||
The resolution strategy can be changed via the
|
||||
`Assets > External Dependency Manager > iOS Resolver > Settings` menu.
|
||||
|
||||
### Appending text to generated Podfile
|
||||
In order to modify the generated Podfile you can create a script like this:
|
||||
```
|
||||
using System.IO;
|
||||
public class PostProcessIOS : MonoBehaviour {
|
||||
[PostProcessBuildAttribute(45)]//must be between 40 and 50 to ensure that it's not overriden by Podfile generation (40) and that it's added before "pod install" (50)
|
||||
private static void PostProcessBuild_iOS(BuildTarget target, string buildPath)
|
||||
{
|
||||
if (target == BuildTarget.iOS)
|
||||
{
|
||||
|
||||
using (StreamWriter sw = File.AppendText(buildPath + "/Podfile"))
|
||||
{
|
||||
//in this example I'm adding an app extension
|
||||
sw.WriteLine("\ntarget 'NSExtension' do\n pod 'Firebase/Messaging', '6.6.0'\nend");
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
# Package Manager Resolver Usage
|
||||
|
||||
Adding registries to the
|
||||
[Package Manager](https://docs.unity3d.com/Manual/Packages.html)
|
||||
(PM) is a manual process. The Package Manager Resolver (PMR) component
|
||||
of this plugin makes it easy for plugin maintainers to distribute new PM
|
||||
registry servers and easy for plugin users to manage PM registry servers.
|
||||
|
||||
## Adding Registries
|
||||
|
||||
1. Add the `external-dependency-manager-*.unitypackage` to your plugin
|
||||
project (assuming you are developing a plugin). If you are redistributing
|
||||
EDM4U with your plugin, you **must** follow the
|
||||
import steps in the [Getting Started](#getting-started) section!
|
||||
|
||||
2. Copy and rename the
|
||||
[SampleRegistries.xml](https://github.com/googlesamples/unity-jar-resolver/blob/master/sample/Assets/ExternalDependencyManager/Editor/sample/Assets/ExternalDependencyManager/Editor/SampleRegistries.xml)
|
||||
file into your plugin and add the registries your plugin requires.
|
||||
|
||||
The XML file just needs to be under an `Editor` directory and match the
|
||||
name `*Registries.xml` or labeled with `gumpr_registries`. For example,
|
||||
`MyPlugin/Editor/MyPluginRegistries.xml`.
|
||||
|
||||
3. Follow the steps in the [Getting Started](#getting-started)
|
||||
section when you are exporting your plugin package.
|
||||
|
||||
For example, to add a registry for plugins in the scope `com.coolstuff`:
|
||||
|
||||
```
|
||||
<registries>
|
||||
<registry name="Cool Stuff"
|
||||
url="https://unityregistry.coolstuff.com"
|
||||
termsOfService="https://coolstuff.com/unityregistry/terms"
|
||||
privacyPolicy="https://coolstuff.com/unityregistry/privacy">
|
||||
<scopes>
|
||||
<scope>com.coolstuff</scope>
|
||||
</scopes>
|
||||
</registry>
|
||||
</registries>
|
||||
```
|
||||
|
||||
When PMR is loaded it will prompt the developer to add the registry to their
|
||||
project if it isn't already present in the `Packages/manifest.json` file.
|
||||
|
||||
For more information, see Unity's documentation on
|
||||
[scoped package registries](https://docs.unity3d.com/Manual/upm-scoped.html).
|
||||
|
||||
## Managing Registries
|
||||
|
||||
It's possible to add and remove registries that are specified via PMR
|
||||
XML configuration files via the following menu options:
|
||||
|
||||
* `Assets > External Dependency Manager > Package Manager Resolver >
|
||||
Add Registries` will prompt the user with a window which allows them to
|
||||
add registries discovered in the project to the Package Manager.
|
||||
* `Assets > External Dependency Manager > Package Manager Resolver >
|
||||
Remove Registries` will prompt the user with a window which allows them to
|
||||
remove registries discovered in the project from the Package Manager.
|
||||
* `Assets > External Dependency Manager > Package Manager Resolver >
|
||||
Modify Registries` will prompt the user with a window which allows them to
|
||||
add or remove registries discovered in the project.
|
||||
|
||||
## Migration
|
||||
|
||||
PMR can migrate Version Handler packages installed in the `Assets` folder
|
||||
to PM packages. This requires the plugins to implement the following:
|
||||
|
||||
* `.unitypackage` must include a Version Handler manifests that describes
|
||||
the components of the plugin. If the plugin has no dependencies
|
||||
the manifest would just include the files in the plugin.
|
||||
* The PM package JSON provided by the registry must include a keyword
|
||||
(in the `versions.VERSION.keyword` list) that maps the PM package
|
||||
to a Version Handler package using the format
|
||||
`vh-name:VERSION_HANDLER_MANIFEST_NAME` where `VERSION_HANDLER_MANIFEST_NAME`
|
||||
is the name of the manifest defined in the `.unitypackage`. For
|
||||
more information see the description of the `gvhp_manifestname` asset label
|
||||
in the *Version Handler Usage* section.
|
||||
|
||||
When using the `Assets > External Dependency Manager >
|
||||
Package Manager Resolver > Migrate Packages` menu option, PMR then
|
||||
will:
|
||||
|
||||
* List all Version Handler manager packages in the project.
|
||||
* Search all available packages in the PM registries and fetch keywords
|
||||
associated with each package parsing the Version Handler manifest names
|
||||
for each package.
|
||||
* Map each installed Version Handler package to a PM package.
|
||||
* Prompt the user to migrate the discovered packages.
|
||||
* Perform package migration for all selected packages if the user clicks
|
||||
the `Apply` button.
|
||||
|
||||
## Configuration
|
||||
|
||||
PMR can be configured via the `Assets > External Dependency Manager >
|
||||
Package Manager Resolver > Settings` menu option:
|
||||
|
||||
* `Add package registries` when enabled, when the plugin loads or registry
|
||||
configuration files change, this will prompt the user to add registries
|
||||
that are not present in the Package Manager.
|
||||
* `Prompt to add package registries` will cause a developer to be prompted
|
||||
with a window that will ask for confirmation before adding registries.
|
||||
When this is disabled registries are added silently to the project.
|
||||
* `Prompt to migrate packages` will cause a developer to be prompted
|
||||
with a window that will ask for confirmation before migrating packages
|
||||
installed in the `Assets` directory to PM packages.
|
||||
* `Enable Analytics Reporting` when enabled, reports the use of the plugin
|
||||
to the developers so they can make imrpovements.
|
||||
* `Verbose logging` when enabled prints debug information to the console
|
||||
which can be useful when filing bug reports.
|
||||
|
||||
# Version Handler Usage
|
||||
|
||||
The Version Handler component of this plugin manages:
|
||||
|
||||
* Shared Unity plugin dependencies.
|
||||
* Upgrading Unity plugins by cleaning up old files from previous versions.
|
||||
* Uninstallation of plugins that are distributed with manifest files.
|
||||
* Restoration of plugin assets to their original install locations if assets
|
||||
are tagged with the `exportpath` label.
|
||||
|
||||
Since the Version Handler needs to modify Unity asset metadata (`.meta` files),
|
||||
to enable / disable components, rename and delete asset files it does not
|
||||
work with Package Manager installed packages. It's still possible to
|
||||
include EDM4U in Package Manager packages, the Version Handler component
|
||||
simply won't do anything to PM plugins in this case.
|
||||
|
||||
## Using Version Handler Managed Plugins
|
||||
|
||||
If a plugin is imported at multiple different versions into a project, if
|
||||
the Version Handler is enabled, it will automatically check all managed
|
||||
assets to determine the set of assets that are out of date and assets that
|
||||
should be removed. To disable automatic checking managed assets disable
|
||||
the `Enable version management` option in the
|
||||
`Assets > External Dependency Manager > Version Handler > Settings` menu.
|
||||
|
||||
If version management is disabled, it's possible to check managed assets
|
||||
manually using the
|
||||
`Assets > External Dependency Manager > Version Handler > Update` menu option.
|
||||
|
||||
### Listing Managed Plugins
|
||||
|
||||
Plugins managed by the Version Handler, those that ship with manifest files,
|
||||
can displayed using the `Assets > External Dependency Manager >
|
||||
Version Handler > Display Managed Packages` menu option. The list of plugins
|
||||
are written to the console window along with the set of files used by each
|
||||
plugin.
|
||||
|
||||
### Uninstalling Managed Plugins
|
||||
|
||||
Plugins managed by the Version Handler, those that ship with manifest files,
|
||||
can be removed using the `Assets > External Dependency Manager >
|
||||
Version Handler > Uninstall Managed Packages` menu option. This operation
|
||||
will display a window that allows a developer to select a set of plugins to
|
||||
remove which will remove all files owned by each plugin excluding those that
|
||||
are in use by other installed plugins.
|
||||
|
||||
Files managed by the Version Handler, those labeled with the `gvh` asset label,
|
||||
can be checked to see whether anything needs to be upgraded, disabled or
|
||||
removed using the `Assets > External Dependency Manager >
|
||||
Version Handler > Update` menu option.
|
||||
|
||||
### Restore Install Paths
|
||||
|
||||
Some developers move assets around in their project which can make it
|
||||
harder for plugin maintainers to debug issues if this breaks Unity's
|
||||
[special folders](https://docs.unity3d.com/Manual/SpecialFolders.html) rules.
|
||||
If assets are labeled with their original install / export path
|
||||
(see `gvhp_exportpath` below), Version Handler can restore assets to their
|
||||
original locations when using the `Assets > External Dependency Manager >
|
||||
Version Handler > Move Files To Install Locations` menu option.
|
||||
|
||||
### Settings
|
||||
|
||||
Some behavior of the Version Handler can be configured via the
|
||||
`Assets > External Dependency Manager > Version Handler > Settings` menu
|
||||
option.
|
||||
|
||||
* `Enable version management` controls whether the plugin should automatically
|
||||
check asset versions and apply changes. If this is disabled the process
|
||||
should be run manually when installing or upgrading managed plugins using
|
||||
`Assets > External Dependency Manager > Version Handler > Update`.
|
||||
* `Rename to canonical filenames` is a legacy option that will rename files to
|
||||
remove version numbers and other labels from filenames.
|
||||
* `Prompt for obsolete file deletion` enables the display of a window when
|
||||
obsolete files are deleted allowing the developer to select which files to
|
||||
delete and those to keep.
|
||||
* `Allow disabling files via renaming` controls whether obsolete or disabled
|
||||
files should be disabled by renaming them to `myfilename_DISABLED`.
|
||||
Renaming to disable files is required in some scenarios where Unity doesn't
|
||||
support removing files from the build via the PluginImporter.
|
||||
* `Enable Analytics Reporting` enables / disables usage reporting to plugin
|
||||
developers to improve the product.
|
||||
* `Verbose logging` enables _very_ noisy log output that is useful for
|
||||
debugging while filing a bug report or building a new managed plugin.
|
||||
* `Use project settings` saves settings for the plugin in the project rather
|
||||
than system-wide.
|
||||
|
||||
## Redistributing a Managed Plugin
|
||||
|
||||
The Version Handler employs a couple of methods for managing version
|
||||
selection, upgrade and removal of plugins.
|
||||
|
||||
* Each plugin can ship with a manifest file that lists the files it includes.
|
||||
This makes it possible for Version Handler to calculate the difference
|
||||
in assets between the most recent release of a plugin and the previous
|
||||
release installed in a project. If a files are removed the Version Handler
|
||||
will prompt the user to clean up obsolete files.
|
||||
* Plugins can ship using assets with unique names, unique GUIDs and version
|
||||
number labels. Version numbers can be attached to assets using labels or
|
||||
added to the filename (e.g `myfile.txt` would be `myfile_version-x.y.z.txt).
|
||||
This allows the Version Handler to determine which set of files are the
|
||||
same file at different versions, select the most recent version and prompt
|
||||
the developer to clean up old versions.
|
||||
|
||||
Unity plugins can be managed by the Version Handler using the following steps:
|
||||
|
||||
1. Add the `gvh` asset label to each asset (file) you want Version Handler
|
||||
to manage.
|
||||
1. Add the `gvh_version-VERSION` label to each asset where `VERSION` is the
|
||||
version of the plugin you're releasing (e.g 1.2.3).
|
||||
1. Add the `gvhp_exportpath-PATH` label to each asset where `PATH` is the
|
||||
export path of the file when the `.unitypackage` is created. This is
|
||||
used to track files if they're moved around in a project by developers.
|
||||
1. Optional: Add `gvh_targets-editor` label to each editor DLL in your
|
||||
plugin and disable `editor` as a target platform for the DLL.
|
||||
The Version Handler will enable the most recent version of this DLL when
|
||||
the plugin is imported.
|
||||
1. Optional: If your plugin is included in other Unity plugins, you should
|
||||
add the version number to each filename and change the GUID of each asset.
|
||||
This allows multiple versions of your plugin to be imported into a Unity
|
||||
project, with the Version Handler component activating only the most
|
||||
recent version.
|
||||
1. Create a manifest text file named `MY_UNIQUE_PLUGIN_NAME_VERSION.txt`
|
||||
that lists all the files in your plugin relative to the project root.
|
||||
Then add the `gvh_manifest` label to the asset to indicate this file is
|
||||
a plugin manifest.
|
||||
1. Optional: Add a `gvhp_manifestname-NAME` label to your manifest file
|
||||
to provide a human readable name for your package. If this isn't provided
|
||||
the name of the manifest file will be used as the package name.
|
||||
NAME can match the pattern `[0-9]+[a-zA-Z -]' where a leading integer
|
||||
will set the priority of the name where `0` is the highest priority
|
||||
and preferably used as the display name. The lowest value (i.e highest
|
||||
priority name) will be used as the display name and all other specified
|
||||
names will be aliases of the display name. Aliases can refer to previous
|
||||
names of the package allowing renaming across published versions.
|
||||
1. Redistribute EDM4U Unity plugin with your plugin.
|
||||
See the [Plugin Redistribution](#plugin-redistribution) for the details.
|
||||
|
||||
If you follow these steps:
|
||||
|
||||
* When users import a newer version of your plugin, files referenced by the
|
||||
older version's manifest are cleaned up.
|
||||
* The latest version of the plugin will be selected when users import
|
||||
multiple packages that include your plugin, assuming the steps in
|
||||
[Plugin Redistribution](#plugin-redistribution) are followed.
|
||||
|
||||
# Building from Source
|
||||
|
||||
To build this plugin from source you need the following tools installed:
|
||||
* Unity (with iOS and Android modules installed)
|
||||
|
||||
You can build the plugin by running the following from your shell
|
||||
(Linux / OSX):
|
||||
|
||||
```
|
||||
./gradlew build
|
||||
```
|
||||
|
||||
or Windows:
|
||||
|
||||
```
|
||||
./gradlew.bat build
|
||||
```
|
||||
|
||||
# Releasing
|
||||
|
||||
Each time a new build of this plugin is checked into the source tree you
|
||||
need to do the following:
|
||||
|
||||
* Bump the plugin version variable `pluginVersion` in `build.gradle`
|
||||
* Update `CHANGELOG.md` with the new version number and changes included in
|
||||
the release.
|
||||
* Build the release using `./gradlew release` which performs the following:
|
||||
* Updates `external-dependency-manager-*.unitypackage`
|
||||
* Copies the unpacked plugin to the `exploded` directory.
|
||||
* Updates template metadata files in the `plugin` directory.
|
||||
The GUIDs of all asset metadata is modified due to the version number
|
||||
change. Each file within the plugin is versioned to allow multiple
|
||||
versions of the plugin to be imported into a Unity project which allows
|
||||
the most recent version to be activated by the Version Handler
|
||||
component.
|
||||
* Create release commit using `./gradlew gitCreateReleaseCommit` which
|
||||
performs `git commit -a -m "description from CHANGELOG.md"`
|
||||
* Once the release commit is merge, tag the release using
|
||||
`./gradlew gitTagRelease` which performs the following:
|
||||
* `git tag -a pluginVersion -m "version RELEASE"` to tag the release.
|
||||
* Update tags on remote branch using `git push --tag REMOTE HEAD:master`
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 046625c64f6614014b29265dc01461c1
|
||||
TextScriptImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
|
@ -0,0 +1,13 @@
|
|||
Assets/ExternalDependencyManager/Editor/CHANGELOG.md
|
||||
Assets/ExternalDependencyManager/Editor/Google.IOSResolver_v1.2.164.dll
|
||||
Assets/ExternalDependencyManager/Editor/Google.IOSResolver_v1.2.164.dll.mdb
|
||||
Assets/ExternalDependencyManager/Editor/Google.JarResolver_v1.2.164.dll
|
||||
Assets/ExternalDependencyManager/Editor/Google.JarResolver_v1.2.164.dll.mdb
|
||||
Assets/ExternalDependencyManager/Editor/Google.PackageManagerResolver_v1.2.164.dll
|
||||
Assets/ExternalDependencyManager/Editor/Google.PackageManagerResolver_v1.2.164.dll.mdb
|
||||
Assets/ExternalDependencyManager/Editor/Google.VersionHandler.dll
|
||||
Assets/ExternalDependencyManager/Editor/Google.VersionHandler.dll.mdb
|
||||
Assets/ExternalDependencyManager/Editor/Google.VersionHandlerImpl_v1.2.164.dll
|
||||
Assets/ExternalDependencyManager/Editor/Google.VersionHandlerImpl_v1.2.164.dll.mdb
|
||||
Assets/ExternalDependencyManager/Editor/LICENSE
|
||||
Assets/ExternalDependencyManager/Editor/README.md
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 102cb82df4d3147bf867693f29bc5a03
|
||||
TextScriptImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 8de7dc06d234246b388388a6760b3342
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 50d65beef4907445493567daa5ba2ecf
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
|
@ -0,0 +1,546 @@
|
|||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!29 &1
|
||||
OcclusionCullingSettings:
|
||||
m_ObjectHideFlags: 0
|
||||
serializedVersion: 2
|
||||
m_OcclusionBakeSettings:
|
||||
smallestOccluder: 5
|
||||
smallestHole: 0.25
|
||||
backfaceThreshold: 100
|
||||
m_SceneGUID: 00000000000000000000000000000000
|
||||
m_OcclusionCullingData: {fileID: 0}
|
||||
--- !u!104 &2
|
||||
RenderSettings:
|
||||
m_ObjectHideFlags: 0
|
||||
serializedVersion: 9
|
||||
m_Fog: 0
|
||||
m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1}
|
||||
m_FogMode: 3
|
||||
m_FogDensity: 0.01
|
||||
m_LinearFogStart: 0
|
||||
m_LinearFogEnd: 300
|
||||
m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1}
|
||||
m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1}
|
||||
m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1}
|
||||
m_AmbientIntensity: 1
|
||||
m_AmbientMode: 0
|
||||
m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1}
|
||||
m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0}
|
||||
m_HaloStrength: 0.5
|
||||
m_FlareStrength: 1
|
||||
m_FlareFadeSpeed: 3
|
||||
m_HaloTexture: {fileID: 0}
|
||||
m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0}
|
||||
m_DefaultReflectionMode: 0
|
||||
m_DefaultReflectionResolution: 128
|
||||
m_ReflectionBounces: 1
|
||||
m_ReflectionIntensity: 1
|
||||
m_CustomReflection: {fileID: 0}
|
||||
m_Sun: {fileID: 0}
|
||||
m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1}
|
||||
m_UseRadianceAmbientProbe: 0
|
||||
--- !u!157 &3
|
||||
LightmapSettings:
|
||||
m_ObjectHideFlags: 0
|
||||
serializedVersion: 11
|
||||
m_GIWorkflowMode: 1
|
||||
m_GISettings:
|
||||
serializedVersion: 2
|
||||
m_BounceScale: 1
|
||||
m_IndirectOutputScale: 1
|
||||
m_AlbedoBoost: 1
|
||||
m_EnvironmentLightingMode: 0
|
||||
m_EnableBakedLightmaps: 1
|
||||
m_EnableRealtimeLightmaps: 1
|
||||
m_LightmapEditorSettings:
|
||||
serializedVersion: 10
|
||||
m_Resolution: 2
|
||||
m_BakeResolution: 40
|
||||
m_AtlasSize: 1024
|
||||
m_AO: 0
|
||||
m_AOMaxDistance: 1
|
||||
m_CompAOExponent: 1
|
||||
m_CompAOExponentDirect: 0
|
||||
m_Padding: 2
|
||||
m_LightmapParameters: {fileID: 0}
|
||||
m_LightmapsBakeMode: 1
|
||||
m_TextureCompression: 1
|
||||
m_FinalGather: 0
|
||||
m_FinalGatherFiltering: 1
|
||||
m_FinalGatherRayCount: 256
|
||||
m_ReflectionCompression: 2
|
||||
m_MixedBakeMode: 2
|
||||
m_BakeBackend: 1
|
||||
m_PVRSampling: 1
|
||||
m_PVRDirectSampleCount: 32
|
||||
m_PVRSampleCount: 512
|
||||
m_PVRBounces: 2
|
||||
m_PVRFilterTypeDirect: 0
|
||||
m_PVRFilterTypeIndirect: 0
|
||||
m_PVRFilterTypeAO: 0
|
||||
m_PVRFilteringMode: 1
|
||||
m_PVRCulling: 1
|
||||
m_PVRFilteringGaussRadiusDirect: 1
|
||||
m_PVRFilteringGaussRadiusIndirect: 5
|
||||
m_PVRFilteringGaussRadiusAO: 2
|
||||
m_PVRFilteringAtrousPositionSigmaDirect: 0.5
|
||||
m_PVRFilteringAtrousPositionSigmaIndirect: 2
|
||||
m_PVRFilteringAtrousPositionSigmaAO: 1
|
||||
m_ShowResolutionOverlay: 1
|
||||
m_LightingDataAsset: {fileID: 0}
|
||||
m_UseShadowmask: 1
|
||||
--- !u!196 &4
|
||||
NavMeshSettings:
|
||||
serializedVersion: 2
|
||||
m_ObjectHideFlags: 0
|
||||
m_BuildSettings:
|
||||
serializedVersion: 2
|
||||
agentTypeID: 0
|
||||
agentRadius: 0.5
|
||||
agentHeight: 2
|
||||
agentSlope: 45
|
||||
agentClimb: 0.4
|
||||
ledgeDropHeight: 0
|
||||
maxJumpAcrossDistance: 0
|
||||
minRegionArea: 2
|
||||
manualCellSize: 0
|
||||
cellSize: 0.16666667
|
||||
manualTileSize: 0
|
||||
tileSize: 256
|
||||
accuratePlacement: 0
|
||||
debug:
|
||||
m_Flags: 0
|
||||
m_NavMeshData: {fileID: 0}
|
||||
--- !u!1 &144620207
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 144620210}
|
||||
- component: {fileID: 144620209}
|
||||
- component: {fileID: 144620208}
|
||||
- component: {fileID: 144620211}
|
||||
m_Layer: 0
|
||||
m_Name: Main Camera
|
||||
m_TagString: MainCamera
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!81 &144620208
|
||||
AudioListener:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 144620207}
|
||||
m_Enabled: 1
|
||||
--- !u!20 &144620209
|
||||
Camera:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 144620207}
|
||||
m_Enabled: 1
|
||||
serializedVersion: 2
|
||||
m_ClearFlags: 2
|
||||
m_BackGroundColor: {r: 0.9487362, g: 0.9613346, b: 0.9811321, a: 0}
|
||||
m_projectionMatrixMode: 1
|
||||
m_SensorSize: {x: 36, y: 24}
|
||||
m_LensShift: {x: 0, y: 0}
|
||||
m_GateFitMode: 2
|
||||
m_FocalLength: 50
|
||||
m_NormalizedViewPortRect:
|
||||
serializedVersion: 2
|
||||
x: 0
|
||||
y: 0
|
||||
width: 1
|
||||
height: 1
|
||||
near clip plane: 0.3
|
||||
far clip plane: 1000
|
||||
field of view: 60
|
||||
orthographic: 0
|
||||
orthographic size: 5
|
||||
m_Depth: -1
|
||||
m_CullingMask:
|
||||
serializedVersion: 2
|
||||
m_Bits: 4294967295
|
||||
m_RenderingPath: -1
|
||||
m_TargetTexture: {fileID: 0}
|
||||
m_TargetDisplay: 0
|
||||
m_TargetEye: 3
|
||||
m_HDR: 1
|
||||
m_AllowMSAA: 1
|
||||
m_AllowDynamicResolution: 0
|
||||
m_ForceIntoRT: 0
|
||||
m_OcclusionCulling: 1
|
||||
m_StereoConvergence: 10
|
||||
m_StereoSeparation: 0.022
|
||||
--- !u!4 &144620210
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 144620207}
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 1, z: -10}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_Children:
|
||||
- {fileID: 1974370200}
|
||||
m_Father: {fileID: 0}
|
||||
m_RootOrder: 0
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!114 &144620211
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 144620207}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 191f5798a75bd42589f98898505e981f, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
--- !u!1 &484534187
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 484534191}
|
||||
- component: {fileID: 484534190}
|
||||
- component: {fileID: 484534189}
|
||||
- component: {fileID: 484534188}
|
||||
m_Layer: 5
|
||||
m_Name: Canvas
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!114 &484534188
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 484534187}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
--- !u!114 &484534189
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 484534187}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
--- !u!223 &484534190
|
||||
Canvas:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 484534187}
|
||||
m_Enabled: 1
|
||||
serializedVersion: 3
|
||||
m_RenderMode: 0
|
||||
m_Camera: {fileID: 0}
|
||||
m_PlaneDistance: 100
|
||||
m_PixelPerfect: 0
|
||||
m_ReceivesEvents: 1
|
||||
m_OverrideSorting: 0
|
||||
m_OverridePixelPerfect: 0
|
||||
m_SortingBucketNormalizedSize: 0
|
||||
m_AdditionalShaderChannelsFlag: 0
|
||||
m_SortingLayerID: 0
|
||||
m_SortingOrder: 0
|
||||
m_TargetDisplay: 0
|
||||
--- !u!224 &484534191
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 484534187}
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 0, y: 0, z: 0}
|
||||
m_Children: []
|
||||
m_Father: {fileID: 0}
|
||||
m_RootOrder: 2
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 0, y: 0}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 0, y: 0}
|
||||
m_Pivot: {x: 0, y: 0}
|
||||
--- !u!1 &498045477
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 498045479}
|
||||
- component: {fileID: 498045478}
|
||||
m_Layer: 0
|
||||
m_Name: Directional Light
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!108 &498045478
|
||||
Light:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 498045477}
|
||||
m_Enabled: 1
|
||||
serializedVersion: 8
|
||||
m_Type: 1
|
||||
m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1}
|
||||
m_Intensity: 1
|
||||
m_Range: 10
|
||||
m_SpotAngle: 30
|
||||
m_CookieSize: 10
|
||||
m_Shadows:
|
||||
m_Type: 2
|
||||
m_Resolution: -1
|
||||
m_CustomResolution: -1
|
||||
m_Strength: 1
|
||||
m_Bias: 0.05
|
||||
m_NormalBias: 0.4
|
||||
m_NearPlane: 0.2
|
||||
m_Cookie: {fileID: 0}
|
||||
m_DrawHalo: 0
|
||||
m_Flare: {fileID: 0}
|
||||
m_RenderMode: 0
|
||||
m_CullingMask:
|
||||
serializedVersion: 2
|
||||
m_Bits: 4294967295
|
||||
m_Lightmapping: 4
|
||||
m_LightShadowCasterMode: 0
|
||||
m_AreaSize: {x: 1, y: 1}
|
||||
m_BounceIntensity: 1
|
||||
m_ColorTemperature: 6570
|
||||
m_UseColorTemperature: 0
|
||||
m_ShadowRadius: 0
|
||||
m_ShadowAngle: 0
|
||||
--- !u!4 &498045479
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 498045477}
|
||||
m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261}
|
||||
m_LocalPosition: {x: 0, y: 3, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_Children: []
|
||||
m_Father: {fileID: 0}
|
||||
m_RootOrder: 1
|
||||
m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0}
|
||||
--- !u!1 &910476656
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 910476659}
|
||||
- component: {fileID: 910476658}
|
||||
- component: {fileID: 910476657}
|
||||
m_Layer: 0
|
||||
m_Name: EventSystem
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!114 &910476657
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 910476656}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 4f231c4fb786f3946a6b90b886c48677, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
--- !u!114 &910476658
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 910476656}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
--- !u!4 &910476659
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 910476656}
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_Children: []
|
||||
m_Father: {fileID: 0}
|
||||
m_RootOrder: 3
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!1 &1488306033
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 1488306034}
|
||||
- component: {fileID: 1488306036}
|
||||
- component: {fileID: 1488306035}
|
||||
m_Layer: 5
|
||||
m_Name: RawImage
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &1488306034
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1488306033}
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_Children: []
|
||||
m_Father: {fileID: 1974370200}
|
||||
m_RootOrder: 0
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0.5, y: 1}
|
||||
m_AnchorMax: {x: 0.5, y: 1}
|
||||
m_AnchoredPosition: {x: 0, y: -117}
|
||||
m_SizeDelta: {x: 500, y: 100}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!114 &1488306035
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1488306033}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: -98529514, guid: f70555f144d8491a825f0804e09c671c, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_Material: {fileID: 0}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_RaycastTarget: 1
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_Texture: {fileID: 2800000, guid: 5e326581693fd4e0db4c590543c3edc4, type: 3}
|
||||
m_UVRect:
|
||||
serializedVersion: 2
|
||||
x: 0
|
||||
y: 0
|
||||
width: 1
|
||||
height: 1
|
||||
--- !u!222 &1488306036
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1488306033}
|
||||
m_CullTransparentMesh: 0
|
||||
--- !u!1 &1974370199
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 1974370200}
|
||||
- component: {fileID: 1974370203}
|
||||
m_Layer: 5
|
||||
m_Name: Canvas
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &1974370200
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1974370199}
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 0, y: 0, z: 0}
|
||||
m_Children:
|
||||
- {fileID: 1488306034}
|
||||
m_Father: {fileID: 144620210}
|
||||
m_RootOrder: 0
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 0, y: 0}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 0, y: 0}
|
||||
m_Pivot: {x: 0, y: 0}
|
||||
--- !u!223 &1974370203
|
||||
Canvas:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1974370199}
|
||||
m_Enabled: 1
|
||||
serializedVersion: 3
|
||||
m_RenderMode: 0
|
||||
m_Camera: {fileID: 0}
|
||||
m_PlaneDistance: 100
|
||||
m_PixelPerfect: 0
|
||||
m_ReceivesEvents: 1
|
||||
m_OverrideSorting: 0
|
||||
m_OverridePixelPerfect: 0
|
||||
m_SortingBucketNormalizedSize: 0
|
||||
m_AdditionalShaderChannelsFlag: 0
|
||||
m_SortingLayerID: 0
|
||||
m_SortingOrder: 0
|
||||
m_TargetDisplay: 0
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
fileFormatVersion: 2
|
||||
guid: ccc0ac08126704384bdda74c26d99797
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
|
@ -0,0 +1,427 @@
|
|||
using UnityEngine;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System;
|
||||
|
||||
|
||||
// Example for IronSource Unity.
|
||||
public class IronSourceDemoScript : MonoBehaviour
|
||||
{
|
||||
|
||||
|
||||
|
||||
public void Start()
|
||||
{
|
||||
|
||||
#if UNITY_ANDROID
|
||||
string appKey = "85460dcd";
|
||||
#elif UNITY_IPHONE
|
||||
string appKey = "8545d445";
|
||||
#else
|
||||
string appKey = "unexpected_platform";
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
Debug.Log("unity-script: IronSource.Agent.validateIntegration");
|
||||
IronSource.Agent.validateIntegration();
|
||||
|
||||
Debug.Log("unity-script: unity version" + IronSource.unityVersion());
|
||||
|
||||
// SDK init
|
||||
Debug.Log("unity-script: IronSource.Agent.init");
|
||||
IronSource.Agent.init(appKey);
|
||||
|
||||
}
|
||||
|
||||
void OnEnable()
|
||||
{
|
||||
|
||||
//Add Rewarded Video Events
|
||||
IronSourceEvents.onRewardedVideoAdOpenedEvent += RewardedVideoAdOpenedEvent;
|
||||
IronSourceEvents.onRewardedVideoAdClosedEvent += RewardedVideoAdClosedEvent;
|
||||
IronSourceEvents.onRewardedVideoAvailabilityChangedEvent += RewardedVideoAvailabilityChangedEvent;
|
||||
IronSourceEvents.onRewardedVideoAdStartedEvent += RewardedVideoAdStartedEvent;
|
||||
IronSourceEvents.onRewardedVideoAdEndedEvent += RewardedVideoAdEndedEvent;
|
||||
IronSourceEvents.onRewardedVideoAdRewardedEvent += RewardedVideoAdRewardedEvent;
|
||||
IronSourceEvents.onRewardedVideoAdShowFailedEvent += RewardedVideoAdShowFailedEvent;
|
||||
IronSourceEvents.onRewardedVideoAdClickedEvent += RewardedVideoAdClickedEvent;
|
||||
|
||||
//Add Rewarded Video DemandOnly Events
|
||||
IronSourceEvents.onRewardedVideoAdOpenedDemandOnlyEvent += RewardedVideoAdOpenedDemandOnlyEvent;
|
||||
IronSourceEvents.onRewardedVideoAdClosedDemandOnlyEvent += RewardedVideoAdClosedDemandOnlyEvent;
|
||||
IronSourceEvents.onRewardedVideoAdLoadedDemandOnlyEvent += RewardedVideoAdLoadedDemandOnlyEvent;
|
||||
IronSourceEvents.onRewardedVideoAdRewardedDemandOnlyEvent += RewardedVideoAdRewardedDemandOnlyEvent;
|
||||
IronSourceEvents.onRewardedVideoAdShowFailedDemandOnlyEvent += RewardedVideoAdShowFailedDemandOnlyEvent;
|
||||
IronSourceEvents.onRewardedVideoAdClickedDemandOnlyEvent += RewardedVideoAdClickedDemandOnlyEvent;
|
||||
IronSourceEvents.onRewardedVideoAdLoadFailedDemandOnlyEvent += RewardedVideoAdLoadFailedDemandOnlyEvent;
|
||||
|
||||
|
||||
// Add Offerwall Events
|
||||
IronSourceEvents.onOfferwallClosedEvent += OfferwallClosedEvent;
|
||||
IronSourceEvents.onOfferwallOpenedEvent += OfferwallOpenedEvent;
|
||||
IronSourceEvents.onOfferwallShowFailedEvent += OfferwallShowFailedEvent;
|
||||
IronSourceEvents.onOfferwallAdCreditedEvent += OfferwallAdCreditedEvent;
|
||||
IronSourceEvents.onGetOfferwallCreditsFailedEvent += GetOfferwallCreditsFailedEvent;
|
||||
IronSourceEvents.onOfferwallAvailableEvent += OfferwallAvailableEvent;
|
||||
|
||||
|
||||
// Add Interstitial Events
|
||||
IronSourceEvents.onInterstitialAdReadyEvent += InterstitialAdReadyEvent;
|
||||
IronSourceEvents.onInterstitialAdLoadFailedEvent += InterstitialAdLoadFailedEvent;
|
||||
IronSourceEvents.onInterstitialAdShowSucceededEvent += InterstitialAdShowSucceededEvent;
|
||||
IronSourceEvents.onInterstitialAdShowFailedEvent += InterstitialAdShowFailedEvent;
|
||||
IronSourceEvents.onInterstitialAdClickedEvent += InterstitialAdClickedEvent;
|
||||
IronSourceEvents.onInterstitialAdOpenedEvent += InterstitialAdOpenedEvent;
|
||||
IronSourceEvents.onInterstitialAdClosedEvent += InterstitialAdClosedEvent;
|
||||
|
||||
// Add Interstitial DemandOnly Events
|
||||
IronSourceEvents.onInterstitialAdReadyDemandOnlyEvent += InterstitialAdReadyDemandOnlyEvent;
|
||||
IronSourceEvents.onInterstitialAdLoadFailedDemandOnlyEvent += InterstitialAdLoadFailedDemandOnlyEvent;
|
||||
IronSourceEvents.onInterstitialAdShowFailedDemandOnlyEvent += InterstitialAdShowFailedDemandOnlyEvent;
|
||||
IronSourceEvents.onInterstitialAdClickedDemandOnlyEvent += InterstitialAdClickedDemandOnlyEvent;
|
||||
IronSourceEvents.onInterstitialAdOpenedDemandOnlyEvent += InterstitialAdOpenedDemandOnlyEvent;
|
||||
IronSourceEvents.onInterstitialAdClosedDemandOnlyEvent += InterstitialAdClosedDemandOnlyEvent;
|
||||
|
||||
|
||||
// Add Banner Events
|
||||
IronSourceEvents.onBannerAdLoadedEvent += BannerAdLoadedEvent;
|
||||
IronSourceEvents.onBannerAdLoadFailedEvent += BannerAdLoadFailedEvent;
|
||||
IronSourceEvents.onBannerAdClickedEvent += BannerAdClickedEvent;
|
||||
IronSourceEvents.onBannerAdScreenPresentedEvent += BannerAdScreenPresentedEvent;
|
||||
IronSourceEvents.onBannerAdScreenDismissedEvent += BannerAdScreenDismissedEvent;
|
||||
IronSourceEvents.onBannerAdLeftApplicationEvent += BannerAdLeftApplicationEvent;
|
||||
|
||||
//Add ImpressionSuccess Event
|
||||
IronSourceEvents.onImpressionSuccessEvent += ImpressionSuccessEvent;
|
||||
}
|
||||
|
||||
void OnApplicationPause(bool isPaused)
|
||||
{
|
||||
Debug.Log("unity-script: OnApplicationPause = " + isPaused);
|
||||
IronSource.Agent.onApplicationPause(isPaused);
|
||||
}
|
||||
|
||||
public void OnGUI()
|
||||
{
|
||||
|
||||
GUI.backgroundColor = Color.blue;
|
||||
GUI.skin.button.fontSize = (int)(0.035f * Screen.width);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Rect showRewardedVideoButton = new Rect(0.10f * Screen.width, 0.15f * Screen.height, 0.80f * Screen.width, 0.08f * Screen.height);
|
||||
if (GUI.Button(showRewardedVideoButton, "Show Rewarded Video"))
|
||||
{
|
||||
Debug.Log("unity-script: ShowRewardedVideoButtonClicked");
|
||||
if (IronSource.Agent.isRewardedVideoAvailable())
|
||||
{
|
||||
IronSource.Agent.showRewardedVideo();
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.Log("unity-script: IronSource.Agent.isRewardedVideoAvailable - False");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
Rect showOfferwallButton = new Rect(0.10f * Screen.width, 0.25f * Screen.height, 0.80f * Screen.width, 0.08f * Screen.height);
|
||||
if (GUI.Button(showOfferwallButton, "Show Offerwall"))
|
||||
{
|
||||
if (IronSource.Agent.isOfferwallAvailable())
|
||||
{
|
||||
IronSource.Agent.showOfferwall();
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.Log("IronSource.Agent.isOfferwallAvailable - False");
|
||||
}
|
||||
}
|
||||
|
||||
Rect loadInterstitialButton = new Rect(0.10f * Screen.width, 0.35f * Screen.height, 0.35f * Screen.width, 0.08f * Screen.height);
|
||||
if (GUI.Button(loadInterstitialButton, "Load Interstitial"))
|
||||
{
|
||||
Debug.Log("unity-script: LoadInterstitialButtonClicked");
|
||||
IronSource.Agent.loadInterstitial();
|
||||
}
|
||||
|
||||
Rect showInterstitialButton = new Rect(0.55f * Screen.width, 0.35f * Screen.height, 0.35f * Screen.width, 0.08f * Screen.height);
|
||||
if (GUI.Button(showInterstitialButton, "Show Interstitial"))
|
||||
{
|
||||
Debug.Log("unity-script: ShowInterstitialButtonClicked");
|
||||
if (IronSource.Agent.isInterstitialReady())
|
||||
{
|
||||
IronSource.Agent.showInterstitial();
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.Log("unity-script: IronSource.Agent.isInterstitialReady - False");
|
||||
}
|
||||
}
|
||||
|
||||
Rect loadBannerButton = new Rect(0.10f * Screen.width, 0.45f * Screen.height, 0.35f * Screen.width, 0.08f * Screen.height);
|
||||
if (GUI.Button(loadBannerButton, "Load Banner"))
|
||||
{
|
||||
Debug.Log("unity-script: loadBannerButtonClicked");
|
||||
IronSource.Agent.loadBanner(IronSourceBannerSize.BANNER, IronSourceBannerPosition.BOTTOM);
|
||||
}
|
||||
|
||||
Rect destroyBannerButton = new Rect(0.55f * Screen.width, 0.45f * Screen.height, 0.35f * Screen.width, 0.08f * Screen.height);
|
||||
if (GUI.Button(destroyBannerButton, "Destroy Banner"))
|
||||
{
|
||||
Debug.Log("unity-script: loadBannerButtonClicked");
|
||||
IronSource.Agent.destroyBanner();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
#region RewardedAd callback handlers
|
||||
|
||||
void RewardedVideoAvailabilityChangedEvent(bool canShowAd)
|
||||
{
|
||||
Debug.Log("unity-script: I got RewardedVideoAvailabilityChangedEvent, value = " + canShowAd);
|
||||
}
|
||||
|
||||
void RewardedVideoAdOpenedEvent()
|
||||
{
|
||||
Debug.Log("unity-script: I got RewardedVideoAdOpenedEvent");
|
||||
}
|
||||
|
||||
void RewardedVideoAdRewardedEvent(IronSourcePlacement ssp)
|
||||
{
|
||||
Debug.Log("unity-script: I got RewardedVideoAdRewardedEvent, amount = " + ssp.getRewardAmount() + " name = " + ssp.getRewardName());
|
||||
|
||||
}
|
||||
|
||||
void RewardedVideoAdClosedEvent()
|
||||
{
|
||||
Debug.Log("unity-script: I got RewardedVideoAdClosedEvent");
|
||||
}
|
||||
|
||||
void RewardedVideoAdStartedEvent()
|
||||
{
|
||||
Debug.Log("unity-script: I got RewardedVideoAdStartedEvent");
|
||||
}
|
||||
|
||||
void RewardedVideoAdEndedEvent()
|
||||
{
|
||||
Debug.Log("unity-script: I got RewardedVideoAdEndedEvent");
|
||||
}
|
||||
|
||||
void RewardedVideoAdShowFailedEvent(IronSourceError error)
|
||||
{
|
||||
Debug.Log("unity-script: I got RewardedVideoAdShowFailedEvent, code : " + error.getCode() + ", description : " + error.getDescription());
|
||||
}
|
||||
|
||||
void RewardedVideoAdClickedEvent(IronSourcePlacement ssp)
|
||||
{
|
||||
Debug.Log("unity-script: I got RewardedVideoAdClickedEvent, name = " + ssp.getRewardName());
|
||||
}
|
||||
|
||||
/************* RewardedVideo DemandOnly Delegates *************/
|
||||
|
||||
void RewardedVideoAdLoadedDemandOnlyEvent(string instanceId)
|
||||
{
|
||||
|
||||
Debug.Log("unity-script: I got RewardedVideoAdLoadedDemandOnlyEvent for instance: " + instanceId);
|
||||
}
|
||||
|
||||
void RewardedVideoAdLoadFailedDemandOnlyEvent(string instanceId, IronSourceError error)
|
||||
{
|
||||
|
||||
Debug.Log("unity-script: I got RewardedVideoAdLoadFailedDemandOnlyEvent for instance: " + instanceId + ", code : " + error.getCode() + ", description : " + error.getDescription());
|
||||
}
|
||||
|
||||
void RewardedVideoAdOpenedDemandOnlyEvent(string instanceId)
|
||||
{
|
||||
Debug.Log("unity-script: I got RewardedVideoAdOpenedDemandOnlyEvent for instance: " + instanceId);
|
||||
}
|
||||
|
||||
void RewardedVideoAdRewardedDemandOnlyEvent(string instanceId)
|
||||
{
|
||||
Debug.Log("unity-script: I got RewardedVideoAdRewardedDemandOnlyEvent for instance: " + instanceId);
|
||||
}
|
||||
|
||||
void RewardedVideoAdClosedDemandOnlyEvent(string instanceId)
|
||||
{
|
||||
Debug.Log("unity-script: I got RewardedVideoAdClosedDemandOnlyEvent for instance: " + instanceId);
|
||||
}
|
||||
|
||||
void RewardedVideoAdShowFailedDemandOnlyEvent(string instanceId, IronSourceError error)
|
||||
{
|
||||
Debug.Log("unity-script: I got RewardedVideoAdShowFailedDemandOnlyEvent for instance: " + instanceId + ", code : " + error.getCode() + ", description : " + error.getDescription());
|
||||
}
|
||||
|
||||
void RewardedVideoAdClickedDemandOnlyEvent(string instanceId)
|
||||
{
|
||||
Debug.Log("unity-script: I got RewardedVideoAdClickedDemandOnlyEvent for instance: " + instanceId);
|
||||
}
|
||||
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
|
||||
#region Interstitial callback handlers
|
||||
|
||||
void InterstitialAdReadyEvent()
|
||||
{
|
||||
Debug.Log("unity-script: I got InterstitialAdReadyEvent");
|
||||
}
|
||||
|
||||
void InterstitialAdLoadFailedEvent(IronSourceError error)
|
||||
{
|
||||
Debug.Log("unity-script: I got InterstitialAdLoadFailedEvent, code: " + error.getCode() + ", description : " + error.getDescription());
|
||||
}
|
||||
|
||||
void InterstitialAdShowSucceededEvent()
|
||||
{
|
||||
Debug.Log("unity-script: I got InterstitialAdShowSucceededEvent");
|
||||
}
|
||||
|
||||
void InterstitialAdShowFailedEvent(IronSourceError error)
|
||||
{
|
||||
Debug.Log("unity-script: I got InterstitialAdShowFailedEvent, code : " + error.getCode() + ", description : " + error.getDescription());
|
||||
}
|
||||
|
||||
void InterstitialAdClickedEvent()
|
||||
{
|
||||
Debug.Log("unity-script: I got InterstitialAdClickedEvent");
|
||||
}
|
||||
|
||||
void InterstitialAdOpenedEvent()
|
||||
{
|
||||
Debug.Log("unity-script: I got InterstitialAdOpenedEvent");
|
||||
}
|
||||
|
||||
void InterstitialAdClosedEvent()
|
||||
{
|
||||
Debug.Log("unity-script: I got InterstitialAdClosedEvent");
|
||||
}
|
||||
|
||||
/************* Interstitial DemandOnly Delegates *************/
|
||||
|
||||
void InterstitialAdReadyDemandOnlyEvent(string instanceId)
|
||||
{
|
||||
Debug.Log("unity-script: I got InterstitialAdReadyDemandOnlyEvent for instance: " + instanceId);
|
||||
}
|
||||
|
||||
void InterstitialAdLoadFailedDemandOnlyEvent(string instanceId, IronSourceError error)
|
||||
{
|
||||
Debug.Log("unity-script: I got InterstitialAdLoadFailedDemandOnlyEvent for instance: " + instanceId + ", error code: " + error.getCode() + ",error description : " + error.getDescription());
|
||||
}
|
||||
|
||||
void InterstitialAdShowFailedDemandOnlyEvent(string instanceId, IronSourceError error)
|
||||
{
|
||||
Debug.Log("unity-script: I got InterstitialAdShowFailedDemandOnlyEvent for instance: " + instanceId + ", error code : " + error.getCode() + ",error description : " + error.getDescription());
|
||||
}
|
||||
|
||||
void InterstitialAdClickedDemandOnlyEvent(string instanceId)
|
||||
{
|
||||
Debug.Log("unity-script: I got InterstitialAdClickedDemandOnlyEvent for instance: " + instanceId);
|
||||
}
|
||||
|
||||
void InterstitialAdOpenedDemandOnlyEvent(string instanceId)
|
||||
{
|
||||
Debug.Log("unity-script: I got InterstitialAdOpenedDemandOnlyEvent for instance: " + instanceId);
|
||||
}
|
||||
|
||||
void InterstitialAdClosedDemandOnlyEvent(string instanceId)
|
||||
{
|
||||
Debug.Log("unity-script: I got InterstitialAdClosedDemandOnlyEvent for instance: " + instanceId);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
#endregion
|
||||
|
||||
#region Banner callback handlers
|
||||
|
||||
void BannerAdLoadedEvent()
|
||||
{
|
||||
Debug.Log("unity-script: I got BannerAdLoadedEvent");
|
||||
}
|
||||
|
||||
void BannerAdLoadFailedEvent(IronSourceError error)
|
||||
{
|
||||
Debug.Log("unity-script: I got BannerAdLoadFailedEvent, code: " + error.getCode() + ", description : " + error.getDescription());
|
||||
}
|
||||
|
||||
void BannerAdClickedEvent()
|
||||
{
|
||||
Debug.Log("unity-script: I got BannerAdClickedEvent");
|
||||
}
|
||||
|
||||
void BannerAdScreenPresentedEvent()
|
||||
{
|
||||
Debug.Log("unity-script: I got BannerAdScreenPresentedEvent");
|
||||
}
|
||||
|
||||
void BannerAdScreenDismissedEvent()
|
||||
{
|
||||
Debug.Log("unity-script: I got BannerAdScreenDismissedEvent");
|
||||
}
|
||||
|
||||
void BannerAdLeftApplicationEvent()
|
||||
{
|
||||
Debug.Log("unity-script: I got BannerAdLeftApplicationEvent");
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
#region Offerwall callback handlers
|
||||
|
||||
void OfferwallOpenedEvent()
|
||||
{
|
||||
Debug.Log("I got OfferwallOpenedEvent");
|
||||
}
|
||||
|
||||
void OfferwallClosedEvent()
|
||||
{
|
||||
Debug.Log("I got OfferwallClosedEvent");
|
||||
}
|
||||
|
||||
void OfferwallShowFailedEvent(IronSourceError error)
|
||||
{
|
||||
Debug.Log("I got OfferwallShowFailedEvent, code : " + error.getCode() + ", description : " + error.getDescription());
|
||||
}
|
||||
|
||||
void OfferwallAdCreditedEvent(Dictionary<string, object> dict)
|
||||
{
|
||||
Debug.Log("I got OfferwallAdCreditedEvent, current credits = " + dict["credits"] + " totalCredits = " + dict["totalCredits"]);
|
||||
|
||||
}
|
||||
|
||||
void GetOfferwallCreditsFailedEvent(IronSourceError error)
|
||||
{
|
||||
Debug.Log("I got GetOfferwallCreditsFailedEvent, code : " + error.getCode() + ", description : " + error.getDescription());
|
||||
}
|
||||
|
||||
void OfferwallAvailableEvent(bool canShowOfferwal)
|
||||
{
|
||||
Debug.Log("I got OfferwallAvailableEvent, value = " + canShowOfferwal);
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region ImpressionSuccess callback handler
|
||||
|
||||
void ImpressionSuccessEvent(IronSourceImpressionData impressionData)
|
||||
{
|
||||
Debug.Log("unity - script: I got ImpressionSuccessEvent ToString(): " + impressionData.ToString());
|
||||
Debug.Log("unity - script: I got ImpressionSuccessEvent allData: " + impressionData.allData);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 191f5798a75bd42589f98898505e981f
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 20 KiB |
|
|
@ -0,0 +1,88 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 5e326581693fd4e0db4c590543c3edc4
|
||||
TextureImporter:
|
||||
fileIDToRecycleName: {}
|
||||
externalObjects: {}
|
||||
serializedVersion: 9
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 1
|
||||
sRGBTexture: 1
|
||||
linearTexture: 0
|
||||
fadeOut: 0
|
||||
borderMipMap: 0
|
||||
mipMapsPreserveCoverage: 0
|
||||
alphaTestReferenceValue: 0.5
|
||||
mipMapFadeDistanceStart: 1
|
||||
mipMapFadeDistanceEnd: 3
|
||||
bumpmap:
|
||||
convertToNormalMap: 0
|
||||
externalNormalMap: 0
|
||||
heightScale: 0.25
|
||||
normalMapFilter: 0
|
||||
isReadable: 0
|
||||
streamingMipmaps: 0
|
||||
streamingMipmapsPriority: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
serializedVersion: 2
|
||||
filterMode: -1
|
||||
aniso: -1
|
||||
mipBias: -100
|
||||
wrapU: -1
|
||||
wrapV: -1
|
||||
wrapW: -1
|
||||
nPOTScale: 1
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 0
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
spritePivot: {x: 0.5, y: 0.5}
|
||||
spritePixelsToUnits: 100
|
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||
spriteGenerateFallbackPhysicsShape: 1
|
||||
alphaUsage: 1
|
||||
alphaIsTransparency: 0
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 0
|
||||
textureShape: 1
|
||||
singleChannelComponent: 0
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
platformSettings:
|
||||
- serializedVersion: 2
|
||||
buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites: []
|
||||
outline: []
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID:
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
spritePackingTag:
|
||||
pSDRemoveMatte: 0
|
||||
pSDShowRemoveMatteOption: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: fc06ff225d2634d849a99e2c5f3eca8b
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
using UnityEditor;
|
||||
|
||||
namespace IronSource.Editor
|
||||
{
|
||||
public interface IAdapterSettings
|
||||
{
|
||||
void updateProject(BuildTarget buildTarget, string projectPath);
|
||||
void updateProjectPlist(BuildTarget buildTarget, string plistPath);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 08c4ce248dc9b4ba2a62a14ef020cc17
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
|
@ -0,0 +1,88 @@
|
|||
#if UNITY_IOS
|
||||
|
||||
using UnityEngine;
|
||||
using UnityEditor;
|
||||
using UnityEditor.Callbacks;
|
||||
using UnityEditor.iOS.Xcode;
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Reflection;
|
||||
|
||||
namespace IronSource.Editor
|
||||
{
|
||||
public class IronSourceBuildPostprocessor
|
||||
{
|
||||
[PostProcessBuild]
|
||||
public static void OnPostprocessBuild (BuildTarget buildTarget, string buildPath)
|
||||
{
|
||||
if (buildTarget == BuildTarget.iOS) {
|
||||
string projectPath = buildPath + "/Unity-iPhone.xcodeproj/project.pbxproj";
|
||||
string dirpath = Application.dataPath + "/IronSource/Editor/";
|
||||
string currentNamespace = MethodBase.GetCurrentMethod().DeclaringType.Namespace;
|
||||
|
||||
updateProject (buildTarget, projectPath);
|
||||
|
||||
if (Directory.Exists (dirpath)) {
|
||||
//Match the classes that has "Settings" in their name, and don't start with "I"
|
||||
var files = Directory.GetFiles (dirpath, "*.cs", SearchOption.TopDirectoryOnly).Where (file => Regex.IsMatch (Path.GetFileName (file), "^(?!(IAdapter|IronSource)).+Settings.*$"));
|
||||
|
||||
//Go over all the adapter settings classes, and call their updateProject method
|
||||
foreach (string file in files) {
|
||||
string classname = Path.GetFileNameWithoutExtension (file);
|
||||
|
||||
if (!String.IsNullOrEmpty (classname)) {
|
||||
IAdapterSettings adapter = (IAdapterSettings)Activator.CreateInstance (Type.GetType (currentNamespace + "." + classname));
|
||||
adapter.updateProject (buildTarget, projectPath);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Debug.Log ("IronSource build postprocessor finished");
|
||||
}
|
||||
|
||||
private static void updateProject (BuildTarget buildTarget, string projectPath)
|
||||
{
|
||||
Debug.Log ("IronSource - Update project for IronSource");
|
||||
|
||||
PBXProject project = new PBXProject ();
|
||||
project.ReadFromString (File.ReadAllText (projectPath));
|
||||
|
||||
string targetId;
|
||||
#if UNITY_2019_3_OR_NEWER
|
||||
targetId = project.GetUnityMainTargetGuid();
|
||||
#else
|
||||
targetId = project.TargetGuidByName(PBXProject.GetUnityTargetName());
|
||||
#endif
|
||||
|
||||
// Required System Frameworks
|
||||
project.AddFrameworkToProject (targetId, "AdSupport.framework", false);
|
||||
project.AddFrameworkToProject (targetId, "AudioToolbox.framework", false);
|
||||
project.AddFrameworkToProject (targetId, "AVFoundation.framework", false);
|
||||
project.AddFrameworkToProject (targetId, "CoreGraphics.framework", false);
|
||||
project.AddFrameworkToProject (targetId, "CoreMedia.framework", false);
|
||||
project.AddFrameworkToProject (targetId, "CoreTelephony.framework", false);
|
||||
project.AddFrameworkToProject (targetId, "CoreVideo.framework", false);
|
||||
project.AddFrameworkToProject (targetId, "CFNetwork.framework", false);
|
||||
project.AddFrameworkToProject (targetId, "Foundation.framework", false);
|
||||
project.AddFrameworkToProject (targetId, "MobileCoreServices.framework", false);
|
||||
project.AddFrameworkToProject (targetId, "QuartzCore.framework", false);
|
||||
project.AddFrameworkToProject (targetId, "Security.framework", false);
|
||||
project.AddFrameworkToProject (targetId, "StoreKit.framework", false);
|
||||
project.AddFrameworkToProject (targetId, "SystemConfiguration.framework", false);
|
||||
project.AddFrameworkToProject (targetId, "WebKit.framework", false);
|
||||
|
||||
|
||||
project.AddFileToBuild (targetId, project.AddFile ("usr/lib/libz.tbd", "Frameworks/libz.tbd", PBXSourceTree.Sdk));
|
||||
|
||||
// Custom Link Flag
|
||||
project.AddBuildProperty (targetId, "OTHER_LDFLAGS", "-ObjC");
|
||||
|
||||
File.WriteAllText (projectPath, project.WriteToString ());
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 160c30613c17c4bc1a9dfcc2b2663ff4
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
|
@ -0,0 +1,558 @@
|
|||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Xml;
|
||||
using IronSourceJSON;
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
using UnityEngine.Networking;
|
||||
|
||||
public class IronSourceDependenciesManager : EditorWindow
|
||||
{
|
||||
private const string jsonURL = "http://ssa.public.s3.amazonaws.com/Ironsource-Integration-Manager/IronSourceSDKInfo.json";
|
||||
private const string ironSourceDownloadDir = "Assets/IronSource/Editor/";
|
||||
private const string sdk = "sdk";
|
||||
private const string errorMessage = "SDK and adapters data are not available right now. Try again soon.";
|
||||
private const int Width = 760;
|
||||
private const int Height = 760;
|
||||
private const string Android = "Android";
|
||||
private const string iOS = "iOS";
|
||||
private readonly SortedSet<providerInfo> providersSet = new SortedSet<providerInfo>(new ProviderInfoComparor());
|
||||
private providerInfo ironSourceProviderInfo;
|
||||
private UnityWebRequest downloadWebClient;
|
||||
private string messageData;
|
||||
private IronSourceEditorCoroutines mEditorCoroutines;
|
||||
|
||||
private GUIStyle headerStyle;
|
||||
private GUIStyle textStyle;
|
||||
private GUIStyle boldTextStyle;
|
||||
private readonly GUILayoutOption buttonWidth = GUILayout.Width(90);
|
||||
|
||||
public class providerInfo
|
||||
{
|
||||
public Status currentStatues;
|
||||
public string providerName;
|
||||
public string currentUnityVersion;
|
||||
public string latestUnityVersion;
|
||||
public string downloadURL;
|
||||
public string displayProviderName;
|
||||
public bool isNewProvider;
|
||||
public string fileName;
|
||||
public Dictionary<string, string> sdkVersionDic;
|
||||
|
||||
public providerInfo()
|
||||
{
|
||||
isNewProvider = false;
|
||||
fileName = string.Empty;
|
||||
downloadURL = string.Empty;
|
||||
currentUnityVersion = "none";
|
||||
sdkVersionDic = new Dictionary<string, string>();
|
||||
}
|
||||
|
||||
public enum Status
|
||||
{
|
||||
installed = 1,
|
||||
none = 2,
|
||||
updated = 3
|
||||
}
|
||||
|
||||
public bool GetFromJson(string name, Dictionary<string, object> dic)
|
||||
{
|
||||
providerName = name;
|
||||
object obj;
|
||||
|
||||
dic.TryGetValue("keyname", out obj);
|
||||
if (obj != null)
|
||||
{
|
||||
this.displayProviderName = obj as string;
|
||||
}
|
||||
else this.displayProviderName = providerName;
|
||||
|
||||
dic.TryGetValue("isNewProvider", out obj);
|
||||
if (obj != null)
|
||||
{
|
||||
this.isNewProvider = bool.Parse(obj as string);
|
||||
}
|
||||
|
||||
//Get Unity versions
|
||||
if (dic.TryGetValue("Unity", out obj))
|
||||
{
|
||||
Dictionary<string, object> remoteVersions = obj as Dictionary<string, object>;
|
||||
if (remoteVersions != null)
|
||||
{
|
||||
if (remoteVersions.TryGetValue("DownloadUrl", out obj))
|
||||
{
|
||||
this.downloadURL = obj as string;
|
||||
}
|
||||
if (remoteVersions.TryGetValue("FileName", out obj))
|
||||
{
|
||||
this.fileName = obj as string;
|
||||
}
|
||||
if (remoteVersions.TryGetValue("UnityAdapterVersion", out obj))
|
||||
{
|
||||
this.latestUnityVersion = obj as string;
|
||||
}
|
||||
}
|
||||
}
|
||||
////Get Android version
|
||||
if (dic.TryGetValue(Android, out obj))
|
||||
{
|
||||
Dictionary<string, object> androidVersion = obj as Dictionary<string, object>;
|
||||
if (androidVersion != null)
|
||||
{
|
||||
androidVersion.TryGetValue("version", out obj);
|
||||
androidVersion = obj as Dictionary<string, object>;
|
||||
if (androidVersion != null)
|
||||
{
|
||||
if (androidVersion.TryGetValue(sdk, out obj))
|
||||
{
|
||||
this.sdkVersionDic.Add(Android, obj as string);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//Get iOS version
|
||||
dic.TryGetValue(iOS, out obj);
|
||||
Dictionary<string, object> iosVersion = obj as Dictionary<string, object>;
|
||||
if (iosVersion != null)
|
||||
{
|
||||
iosVersion.TryGetValue("version", out obj);
|
||||
iosVersion = obj as Dictionary<string, object>;
|
||||
if (iosVersion != null)
|
||||
{
|
||||
if (iosVersion.TryGetValue(sdk, out obj))
|
||||
{
|
||||
this.sdkVersionDic.Add(iOS, obj as string);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
currentUnityVersion = GetVersionFromXML(fileName);
|
||||
|
||||
if (currentUnityVersion.Equals("none"))
|
||||
{
|
||||
currentStatues = Status.none;
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
if (isNewerVersion(currentUnityVersion, latestUnityVersion))
|
||||
{
|
||||
currentStatues = Status.installed;
|
||||
}
|
||||
else
|
||||
{
|
||||
currentStatues = Status.updated;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
private static string GetVersionFromXML(string fileName)
|
||||
{
|
||||
XmlDocument xmlDoc = new XmlDocument();
|
||||
string version = "none";
|
||||
try
|
||||
{
|
||||
xmlDoc.LoadXml(File.ReadAllText(ironSourceDownloadDir + fileName));
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
return version;
|
||||
}
|
||||
var unityVersion = xmlDoc.SelectSingleNode("dependencies/unityversion");
|
||||
if (unityVersion != null)
|
||||
{
|
||||
return (unityVersion.InnerText);
|
||||
}
|
||||
File.Delete(ironSourceDownloadDir + fileName);
|
||||
return version;
|
||||
}
|
||||
|
||||
private IEnumerator GetVersions()
|
||||
{
|
||||
UnityWebRequest unityWebRequest = UnityWebRequest.Get(jsonURL);
|
||||
var webRequest = unityWebRequest.SendWebRequest();
|
||||
|
||||
while (!webRequest.isDone)
|
||||
{
|
||||
yield return new WaitForSeconds(0.1f);
|
||||
}
|
||||
if (!unityWebRequest.isHttpError && !unityWebRequest.isNetworkError)
|
||||
{
|
||||
string json = unityWebRequest.downloadHandler.text;
|
||||
providersSet.Clear();
|
||||
ironSourceProviderInfo = new providerInfo();
|
||||
Dictionary<string, object> dic = new Dictionary<string, object>();
|
||||
try
|
||||
{
|
||||
dic = Json.Deserialize(json) as Dictionary<string, object>;
|
||||
}
|
||||
|
||||
catch (Exception e)
|
||||
{
|
||||
Debug.Log("Error getting response " + e.ToString());
|
||||
}
|
||||
if (dic != null && dic.Count != 0)
|
||||
{
|
||||
object providersJson;
|
||||
if (dic.TryGetValue("SDKSInfo", out providersJson))
|
||||
{
|
||||
if (providersJson != null)
|
||||
{
|
||||
foreach (var item in providersJson as Dictionary<string, object>)
|
||||
{
|
||||
providerInfo info = new providerInfo();
|
||||
if (info.GetFromJson(item.Key, item.Value as Dictionary<string, object>))
|
||||
{
|
||||
if (item.Key.ToLower().Contains("ironsource"))
|
||||
{
|
||||
ironSourceProviderInfo = info;
|
||||
}
|
||||
else
|
||||
{
|
||||
providersSet.Add(info);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (ironSourceProviderInfo.currentStatues == providerInfo.Status.installed || ironSourceProviderInfo.currentStatues == providerInfo.Status.none)
|
||||
{
|
||||
if (dic.TryGetValue("UpdateMessage", out providersJson))
|
||||
{
|
||||
messageData = providersJson.ToString();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (dic.TryGetValue("LatestMessage", out providersJson))
|
||||
{
|
||||
messageData = providersJson.ToString();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Repaint();
|
||||
}
|
||||
|
||||
private void CancelDownload()
|
||||
{
|
||||
// if downloader object is still active
|
||||
if (downloadWebClient != null)
|
||||
{
|
||||
downloadWebClient.Abort();
|
||||
return;
|
||||
}
|
||||
|
||||
if (mEditorCoroutines != null)
|
||||
{
|
||||
mEditorCoroutines.StopEditorCoroutine();
|
||||
mEditorCoroutines = null;
|
||||
}
|
||||
|
||||
downloadWebClient = null;
|
||||
}
|
||||
|
||||
public static void ShowISDependenciesManager()
|
||||
{
|
||||
var win = GetWindowWithRect<IronSourceDependenciesManager>(new Rect(0, 0, Width, Height), true);
|
||||
win.titleContent = new GUIContent("ironSource Integration Manager");
|
||||
win.Focus();
|
||||
}
|
||||
|
||||
void Awake()
|
||||
{
|
||||
headerStyle = new GUIStyle(EditorStyles.label)
|
||||
{
|
||||
fontStyle = FontStyle.Bold,
|
||||
fontSize = 14,
|
||||
fixedHeight = 20,
|
||||
stretchWidth = true,
|
||||
fixedWidth = Width / 4 + 5,
|
||||
clipping = TextClipping.Overflow,
|
||||
alignment = TextAnchor.MiddleLeft
|
||||
};
|
||||
textStyle = new GUIStyle(EditorStyles.label)
|
||||
{
|
||||
fontStyle = FontStyle.Normal,
|
||||
alignment = TextAnchor.MiddleLeft
|
||||
|
||||
};
|
||||
boldTextStyle = new GUIStyle(EditorStyles.label)
|
||||
{
|
||||
fontStyle = FontStyle.Bold
|
||||
};
|
||||
CancelDownload();
|
||||
}
|
||||
|
||||
private void OnEnable()
|
||||
{
|
||||
mEditorCoroutines = IronSourceEditorCoroutines.StartEditorCoroutine(GetVersions());
|
||||
}
|
||||
|
||||
private void OnDestroy()
|
||||
{
|
||||
CancelDownload();
|
||||
AssetDatabase.Refresh();
|
||||
}
|
||||
|
||||
void DrawProviderItem(providerInfo providerData)
|
||||
{
|
||||
if (!providerData.Equals(default(providerInfo)))
|
||||
{
|
||||
using (new EditorGUILayout.HorizontalScope(GUILayout.ExpandWidth(false)))
|
||||
{
|
||||
GUI.enabled = true;
|
||||
bool isNew = providerData.isNewProvider;
|
||||
string isNewAddition = isNew ? " - New Network" : string.Empty;
|
||||
string androidVersion = "";
|
||||
string iosVersion = "";
|
||||
string tooltipText = "Latest Version: \n " + providerData.providerName + " Adapter Version " + providerData.latestUnityVersion;
|
||||
if (!providerData.sdkVersionDic.TryGetValue(Android, out androidVersion))
|
||||
{
|
||||
androidVersion = "";
|
||||
}
|
||||
else tooltipText = tooltipText + "\n Android SDK version " + androidVersion;
|
||||
if (!providerData.sdkVersionDic.TryGetValue(iOS, out iosVersion))
|
||||
{
|
||||
iosVersion = "";
|
||||
}
|
||||
else tooltipText = tooltipText + "\n iOS SDK version " + iosVersion;
|
||||
|
||||
EditorGUILayout.LabelField(providerData.displayProviderName + isNewAddition, isNew ? boldTextStyle : textStyle);
|
||||
EditorGUILayout.LabelField(providerData.currentUnityVersion, textStyle);
|
||||
EditorGUILayout.LabelField(providerData.latestUnityVersion, textStyle);
|
||||
|
||||
if (providerData.currentStatues == providerInfo.Status.none)
|
||||
{
|
||||
bool btn = GUILayout.Button(new GUIContent
|
||||
{
|
||||
text = "Install",
|
||||
tooltip = tooltipText
|
||||
}, buttonWidth);
|
||||
if (btn && downloadWebClient == null)
|
||||
{
|
||||
GUI.enabled = true;
|
||||
IronSourceEditorCoroutines.StartEditorCoroutine(DownloadFile(providerData.downloadURL));
|
||||
}
|
||||
|
||||
}
|
||||
else if (providerData.currentStatues == providerInfo.Status.installed)
|
||||
{
|
||||
var btn = GUILayout.Button(new GUIContent
|
||||
{
|
||||
text= "Update",
|
||||
tooltip = tooltipText
|
||||
}
|
||||
,buttonWidth);
|
||||
if (btn && downloadWebClient == null)
|
||||
{
|
||||
GUI.enabled = true;
|
||||
IronSourceEditorCoroutines.StartEditorCoroutine(DownloadFile(providerData.downloadURL));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
GUI.enabled = false;
|
||||
GUILayout.Button(new GUIContent
|
||||
{
|
||||
text = "Updated",
|
||||
tooltip = tooltipText
|
||||
}, buttonWidth);
|
||||
}
|
||||
GUILayout.Space(5);
|
||||
GUI.enabled = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void OnGUI()
|
||||
{
|
||||
if (ironSourceProviderInfo == null)
|
||||
{
|
||||
GUILayout.Label(errorMessage);
|
||||
return;
|
||||
}
|
||||
|
||||
GUILayout.Space(10);
|
||||
using (new EditorGUILayout.VerticalScope("box"))
|
||||
{
|
||||
DrawSDKHeader();
|
||||
GUILayout.Space(5);
|
||||
GUILayout.BeginHorizontal();
|
||||
DrawProviderItem(ironSourceProviderInfo);
|
||||
GUILayout.Space(5);
|
||||
GUILayout.EndHorizontal();
|
||||
GUILayout.Space(5);
|
||||
}
|
||||
|
||||
GUILayout.Space(15);
|
||||
DrawAdaptersHeader();
|
||||
GUILayout.Space(15);
|
||||
|
||||
foreach (var provider in providersSet)
|
||||
{
|
||||
DrawProviderItem(provider);
|
||||
GUILayout.Space(2);
|
||||
}
|
||||
GUILayout.Space(30);
|
||||
if (!string.IsNullOrEmpty(messageData))
|
||||
{
|
||||
using (new EditorGUILayout.VerticalScope("box", GUILayout.ExpandHeight(true)))
|
||||
{
|
||||
GUILayout.Space(5);
|
||||
using (new EditorGUILayout.HorizontalScope(GUILayout.ExpandWidth(false)))
|
||||
{
|
||||
EditorGUILayout.SelectableLabel(messageData, EditorStyles.textField, GUILayout.ExpandWidth(true), GUILayout.ExpandHeight(true));
|
||||
}
|
||||
GUILayout.Space(5);
|
||||
}
|
||||
using (new EditorGUILayout.VerticalScope(GUILayout.ExpandHeight(false)))
|
||||
{
|
||||
GUILayout.Space(15);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void DrawSDKHeader()
|
||||
{
|
||||
using (new EditorGUILayout.HorizontalScope(GUILayout.ExpandWidth(false)))
|
||||
{
|
||||
EditorGUILayout.LabelField("Current SDK Version", new GUIStyle(EditorStyles.label)
|
||||
{
|
||||
fontStyle = FontStyle.Bold,
|
||||
fontSize = 13,
|
||||
fixedHeight = 20,
|
||||
stretchWidth = true,
|
||||
fixedWidth = Width / 4,
|
||||
clipping = TextClipping.Overflow,
|
||||
padding = new RectOffset(Width / 4 + 15, 0, 0, 0)
|
||||
});
|
||||
GUILayout.Space(85);
|
||||
EditorGUILayout.LabelField("Latest SDK Version", new GUIStyle(EditorStyles.label)
|
||||
{
|
||||
fontStyle = FontStyle.Bold,
|
||||
fontSize = 13,
|
||||
fixedHeight = 20,
|
||||
stretchWidth = true,
|
||||
fixedWidth = Screen.width / 4,
|
||||
clipping = TextClipping.Overflow,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
private void DrawAdaptersHeader()
|
||||
{
|
||||
using (new EditorGUILayout.HorizontalScope(GUILayout.ExpandWidth(false)))
|
||||
{
|
||||
EditorGUILayout.LabelField("Network", headerStyle);
|
||||
EditorGUILayout.LabelField("Current Adapter Version", headerStyle);
|
||||
EditorGUILayout.LabelField("Latest Adapter Version", headerStyle);
|
||||
GUILayout.Space(30);
|
||||
EditorGUILayout.LabelField("Action", headerStyle);
|
||||
}
|
||||
}
|
||||
|
||||
private IEnumerator DownloadFile(string downloadFileUrl)
|
||||
{
|
||||
int fileNameIndex = downloadFileUrl.LastIndexOf("/") + 1;
|
||||
string downloadFileName = downloadFileUrl.Substring(fileNameIndex);
|
||||
string fileDownloading = string.Format("Downloading {0}", downloadFileName);
|
||||
string genericFileName = Regex.Replace(downloadFileName, @"_v+(\d\.\d\.\d\.\d|\d\.\d\.\d)", "");
|
||||
string path = Path.Combine(ironSourceDownloadDir, genericFileName);
|
||||
bool isCancelled = false;
|
||||
downloadWebClient = new UnityWebRequest(downloadFileUrl);
|
||||
downloadWebClient.downloadHandler = new DownloadHandlerFile(path);
|
||||
downloadWebClient.SendWebRequest();
|
||||
if (!downloadWebClient.isHttpError && !downloadWebClient.isNetworkError)
|
||||
{
|
||||
while (!downloadWebClient.isDone)
|
||||
{
|
||||
yield return new WaitForSeconds(0.1f);
|
||||
if (EditorUtility.DisplayCancelableProgressBar("Download Manager", fileDownloading, downloadWebClient.downloadProgress))
|
||||
{
|
||||
if (downloadWebClient.error != null)
|
||||
{
|
||||
Debug.LogError(downloadWebClient.error);
|
||||
}
|
||||
CancelDownload();
|
||||
isCancelled = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.LogError("Error Downloading " + genericFileName + " : " + downloadWebClient.error);
|
||||
}
|
||||
|
||||
EditorUtility.ClearProgressBar();
|
||||
|
||||
if (genericFileName.EndsWith(".unitypackage") && !isCancelled)
|
||||
{
|
||||
AssetDatabase.ImportPackage(Path.Combine(ironSourceDownloadDir, genericFileName), true);
|
||||
}
|
||||
else
|
||||
{
|
||||
// in case the download was cancelled, delete the file
|
||||
if(isCancelled && File.Exists(ironSourceDownloadDir + genericFileName))
|
||||
{
|
||||
File.Delete(ironSourceDownloadDir + genericFileName);
|
||||
}
|
||||
|
||||
IronSourceEditorCoroutines.StartEditorCoroutine(GetVersions());
|
||||
}
|
||||
|
||||
//clean the downloadWebClient object regardless of whether the request succeeded or failed
|
||||
downloadWebClient.Dispose();
|
||||
downloadWebClient = null;
|
||||
|
||||
IronSourceEditorCoroutines.StartEditorCoroutine(GetVersions());
|
||||
}
|
||||
|
||||
private static bool isNewerVersion(string current, string latest)
|
||||
{
|
||||
bool isNewer = false;
|
||||
try
|
||||
{
|
||||
int[] currentVersion = Array.ConvertAll(current.Split('.'), int.Parse);
|
||||
int[] remoteVersion = Array.ConvertAll(latest.Split('.'), int.Parse);
|
||||
int remoteBuild = 0;
|
||||
int curBuild = 0;
|
||||
if (currentVersion.Length > 3)
|
||||
{
|
||||
curBuild = currentVersion[3];
|
||||
}
|
||||
if (remoteVersion.Length > 3)
|
||||
{
|
||||
remoteBuild = remoteVersion[3];
|
||||
|
||||
}
|
||||
System.Version cur = new System.Version(currentVersion[0], currentVersion[1], currentVersion[2], curBuild);
|
||||
System.Version remote = new System.Version(remoteVersion[0], remoteVersion[1], remoteVersion[2], remoteBuild);
|
||||
isNewer = cur < remote;
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
|
||||
}
|
||||
return isNewer;
|
||||
|
||||
}
|
||||
|
||||
internal class ProviderInfoComparor : IComparer<providerInfo>
|
||||
{
|
||||
public int Compare(providerInfo x, providerInfo y)
|
||||
{
|
||||
return x.providerName.CompareTo(y.providerName);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
fileFormatVersion: 2
|
||||
guid: c6e4d9251bd484b8691739732905761c
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
|
@ -0,0 +1,37 @@
|
|||
using UnityEditor;
|
||||
using System.Collections;
|
||||
|
||||
public class IronSourceEditorCoroutines
|
||||
{
|
||||
readonly IEnumerator mRoutine;
|
||||
|
||||
public static IronSourceEditorCoroutines StartEditorCoroutine( IEnumerator routine)
|
||||
{
|
||||
IronSourceEditorCoroutines coroutine = new IronSourceEditorCoroutines(routine);
|
||||
coroutine.start();
|
||||
return coroutine;
|
||||
}
|
||||
|
||||
IronSourceEditorCoroutines(IEnumerator routine)
|
||||
{
|
||||
mRoutine = routine;
|
||||
}
|
||||
|
||||
void start()
|
||||
{
|
||||
EditorApplication.update += update;
|
||||
}
|
||||
|
||||
void update()
|
||||
{
|
||||
if(!mRoutine.MoveNext())
|
||||
{
|
||||
StopEditorCoroutine();
|
||||
}
|
||||
}
|
||||
|
||||
public void StopEditorCoroutine()
|
||||
{
|
||||
EditorApplication.update -= update;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 001447b23ecb34541b82b7d1874874d9
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
|
@ -0,0 +1,134 @@
|
|||
#if UNITY_ANDROID
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Xml.Linq;
|
||||
using UnityEditor;
|
||||
using UnityEditor.Build;
|
||||
#if UNITY_2018_1_OR_NEWER
|
||||
using UnityEditor.Build.Reporting;
|
||||
#endif
|
||||
using UnityEngine;
|
||||
|
||||
|
||||
#if UNITY_2018_1_OR_NEWER
|
||||
public class IronSourceManifestProcessor : IPreprocessBuildWithReport
|
||||
#else
|
||||
public class IronSourceManifestProcessor : IPreprocessBuild
|
||||
#endif
|
||||
{
|
||||
private const string META_APPLICATION_ID = "com.google.android.gms.ads.APPLICATION_ID";
|
||||
|
||||
private XNamespace ns = "http://schemas.android.com/apk/res/android";
|
||||
|
||||
public int callbackOrder { get { return 0; } }
|
||||
|
||||
#if UNITY_2018_1_OR_NEWER
|
||||
public void OnPreprocessBuild(BuildReport report)
|
||||
#else
|
||||
public void OnPreprocessBuild(BuildTarget target, string path)
|
||||
#endif
|
||||
{
|
||||
if (File.Exists(IronSourceMediatedNetworkSettings.MEDIATION_SETTINGS_ASSET_PATH))
|
||||
{
|
||||
string appId = IronSourceMediatedNetworkSettingsInspector.IronSourceMediatedNetworkSettings.AdmobAndroidAppId;
|
||||
|
||||
if (IronSourceMediatedNetworkSettingsInspector.IronSourceMediatedNetworkSettings.EnableAdmob)
|
||||
{
|
||||
string manifestPath = Path.Combine(
|
||||
Application.dataPath, "IronSource/Plugins/Android/IronSource.plugin/AndroidManifest.xml");
|
||||
|
||||
XDocument manifest = null;
|
||||
try
|
||||
{
|
||||
manifest = XDocument.Load(manifestPath);
|
||||
}
|
||||
#pragma warning disable 0168
|
||||
catch (IOException e)
|
||||
#pragma warning restore 0168
|
||||
{
|
||||
StopBuildWithMessage("AndroidManifest.xml is missing. Try re-importing the plugin.");
|
||||
}
|
||||
|
||||
XElement elemManifest = manifest.Element("manifest");
|
||||
if (elemManifest == null)
|
||||
{
|
||||
StopBuildWithMessage("AndroidManifest.xml is not valid. Try re-importing the plugin.");
|
||||
}
|
||||
|
||||
XElement elemApplication = elemManifest.Element("application");
|
||||
if (elemApplication == null)
|
||||
{
|
||||
StopBuildWithMessage("AndroidManifest.xml is not valid. Try re-importing the plugin.");
|
||||
}
|
||||
|
||||
IEnumerable<XElement> metas = elemApplication.Descendants()
|
||||
.Where(elem => elem.Name.LocalName.Equals("meta-data"));
|
||||
|
||||
XElement elemAdMobEnabled = GetMetaElement(metas, META_APPLICATION_ID);
|
||||
|
||||
if (appId.Length == 0)
|
||||
{
|
||||
StopBuildWithMessage(
|
||||
"Android AdMob app ID is empty. Please enter your app ID to run ads properly");
|
||||
}
|
||||
else if (!Regex.IsMatch(appId, "^[a-zA-Z0-9-~]*$"))
|
||||
{
|
||||
StopBuildWithMessage(
|
||||
"Android AdMob app ID is not valid. Please enter a valid app ID to run ads properly");
|
||||
}
|
||||
|
||||
else if (elemAdMobEnabled == null)
|
||||
{
|
||||
elemApplication.Add(CreateMetaElement(META_APPLICATION_ID, appId));
|
||||
}
|
||||
else
|
||||
{
|
||||
elemAdMobEnabled.SetAttributeValue(ns + "value", appId);
|
||||
}
|
||||
|
||||
elemManifest.Save(manifestPath);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private XElement CreateMetaElement(string name, object value)
|
||||
{
|
||||
return new XElement("meta-data",
|
||||
new XAttribute(ns + "name", name), new XAttribute(ns + "value", value));
|
||||
}
|
||||
|
||||
private XElement GetMetaElement(IEnumerable<XElement> metas, string metaName)
|
||||
{
|
||||
foreach (XElement elem in metas)
|
||||
{
|
||||
IEnumerable<XAttribute> attrs = elem.Attributes();
|
||||
foreach (XAttribute attr in attrs)
|
||||
{
|
||||
if (attr.Name.Namespace.Equals(ns)
|
||||
&& attr.Name.LocalName.Equals("name") && attr.Value.Equals(metaName))
|
||||
{
|
||||
return elem;
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private void StopBuildWithMessage(string message)
|
||||
{
|
||||
string prefix = "[IronSourceApplicationSettings] ";
|
||||
|
||||
EditorUtility.DisplayDialog(
|
||||
"IronSource Developer Settings", "Error: " + message, "", "");
|
||||
#if UNITY_2017_1_OR_NEWER
|
||||
throw new BuildPlayerWindow.BuildMethodException(prefix + message);
|
||||
#else
|
||||
throw new OperationCanceledException(prefix + message);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 6b63a7ef12abd42eabd7c7b7c8250f83
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
using System.IO;
|
||||
using UnityEngine;
|
||||
|
||||
public class IronSourceMediatedNetworkSettings : ScriptableObject
|
||||
{
|
||||
public static readonly string MEDIATION_SETTINGS_ASSET_PATH = Path.Combine(IronSourceConstants.IRONSOURCE_RESOURCES_PATH, IronSourceConstants.IRONSOURCE_MEDIATED_NETWORK_SETTING_NAME + ".asset");
|
||||
|
||||
[Header("")]
|
||||
[Header("AdMob Integration")]
|
||||
[SerializeField]
|
||||
[Tooltip("This will add AdMob Application ID to AndroidManifest.xml/info.plist")]
|
||||
public bool EnableAdmob = false;
|
||||
|
||||
[SerializeField]
|
||||
[Tooltip("This Will be added to your AndroidManifest.xml")]
|
||||
public string AdmobAndroidAppId = string.Empty;
|
||||
|
||||
[SerializeField]
|
||||
[Tooltip("This will be added to your info.plist")]
|
||||
public string AdmobIOSAppId = string.Empty;
|
||||
}
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 6dcd730eacb2043e8a6f1c61c16243da
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
|
@ -0,0 +1,27 @@
|
|||
using System.IO;
|
||||
using UnityEditor;
|
||||
|
||||
[CustomEditor(typeof(IronSourceMediatedNetworkSettings))]
|
||||
public class IronSourceMediatedNetworkSettingsInspector : UnityEditor.Editor
|
||||
{
|
||||
private static IronSourceMediatedNetworkSettings ironSourceMediatedNetworkSettings;
|
||||
public static IronSourceMediatedNetworkSettings IronSourceMediatedNetworkSettings
|
||||
{
|
||||
get
|
||||
{
|
||||
if (ironSourceMediatedNetworkSettings == null)
|
||||
{
|
||||
ironSourceMediatedNetworkSettings = AssetDatabase.LoadAssetAtPath<IronSourceMediatedNetworkSettings>(IronSourceMediatedNetworkSettings.MEDIATION_SETTINGS_ASSET_PATH);
|
||||
if (ironSourceMediatedNetworkSettings == null)
|
||||
{
|
||||
IronSourceMediatedNetworkSettings asset = CreateInstance<IronSourceMediatedNetworkSettings>();
|
||||
Directory.CreateDirectory(IronSourceConstants.IRONSOURCE_RESOURCES_PATH);
|
||||
AssetDatabase.CreateAsset(asset, IronSourceMediatedNetworkSettings.MEDIATION_SETTINGS_ASSET_PATH);
|
||||
ironSourceMediatedNetworkSettings = asset;
|
||||
}
|
||||
}
|
||||
|
||||
return ironSourceMediatedNetworkSettings;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 6ddcb1096c420410ead13befae195114
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
|
@ -0,0 +1,27 @@
|
|||
using System.IO;
|
||||
using UnityEditor;
|
||||
|
||||
[CustomEditor(typeof(IronSourceMediationSettings))]
|
||||
public class IronSourceMediationSettingsInspector : UnityEditor.Editor
|
||||
{
|
||||
private static IronSourceMediationSettings ironSourceMediationSettings;
|
||||
public static IronSourceMediationSettings IronSourceMediationSettings
|
||||
{
|
||||
get
|
||||
{
|
||||
if (ironSourceMediationSettings == null)
|
||||
{
|
||||
ironSourceMediationSettings = AssetDatabase.LoadAssetAtPath<IronSourceMediationSettings>(IronSourceMediationSettings.IRONSOURCE_SETTINGS_ASSET_PATH);
|
||||
if (ironSourceMediationSettings == null)
|
||||
{
|
||||
IronSourceMediationSettings asset = CreateInstance<IronSourceMediationSettings>();
|
||||
Directory.CreateDirectory(IronSourceConstants.IRONSOURCE_RESOURCES_PATH);
|
||||
AssetDatabase.CreateAsset(asset, IronSourceMediationSettings.IRONSOURCE_SETTINGS_ASSET_PATH);
|
||||
ironSourceMediationSettings = asset;
|
||||
}
|
||||
}
|
||||
|
||||
return ironSourceMediationSettings;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 4a5cecbf374304044822daeaa54c686c
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
|
@ -0,0 +1,72 @@
|
|||
using System.IO;
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
|
||||
public class IronSourceMenu : UnityEditor.Editor
|
||||
{
|
||||
|
||||
[MenuItem("IronSource/Documentation", false, 0)]
|
||||
public static void Documentation()
|
||||
{
|
||||
Application.OpenURL("https://developers.ironsrc.com/ironsource-mobile/unity/unity-plugin/");
|
||||
}
|
||||
|
||||
|
||||
[MenuItem("IronSource/SDK Change Log", false, 1)]
|
||||
public static void ChangeLog()
|
||||
{
|
||||
Application.OpenURL("https://developers.ironsrc.com/ironsource-mobile/unity/sdk-change-log/");
|
||||
}
|
||||
|
||||
|
||||
[MenuItem("IronSource/Integration Manager", false , 2)]
|
||||
public static void SdkManagerProd()
|
||||
{
|
||||
IronSourceDependenciesManager.ShowISDependenciesManager();
|
||||
}
|
||||
|
||||
[MenuItem("IronSource/Developer Settings/IronSource Mediation Settings", false, 3)]
|
||||
public static void mediationSettings()
|
||||
{
|
||||
string path = "Assets/IronSource/Resources";
|
||||
|
||||
if (!Directory.Exists(path))
|
||||
{
|
||||
Directory.CreateDirectory(path);
|
||||
}
|
||||
|
||||
|
||||
var ironSourceMediationSettings = Resources.Load<IronSourceMediationSettings>(IronSourceConstants.IRONSOURCE_MEDIATION_SETTING_NAME);
|
||||
if (ironSourceMediationSettings == null)
|
||||
{
|
||||
Debug.LogWarning(IronSourceConstants.IRONSOURCE_MEDIATION_SETTING_NAME + " can't be found, creating a new one...");
|
||||
ironSourceMediationSettings = CreateInstance<IronSourceMediationSettings>();
|
||||
AssetDatabase.CreateAsset(ironSourceMediationSettings, IronSourceMediationSettings.IRONSOURCE_SETTINGS_ASSET_PATH);
|
||||
ironSourceMediationSettings = Resources.Load<IronSourceMediationSettings>(IronSourceConstants.IRONSOURCE_MEDIATION_SETTING_NAME);
|
||||
}
|
||||
|
||||
Selection.activeObject = ironSourceMediationSettings;
|
||||
}
|
||||
|
||||
[MenuItem("IronSource/Developer Settings/Mediated Network Settings", false, 4)]
|
||||
public static void mediatedNetworkSettings()
|
||||
{
|
||||
string path = IronSourceConstants.IRONSOURCE_RESOURCES_PATH;
|
||||
|
||||
if (!Directory.Exists(path))
|
||||
{
|
||||
Directory.CreateDirectory(path);
|
||||
}
|
||||
|
||||
var ironSourceMediatedNetworkSettings = Resources.Load<IronSourceMediatedNetworkSettings>(IronSourceConstants.IRONSOURCE_MEDIATED_NETWORK_SETTING_NAME);
|
||||
if (ironSourceMediatedNetworkSettings == null)
|
||||
{
|
||||
Debug.LogWarning(IronSourceConstants.IRONSOURCE_MEDIATED_NETWORK_SETTING_NAME + " can't be found, creating a new one...");
|
||||
ironSourceMediatedNetworkSettings = CreateInstance<IronSourceMediatedNetworkSettings>();
|
||||
AssetDatabase.CreateAsset(ironSourceMediatedNetworkSettings, IronSourceMediatedNetworkSettings.MEDIATION_SETTINGS_ASSET_PATH);
|
||||
ironSourceMediatedNetworkSettings = Resources.Load<IronSourceMediatedNetworkSettings>(IronSourceConstants.IRONSOURCE_MEDIATED_NETWORK_SETTING_NAME);
|
||||
}
|
||||
|
||||
Selection.activeObject = ironSourceMediatedNetworkSettings;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 70dd99db2841b47fb8709e8e707d714a
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
|
@ -0,0 +1,133 @@
|
|||
|
||||
#if UNITY_IOS || UNITY_IPHONE
|
||||
|
||||
using System.IO;
|
||||
using UnityEditor.Callbacks;
|
||||
using UnityEditor;
|
||||
using System;
|
||||
using UnityEngine;
|
||||
using UnityEditor.iOS.Xcode;
|
||||
using System.Text.RegularExpressions;
|
||||
|
||||
/// <summary>
|
||||
/// PostProcessor script to automatically fill all required dependencies
|
||||
/// </summary>
|
||||
public class IronSourcePlistProcessor
|
||||
{
|
||||
[PostProcessBuild]
|
||||
public static void OnPostprocessBuild(BuildTarget buildTarget, string buildPath)
|
||||
{
|
||||
if (File.Exists(IronSourceMediationSettings.IRONSOURCE_SETTINGS_ASSET_PATH))
|
||||
{
|
||||
if (buildTarget == BuildTarget.iOS)
|
||||
{
|
||||
/*
|
||||
* PBXProject
|
||||
*/
|
||||
string plistPath = Path.Combine(buildPath, "Info.plist");
|
||||
PBXProject project = new PBXProject();
|
||||
string projectPath = PBXProject.GetPBXProjectPath(buildPath);
|
||||
project.ReadFromFile(projectPath);
|
||||
PlistDocument plist = new PlistDocument();
|
||||
plist.ReadFromString(File.ReadAllText(plistPath));
|
||||
if (plist != null)
|
||||
{
|
||||
// Get root
|
||||
PlistElementDict rootDict = plist.root;
|
||||
|
||||
// Check if SKAdNetworkItems already exists
|
||||
PlistElementArray SKAdNetworkItems = null;
|
||||
if (rootDict.values.ContainsKey("SKAdNetworkItems"))
|
||||
{
|
||||
try
|
||||
{
|
||||
SKAdNetworkItems = rootDict.values["SKAdNetworkItems"] as PlistElementArray;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Debug.LogWarning(string.Format("Could not obtain SKAdNetworkItems PlistElementArray: {0}", e.Message));
|
||||
}
|
||||
}
|
||||
|
||||
//Add IronSource's SKAdNetwork ID
|
||||
if (IronSourceMediationSettingsInspector.IronSourceMediationSettings.AddIronsourceSkadnetworkID)
|
||||
{
|
||||
// If not exists, create it
|
||||
if (SKAdNetworkItems == null)
|
||||
{
|
||||
SKAdNetworkItems = rootDict.CreateArray("SKAdNetworkItems");
|
||||
}
|
||||
|
||||
string plistContent = File.ReadAllText(plistPath);
|
||||
if (!plistContent.Contains(IronSourceConstants.IRONSOURCE_SKAN_ID_KEY))
|
||||
{
|
||||
PlistElementDict SKAdNetworkIdentifierDict = SKAdNetworkItems.AddDict();
|
||||
SKAdNetworkIdentifierDict.SetString("SKAdNetworkIdentifier", IronSourceConstants.IRONSOURCE_SKAN_ID_KEY);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
File.WriteAllText(plistPath, plist.WriteToString());
|
||||
}
|
||||
}
|
||||
}
|
||||
if ( File.Exists(IronSourceMediatedNetworkSettings.MEDIATION_SETTINGS_ASSET_PATH))
|
||||
{
|
||||
if (buildTarget == BuildTarget.iOS)
|
||||
{
|
||||
/*
|
||||
* PBXProject
|
||||
*/
|
||||
string plistPath = Path.Combine(buildPath, "Info.plist");
|
||||
PBXProject project = new PBXProject();
|
||||
string projectPath = PBXProject.GetPBXProjectPath(buildPath);
|
||||
project.ReadFromFile(projectPath);
|
||||
PlistDocument plist = new PlistDocument();
|
||||
plist.ReadFromString(File.ReadAllText(plistPath));
|
||||
if (plist != null)
|
||||
{
|
||||
// Get root
|
||||
PlistElementDict rootDict = plist.root;
|
||||
|
||||
|
||||
//Adding AdMob App ID to Plist
|
||||
if (IronSourceMediatedNetworkSettingsInspector.IronSourceMediatedNetworkSettings.EnableAdmob == true)
|
||||
{
|
||||
string appId = IronSourceMediatedNetworkSettingsInspector.IronSourceMediatedNetworkSettings.AdmobIOSAppId;
|
||||
if (appId.Length == 0)
|
||||
{
|
||||
StopBuildWithMessage(
|
||||
"iOS AdMob app ID is empty. Please enter your app ID to run ads properly");
|
||||
}
|
||||
else if (!Regex.IsMatch(appId, "^[a-zA-Z0-9-~]*$"))
|
||||
{
|
||||
StopBuildWithMessage(
|
||||
"iOS AdMob app ID is not valid. Please enter a valid app ID to run ads properly");
|
||||
}
|
||||
else
|
||||
{
|
||||
plist.root.SetString("GADApplicationIdentifier", appId);
|
||||
}
|
||||
}
|
||||
|
||||
File.WriteAllText(plistPath, plist.WriteToString());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
private static void StopBuildWithMessage(string message)
|
||||
{
|
||||
string prefix = "[IronSourceApplicationSettings] ";
|
||||
|
||||
EditorUtility.DisplayDialog(
|
||||
"IronSource Developer Settings", "Error: " + message, "", "");
|
||||
|
||||
#if UNITY_2017_1_OR_NEWER
|
||||
throw new BuildPlayerWindow.BuildMethodException(prefix + message);
|
||||
#else
|
||||
throw new OperationCanceledException(prefix + message);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 920ec5e5fa67e48c2a6380c2c2be88fc
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
|
@ -0,0 +1,42 @@
|
|||
<dependencies>
|
||||
<unityversion>7.1.12</unityversion>
|
||||
<androidPackages>
|
||||
<androidPackage spec="com.ironsource.sdk:mediationsdk:7.1.12">
|
||||
<repositories>
|
||||
<repository>https://android-sdk.is.com/</repository>
|
||||
</repositories>
|
||||
</androidPackage>
|
||||
</androidPackages>
|
||||
|
||||
<androidPackages>
|
||||
<androidPackage spec="com.google.android.gms:play-services-ads-identifier:17.0.0">
|
||||
<repositories>
|
||||
<repository>https://maven.google.com/</repository>
|
||||
</repositories>
|
||||
</androidPackage>
|
||||
</androidPackages>
|
||||
|
||||
<androidPackages>
|
||||
<androidPackage spec="com.google.android.gms:play-services-appset:16.0.0">
|
||||
<repositories>
|
||||
<repository>https://maven.google.com/</repository>
|
||||
</repositories>
|
||||
</androidPackage>
|
||||
</androidPackages>
|
||||
|
||||
<androidPackages>
|
||||
<androidPackage spec="com.google.android.gms:play-services-basement:17.2.1">
|
||||
<repositories>
|
||||
<repository>https://maven.google.com/</repository>
|
||||
</repositories>
|
||||
</androidPackage>
|
||||
</androidPackages>
|
||||
|
||||
<iosPods>
|
||||
<iosPod name="IronSourceSDK" version="7.1.12">
|
||||
<sources>
|
||||
<source>https://github.com/CocoaPods/Specs</source>
|
||||
</sources>
|
||||
</iosPod>
|
||||
</iosPods>
|
||||
</dependencies>
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
fileFormatVersion: 2
|
||||
guid: d618a278f636e4718b9e6409b1f031eb
|
||||
TextScriptImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 54543a6abf5c743eebffbdd3ab80a1e7
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: e68fc23b7584a4aeb9ad1faec8a8708c
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
fileFormatVersion: 2
|
||||
guid: f1bc66601864e445e88faef50fa5886c
|
||||
folderAsset: yes
|
||||
PluginImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
iconMap: {}
|
||||
executionOrder: {}
|
||||
defineConstraints: []
|
||||
isPreloaded: 0
|
||||
isOverridable: 0
|
||||
isExplicitlyReferenced: 0
|
||||
validateReferences: 1
|
||||
platformData:
|
||||
- first:
|
||||
Any:
|
||||
second:
|
||||
enabled: 1
|
||||
settings: {}
|
||||
- first:
|
||||
Editor: Editor
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
DefaultValueInitialized: true
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
|
@ -0,0 +1,23 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:installLocation="preferExternal"
|
||||
package="com.Company.ProductName"
|
||||
android:versionName="1.0"
|
||||
android:versionCode="1">
|
||||
|
||||
<uses-permission android:name="android.permission.INTERNET" />
|
||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
||||
|
||||
<application>
|
||||
|
||||
<!-- AdMob -->
|
||||
|
||||
<!--As Requiered By Admob please add your App ID-->
|
||||
|
||||
<!--<meta-data-->
|
||||
<!--android:name="com.google.android.gms.ads.APPLICATION_ID"-->
|
||||
<!--android:value="YOUR_ADMOB_APP_ID"/>-->
|
||||
|
||||
</application>
|
||||
</manifest>
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 9632a9cae064644419de54f10c604559
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 52c96c6ebd65b44b3858b9ae1afdf87a
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Binary file not shown.
|
|
@ -0,0 +1,7 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 2dbf0193032a2473098de3a49a1e75f7
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
|
@ -0,0 +1 @@
|
|||
android.library=true
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 21b205bdddcad4558ab4a0831cb093f2
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: d169a20af57cb4a47b056b3317f02f12
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
|
@ -0,0 +1,78 @@
|
|||
//
|
||||
// iOSBridge
|
||||
//
|
||||
// Created by Ori on 5/13/15.
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
#import <IronSource/ISSupersonicAdsConfiguration.h>
|
||||
#import <IronSource/ISConfigurations.h>
|
||||
|
||||
@interface IronSourceUnityConfig:NSObject
|
||||
//IronSource
|
||||
- (void) setClientSideCallbacks:(bool)useClientSideCallbacks;
|
||||
- (void) setLanguage:(NSString *)language;
|
||||
- (void) setRewardedVideoCustomParams:(NSString *)rvParams;
|
||||
- (void) setOfferwallCustomParams:(NSString *)owParams;
|
||||
|
||||
@end
|
||||
|
||||
@implementation IronSourceUnityConfig
|
||||
|
||||
//IronSource
|
||||
- (void) setClientSideCallbacks:(bool)useClientSideCallbacks {
|
||||
NSNumber *ucsc = @0;
|
||||
if (useClientSideCallbacks)
|
||||
ucsc = @1;
|
||||
|
||||
[ISSupersonicAdsConfiguration configurations].useClientSideCallbacks = ucsc;
|
||||
}
|
||||
|
||||
- (void) setLanguage:(NSString *)language {
|
||||
[ISSupersonicAdsConfiguration configurations].language = language;
|
||||
}
|
||||
|
||||
- (void) setRewardedVideoCustomParams:(NSString *)rvParams {
|
||||
NSError *jsonError;
|
||||
NSData *objectData = [rvParams dataUsingEncoding:NSUTF8StringEncoding];
|
||||
NSDictionary *json = [NSJSONSerialization JSONObjectWithData:objectData options:NSJSONReadingMutableContainers error:&jsonError];
|
||||
if (!jsonError)
|
||||
[ISConfigurations configurations].rewardedVideoCustomParameters = json;
|
||||
}
|
||||
|
||||
- (void) setOfferwallCustomParams:(NSString *)owParams {
|
||||
NSError *jsonError;
|
||||
NSData *objectData = [owParams dataUsingEncoding:NSUTF8StringEncoding];
|
||||
NSDictionary *json = [NSJSONSerialization JSONObjectWithData:objectData options:NSJSONReadingMutableContainers error:&jsonError];
|
||||
if (!jsonError)
|
||||
[ISConfigurations configurations].offerwallCustomParameters = json;
|
||||
}
|
||||
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define ParseNSStringParam( _x_ ) ( _x_ != NULL ) ? [NSString stringWithUTF8String:_x_] : [NSString stringWithUTF8String:""]
|
||||
|
||||
//IronSource
|
||||
void CFSetClientSideCallbacks(bool useClientSideCallbacks){
|
||||
[[IronSourceUnityConfig new] setClientSideCallbacks:useClientSideCallbacks];
|
||||
}
|
||||
void CFSetLanguage(const char *language){
|
||||
[[IronSourceUnityConfig new] setLanguage:ParseNSStringParam(language)];
|
||||
}
|
||||
void CFSetRewardedVideoCustomParams(const char *rvParams){
|
||||
[[IronSourceUnityConfig new] setRewardedVideoCustomParams:ParseNSStringParam(rvParams)];
|
||||
}
|
||||
void CFSetOfferwallCustomParams(const char *owParam){
|
||||
[[IronSourceUnityConfig new] setOfferwallCustomParams:ParseNSStringParam(owParam)];
|
||||
}
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
@end
|
||||
|
|
@ -0,0 +1,37 @@
|
|||
fileFormatVersion: 2
|
||||
guid: e0be82736da5a41d4af2ea3ac34d5ac4
|
||||
PluginImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
iconMap: {}
|
||||
executionOrder: {}
|
||||
defineConstraints: []
|
||||
isPreloaded: 0
|
||||
isOverridable: 0
|
||||
isExplicitlyReferenced: 0
|
||||
validateReferences: 1
|
||||
platformData:
|
||||
- first:
|
||||
Any:
|
||||
second:
|
||||
enabled: 0
|
||||
settings: {}
|
||||
- first:
|
||||
Editor: Editor
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
DefaultValueInitialized: true
|
||||
- first:
|
||||
iPhone: iOS
|
||||
second:
|
||||
enabled: 1
|
||||
settings: {}
|
||||
- first:
|
||||
tvOS: tvOS
|
||||
second:
|
||||
enabled: 1
|
||||
settings: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
//
|
||||
// iOSBridge.h
|
||||
// iOSBridge
|
||||
//
|
||||
// Created by Supersonic.
|
||||
// Copyright (c) 2015 Supersonic. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
#import <IronSource/IronSource.h>
|
||||
static NSString * UnityGitHash = @"04bfbea";
|
||||
|
||||
@interface iOSBridge : NSObject<ISRewardedVideoDelegate,ISDemandOnlyRewardedVideoDelegate, ISInterstitialDelegate,ISDemandOnlyInterstitialDelegate, ISOfferwallDelegate, ISBannerDelegate, ISSegmentDelegate,ISImpressionDataDelegate, ISConsentViewDelegate>
|
||||
|
||||
@end
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,27 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 33123db285ad544b59cf1c18d83f66b8
|
||||
PluginImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
iconMap: {}
|
||||
executionOrder: {}
|
||||
defineConstraints: []
|
||||
isPreloaded: 0
|
||||
isOverridable: 0
|
||||
isExplicitlyReferenced: 0
|
||||
validateReferences: 1
|
||||
platformData:
|
||||
- first:
|
||||
Any:
|
||||
second:
|
||||
enabled: 1
|
||||
settings: {}
|
||||
- first:
|
||||
Editor: Editor
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
DefaultValueInitialized: true
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,37 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 270589a8de1714a00bc20bfd059e4441
|
||||
PluginImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
iconMap: {}
|
||||
executionOrder: {}
|
||||
defineConstraints: []
|
||||
isPreloaded: 0
|
||||
isOverridable: 0
|
||||
isExplicitlyReferenced: 0
|
||||
validateReferences: 1
|
||||
platformData:
|
||||
- first:
|
||||
Any:
|
||||
second:
|
||||
enabled: 0
|
||||
settings: {}
|
||||
- first:
|
||||
Editor: Editor
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
DefaultValueInitialized: true
|
||||
- first:
|
||||
iPhone: iOS
|
||||
second:
|
||||
enabled: 1
|
||||
settings: {}
|
||||
- first:
|
||||
tvOS: tvOS
|
||||
second:
|
||||
enabled: 1
|
||||
settings: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 1bbaa67142d994184844ed2864338043
|
||||
folderAsset: yes
|
||||
timeCreated: 1486985218
|
||||
licenseType: Free
|
||||
DefaultImporter:
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
|
@ -0,0 +1,314 @@
|
|||
#if UNITY_ANDROID
|
||||
using UnityEngine;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System;
|
||||
|
||||
public class AndroidAgent : IronSourceIAgent
|
||||
{
|
||||
private static AndroidJavaObject _androidBridge;
|
||||
private readonly static string AndroidBridge = "com.ironsource.unity.androidbridge.AndroidBridge";
|
||||
private const string REWARD_AMOUNT = "reward_amount";
|
||||
private const string REWARD_NAME = "reward_name";
|
||||
private const string PLACEMENT_NAME = "placement_name";
|
||||
|
||||
public AndroidAgent ()
|
||||
{
|
||||
Debug.Log ("AndroidAgent ctr");
|
||||
}
|
||||
|
||||
#region IronSourceIAgent implementation
|
||||
public AndroidJavaObject getBridge ()
|
||||
{
|
||||
if (_androidBridge == null)
|
||||
using (var pluginClass = new AndroidJavaClass( AndroidBridge ))
|
||||
_androidBridge = pluginClass.CallStatic<AndroidJavaObject> ("getInstance");
|
||||
|
||||
return _androidBridge;
|
||||
}
|
||||
|
||||
//******************* Base API *******************//
|
||||
|
||||
public void onApplicationPause (bool pause)
|
||||
{
|
||||
if (pause)
|
||||
{
|
||||
getBridge ().Call ("onPause");
|
||||
}
|
||||
else
|
||||
{
|
||||
getBridge ().Call ("onResume");
|
||||
}
|
||||
}
|
||||
|
||||
public void setMediationSegment (string segment)
|
||||
{
|
||||
getBridge ().Call ("setMediationSegment", segment);
|
||||
}
|
||||
|
||||
public string getAdvertiserId ()
|
||||
{
|
||||
return getBridge ().Call<string> ("getAdvertiserId");
|
||||
}
|
||||
|
||||
public void validateIntegration ()
|
||||
{
|
||||
getBridge ().Call ("validateIntegration");
|
||||
}
|
||||
|
||||
public void shouldTrackNetworkState (bool track)
|
||||
{
|
||||
getBridge ().Call ("shouldTrackNetworkState", track);
|
||||
}
|
||||
|
||||
public bool setDynamicUserId (string dynamicUserId)
|
||||
{
|
||||
return getBridge ().Call<bool> ("setDynamicUserId", dynamicUserId);
|
||||
}
|
||||
|
||||
public void setAdaptersDebug(bool enabled)
|
||||
{
|
||||
getBridge ().Call ("setAdaptersDebug", enabled);
|
||||
}
|
||||
|
||||
public void setMetaData(string key, string value)
|
||||
{
|
||||
getBridge().Call("setMetaData", key, value);
|
||||
}
|
||||
|
||||
public void setMetaData(string key, params string[] values)
|
||||
{
|
||||
getBridge().Call("setMetaData", key, values);
|
||||
}
|
||||
|
||||
public int? getConversionValue()
|
||||
{
|
||||
Debug.Log("Unsupported Platform");
|
||||
return null;
|
||||
}
|
||||
|
||||
//******************* SDK Init *******************//
|
||||
|
||||
public void setUserId(string userId) {
|
||||
getBridge ().Call ("setUserId", userId);
|
||||
}
|
||||
|
||||
public void init(string appKey)
|
||||
{
|
||||
getBridge ().Call ("setPluginData", "Unity", IronSource.pluginVersion (), IronSource.unityVersion ());
|
||||
Debug.Log ("IntegrationHelper pluginVersion: " + IronSource.pluginVersion ());
|
||||
getBridge ().Call ("init", appKey);
|
||||
}
|
||||
|
||||
public void init (string appKey, params string[] adUnits)
|
||||
{
|
||||
getBridge ().Call ("setPluginData", "Unity", IronSource.pluginVersion (), IronSource.unityVersion ());
|
||||
Debug.Log ("IntegrationHelper pluginVersion: " + IronSource.pluginVersion ());
|
||||
getBridge ().Call ("init", appKey, adUnits);
|
||||
}
|
||||
|
||||
public void initISDemandOnly (string appKey, params string[] adUnits)
|
||||
{
|
||||
getBridge ().Call ("setPluginData", "Unity", IronSource.pluginVersion (), IronSource.unityVersion ());
|
||||
Debug.Log ("IntegrationHelper pluginVersion: " + IronSource.pluginVersion ());
|
||||
getBridge ().Call ("initISDemandOnly", appKey, adUnits);
|
||||
}
|
||||
|
||||
//******************* RewardedVideo API *******************//
|
||||
|
||||
public void showRewardedVideo ()
|
||||
{
|
||||
getBridge ().Call ("showRewardedVideo");
|
||||
}
|
||||
|
||||
public void showRewardedVideo (string placementName)
|
||||
{
|
||||
getBridge ().Call ("showRewardedVideo", placementName);
|
||||
}
|
||||
|
||||
public bool isRewardedVideoAvailable ()
|
||||
{
|
||||
return getBridge ().Call<bool> ("isRewardedVideoAvailable");
|
||||
}
|
||||
|
||||
public bool isRewardedVideoPlacementCapped (string placementName)
|
||||
{
|
||||
return getBridge ().Call<bool> ("isRewardedVideoPlacementCapped", placementName);
|
||||
}
|
||||
|
||||
public IronSourcePlacement getPlacementInfo (string placementName)
|
||||
{
|
||||
string placementInfo = getBridge ().Call<string> ("getPlacementInfo", placementName);
|
||||
IronSourcePlacement pInfo = null;
|
||||
if (placementInfo != null) {
|
||||
Dictionary<string,object> pInfoDic = IronSourceJSON.Json.Deserialize (placementInfo) as Dictionary<string,object>;
|
||||
string pName = pInfoDic [PLACEMENT_NAME].ToString ();
|
||||
string rName = pInfoDic [REWARD_NAME].ToString ();
|
||||
int rAmount = Convert.ToInt32 (pInfoDic [REWARD_AMOUNT].ToString ());
|
||||
|
||||
pInfo = new IronSourcePlacement (pName, rName, rAmount);
|
||||
}
|
||||
return pInfo;
|
||||
}
|
||||
|
||||
public void setRewardedVideoServerParams(Dictionary<string, string> parameters) {
|
||||
string json = IronSourceJSON.Json.Serialize (parameters);
|
||||
getBridge ().Call ("setRewardedVideoServerParams", json);
|
||||
}
|
||||
|
||||
public void clearRewardedVideoServerParams() {
|
||||
getBridge ().Call ("clearRewardedVideoServerParams");
|
||||
}
|
||||
|
||||
//******************* RewardedVideo DemandOnly API *******************//
|
||||
|
||||
public void showISDemandOnlyRewardedVideo (string instanceId)
|
||||
{
|
||||
getBridge ().Call ("showISDemandOnlyRewardedVideo",instanceId);
|
||||
}
|
||||
|
||||
public void loadISDemandOnlyRewardedVideo (string instanceId)
|
||||
{
|
||||
getBridge ().Call ("loadISDemandOnlyRewardedVideo", instanceId);
|
||||
}
|
||||
|
||||
public bool isISDemandOnlyRewardedVideoAvailable (string instanceId)
|
||||
{
|
||||
return getBridge ().Call<bool> ("isISDemandOnlyRewardedVideoAvailable", instanceId);
|
||||
}
|
||||
|
||||
//******************* Interstitial API *******************//
|
||||
|
||||
public void loadInterstitial ()
|
||||
{
|
||||
getBridge ().Call ("loadInterstitial");
|
||||
}
|
||||
|
||||
public void showInterstitial ()
|
||||
{
|
||||
getBridge ().Call ("showInterstitial");
|
||||
}
|
||||
|
||||
public void showInterstitial (string placementName)
|
||||
{
|
||||
getBridge ().Call ("showInterstitial", placementName);
|
||||
}
|
||||
|
||||
public bool isInterstitialReady ()
|
||||
{
|
||||
return getBridge ().Call<bool> ("isInterstitialReady");
|
||||
}
|
||||
|
||||
public bool isInterstitialPlacementCapped (string placementName)
|
||||
{
|
||||
return getBridge ().Call<bool> ("isInterstitialPlacementCapped", placementName);
|
||||
}
|
||||
|
||||
//******************* Interstitial DemandOnly API *******************//
|
||||
|
||||
public void loadISDemandOnlyInterstitial (string instanceId)
|
||||
{
|
||||
getBridge ().Call ("loadISDemandOnlyInterstitial",instanceId);
|
||||
}
|
||||
|
||||
public void showISDemandOnlyInterstitial (string instanceId)
|
||||
{
|
||||
getBridge ().Call ("showISDemandOnlyInterstitial",instanceId);
|
||||
}
|
||||
|
||||
public bool isISDemandOnlyInterstitialReady (string instanceId)
|
||||
{
|
||||
return getBridge ().Call<bool> ("isISDemandOnlyInterstitialReady",instanceId);
|
||||
}
|
||||
|
||||
//******************* Offerwall API *******************//
|
||||
|
||||
public void showOfferwall ()
|
||||
{
|
||||
getBridge ().Call ("showOfferwall");
|
||||
}
|
||||
|
||||
public void showOfferwall (string placementName)
|
||||
{
|
||||
getBridge ().Call ("showOfferwall", placementName);
|
||||
}
|
||||
|
||||
public void getOfferwallCredits ()
|
||||
{
|
||||
getBridge ().Call ("getOfferwallCredits");
|
||||
}
|
||||
|
||||
public bool isOfferwallAvailable ()
|
||||
{
|
||||
return getBridge ().Call<bool> ("isOfferwallAvailable");
|
||||
}
|
||||
|
||||
//******************* Banner API *******************//
|
||||
|
||||
public void loadBanner (IronSourceBannerSize size, IronSourceBannerPosition position)
|
||||
{
|
||||
loadBanner(size, position, "");
|
||||
}
|
||||
|
||||
public void loadBanner (IronSourceBannerSize size, IronSourceBannerPosition position, string placementName)
|
||||
{
|
||||
getBridge().Call("loadBanner", size.Description, (int)size.Width, (int)size.Height, (int)position, placementName);
|
||||
}
|
||||
|
||||
public void destroyBanner()
|
||||
{
|
||||
getBridge ().Call ("destroyBanner");
|
||||
}
|
||||
|
||||
public void displayBanner()
|
||||
{
|
||||
getBridge ().Call ("displayBanner");
|
||||
}
|
||||
|
||||
public void hideBanner()
|
||||
{
|
||||
getBridge ().Call ("hideBanner");
|
||||
}
|
||||
|
||||
public bool isBannerPlacementCapped(string placementName)
|
||||
{
|
||||
return getBridge ().Call<bool> ("isBannerPlacementCapped", placementName);
|
||||
}
|
||||
|
||||
public void setSegment(IronSourceSegment segment)
|
||||
{
|
||||
Dictionary <string,string> dict = segment.getSegmentAsDict ();
|
||||
string json = IronSourceJSON.Json.Serialize (dict);
|
||||
getBridge ().Call ("setSegment", json);
|
||||
}
|
||||
|
||||
public void setConsent(bool consent)
|
||||
{
|
||||
getBridge().Call("setConsent",consent);
|
||||
}
|
||||
|
||||
//******************* ConsentView API *******************//
|
||||
|
||||
public void loadConsentViewWithType(string consentViewType)
|
||||
{
|
||||
Debug.Log("Unsupported Platform");
|
||||
}
|
||||
|
||||
public void showConsentViewWithType(string consentViewType)
|
||||
{
|
||||
Debug.Log("Unsupported Platform");
|
||||
}
|
||||
|
||||
//******************* ILRD API *******************//
|
||||
|
||||
public void setAdRevenueData(string dataSource, Dictionary<string, string> impressionData)
|
||||
{
|
||||
string json = IronSourceJSON.Json.Serialize(impressionData);
|
||||
getBridge().Call("setAdRevenueData", dataSource, json);
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 383e513a18bd7449994e83f8f434e950
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
|
@ -0,0 +1,317 @@
|
|||
using UnityEngine;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System;
|
||||
|
||||
public class IronSource : IronSourceIAgent
|
||||
{
|
||||
private IronSourceIAgent _platformAgent;
|
||||
private static IronSource _instance;
|
||||
private const string UNITY_PLUGIN_VERSION = "7.1.12-r";
|
||||
private static bool isUnsupportedPlatform;
|
||||
|
||||
private IronSource()
|
||||
{
|
||||
if (!isUnsupportedPlatform)
|
||||
{
|
||||
#if UNITY_EDITOR || UNITY_STANDALONE
|
||||
_platformAgent = new UnsupportedPlatformAgent();
|
||||
#elif (UNITY_IPHONE || UNITY_IOS)
|
||||
_platformAgent = new iOSAgent();
|
||||
#elif UNITY_ANDROID
|
||||
_platformAgent = new AndroidAgent ();
|
||||
#endif
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
_platformAgent = new UnsupportedPlatformAgent();
|
||||
}
|
||||
var type = typeof(IronSourceEvents);
|
||||
var mgr = new GameObject("IronSourceEvents", type).GetComponent<IronSourceEvents>(); // Creates IronSourceEvents gameObject
|
||||
}
|
||||
|
||||
#region IronSourceIAgent implementation
|
||||
public static IronSource Agent {
|
||||
get {
|
||||
if (_instance == null) {
|
||||
_instance = new IronSource();
|
||||
}
|
||||
return _instance;
|
||||
}
|
||||
}
|
||||
|
||||
public static string pluginVersion()
|
||||
{
|
||||
return UNITY_PLUGIN_VERSION;
|
||||
}
|
||||
|
||||
public static string unityVersion()
|
||||
{
|
||||
return Application.unityVersion;
|
||||
}
|
||||
|
||||
public static void setUnsupportedPlatform()
|
||||
{
|
||||
isUnsupportedPlatform = true;
|
||||
}
|
||||
|
||||
//******************* Base API *******************//
|
||||
|
||||
public void onApplicationPause(bool pause)
|
||||
{
|
||||
_platformAgent.onApplicationPause(pause);
|
||||
}
|
||||
|
||||
public void setMediationSegment(string segment)
|
||||
{
|
||||
_platformAgent.setMediationSegment(segment);
|
||||
}
|
||||
|
||||
public string getAdvertiserId()
|
||||
{
|
||||
return _platformAgent.getAdvertiserId();
|
||||
}
|
||||
|
||||
public void validateIntegration()
|
||||
{
|
||||
_platformAgent.validateIntegration();
|
||||
}
|
||||
|
||||
public void shouldTrackNetworkState(bool track)
|
||||
{
|
||||
_platformAgent.shouldTrackNetworkState(track);
|
||||
}
|
||||
|
||||
public bool setDynamicUserId(string dynamicUserId)
|
||||
{
|
||||
return _platformAgent.setDynamicUserId(dynamicUserId);
|
||||
}
|
||||
|
||||
public void setAdaptersDebug(bool enabled)
|
||||
{
|
||||
_platformAgent.setAdaptersDebug(enabled);
|
||||
}
|
||||
|
||||
public void setMetaData(string key, string value)
|
||||
{
|
||||
_platformAgent.setMetaData(key, value);
|
||||
}
|
||||
|
||||
public void setMetaData(string key, params string[] values)
|
||||
{
|
||||
_platformAgent.setMetaData(key, values);
|
||||
}
|
||||
|
||||
public int? getConversionValue()
|
||||
{
|
||||
return _platformAgent.getConversionValue();
|
||||
}
|
||||
|
||||
//******************* SDK Init *******************//
|
||||
|
||||
public void setUserId (string userId)
|
||||
{
|
||||
_platformAgent.setUserId (userId);
|
||||
}
|
||||
|
||||
public void init (string appKey)
|
||||
{
|
||||
_platformAgent.init (appKey);
|
||||
}
|
||||
|
||||
public void init (string appKey, params string[] adUnits)
|
||||
{
|
||||
_platformAgent.init (appKey, adUnits);
|
||||
}
|
||||
|
||||
public void initISDemandOnly (string appKey, params string[] adUnits)
|
||||
{
|
||||
_platformAgent.initISDemandOnly (appKey, adUnits);
|
||||
}
|
||||
|
||||
//******************* RewardedVideo API *******************//
|
||||
|
||||
public void showRewardedVideo ()
|
||||
{
|
||||
_platformAgent.showRewardedVideo ();
|
||||
}
|
||||
|
||||
public void showRewardedVideo (string placementName)
|
||||
{
|
||||
_platformAgent.showRewardedVideo (placementName);
|
||||
}
|
||||
|
||||
public IronSourcePlacement getPlacementInfo (string placementName)
|
||||
{
|
||||
return _platformAgent.getPlacementInfo (placementName);
|
||||
}
|
||||
|
||||
public bool isRewardedVideoAvailable ()
|
||||
{
|
||||
return _platformAgent.isRewardedVideoAvailable ();
|
||||
}
|
||||
|
||||
public bool isRewardedVideoPlacementCapped (string placementName)
|
||||
{
|
||||
return _platformAgent.isRewardedVideoPlacementCapped (placementName);
|
||||
}
|
||||
|
||||
public void setRewardedVideoServerParams(Dictionary<string, string> parameters)
|
||||
{
|
||||
_platformAgent.setRewardedVideoServerParams(parameters);
|
||||
}
|
||||
|
||||
public void clearRewardedVideoServerParams()
|
||||
{
|
||||
_platformAgent.clearRewardedVideoServerParams();
|
||||
}
|
||||
|
||||
//******************* RewardedVideo DemandOnly API *******************//
|
||||
|
||||
public void showISDemandOnlyRewardedVideo (string instanceId)
|
||||
{
|
||||
_platformAgent.showISDemandOnlyRewardedVideo(instanceId);
|
||||
}
|
||||
|
||||
public void loadISDemandOnlyRewardedVideo (string instanceId)
|
||||
{
|
||||
_platformAgent.loadISDemandOnlyRewardedVideo(instanceId);
|
||||
}
|
||||
|
||||
public bool isISDemandOnlyRewardedVideoAvailable (string instanceId)
|
||||
{
|
||||
return _platformAgent.isISDemandOnlyRewardedVideoAvailable(instanceId);
|
||||
}
|
||||
|
||||
//******************* Interstitial API *******************//
|
||||
|
||||
public void loadInterstitial ()
|
||||
{
|
||||
_platformAgent.loadInterstitial ();
|
||||
}
|
||||
|
||||
public void showInterstitial ()
|
||||
{
|
||||
_platformAgent.showInterstitial ();
|
||||
}
|
||||
|
||||
public void showInterstitial (string placementName)
|
||||
{
|
||||
_platformAgent.showInterstitial (placementName);
|
||||
}
|
||||
|
||||
public bool isInterstitialReady ()
|
||||
{
|
||||
return _platformAgent.isInterstitialReady ();
|
||||
}
|
||||
|
||||
public bool isInterstitialPlacementCapped (string placementName)
|
||||
{
|
||||
return _platformAgent.isInterstitialPlacementCapped (placementName);
|
||||
}
|
||||
|
||||
//******************* Interstitial DemandOnly API *******************//
|
||||
|
||||
public void loadISDemandOnlyInterstitial (string instanceId)
|
||||
{
|
||||
_platformAgent.loadISDemandOnlyInterstitial(instanceId);
|
||||
}
|
||||
|
||||
public void showISDemandOnlyInterstitial (string instanceId)
|
||||
{
|
||||
_platformAgent.showISDemandOnlyInterstitial(instanceId);
|
||||
}
|
||||
|
||||
public bool isISDemandOnlyInterstitialReady (string instanceId)
|
||||
{
|
||||
return _platformAgent.isISDemandOnlyInterstitialReady(instanceId);
|
||||
}
|
||||
|
||||
//******************* Offerwall API *******************//
|
||||
|
||||
public void showOfferwall ()
|
||||
{
|
||||
_platformAgent.showOfferwall ();
|
||||
}
|
||||
|
||||
public void showOfferwall (string placementName)
|
||||
{
|
||||
_platformAgent.showOfferwall (placementName);
|
||||
}
|
||||
|
||||
public void getOfferwallCredits ()
|
||||
{
|
||||
_platformAgent.getOfferwallCredits ();
|
||||
}
|
||||
|
||||
public bool isOfferwallAvailable ()
|
||||
{
|
||||
return _platformAgent.isOfferwallAvailable ();
|
||||
}
|
||||
|
||||
//******************* Banner API *******************//
|
||||
|
||||
public void loadBanner (IronSourceBannerSize size, IronSourceBannerPosition position)
|
||||
{
|
||||
_platformAgent.loadBanner (size, position);
|
||||
}
|
||||
|
||||
public void loadBanner (IronSourceBannerSize size, IronSourceBannerPosition position, string placementName)
|
||||
{
|
||||
_platformAgent.loadBanner (size, position, placementName);
|
||||
}
|
||||
|
||||
public void destroyBanner()
|
||||
{
|
||||
_platformAgent.destroyBanner ();
|
||||
}
|
||||
|
||||
public void displayBanner()
|
||||
{
|
||||
_platformAgent.displayBanner ();
|
||||
}
|
||||
|
||||
public void hideBanner()
|
||||
{
|
||||
_platformAgent.hideBanner ();
|
||||
}
|
||||
|
||||
|
||||
public bool isBannerPlacementCapped(string placementName)
|
||||
{
|
||||
return _platformAgent.isBannerPlacementCapped (placementName);
|
||||
|
||||
}
|
||||
|
||||
public void setSegment(IronSourceSegment segment)
|
||||
{
|
||||
_platformAgent.setSegment (segment);
|
||||
}
|
||||
|
||||
public void setConsent(bool consent)
|
||||
{
|
||||
_platformAgent.setConsent(consent);
|
||||
}
|
||||
|
||||
//******************* ConsentView API *******************//
|
||||
|
||||
public void loadConsentViewWithType(string consentViewType)
|
||||
{
|
||||
_platformAgent.loadConsentViewWithType(consentViewType);
|
||||
}
|
||||
|
||||
public void showConsentViewWithType(string consentViewType)
|
||||
{
|
||||
_platformAgent.showConsentViewWithType(consentViewType);
|
||||
}
|
||||
|
||||
//******************* ILRD API *******************//
|
||||
|
||||
public void setAdRevenueData(string dataSource, Dictionary<string, string> impressionData)
|
||||
{
|
||||
_platformAgent.setAdRevenueData( dataSource , impressionData);
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 6ec69520ef1aa4f74b7695ff3da85a8b
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
|
@ -0,0 +1,127 @@
|
|||
using System.Runtime.InteropServices;
|
||||
using UnityEngine;
|
||||
using System.Collections;
|
||||
|
||||
using System.Collections.Generic;
|
||||
|
||||
public class IronSourceConfig
|
||||
{
|
||||
private const string unsupportedPlatformStr = "Unsupported Platform";
|
||||
private static IronSourceConfig _instance;
|
||||
|
||||
public static IronSourceConfig Instance {
|
||||
get {
|
||||
if (_instance == null) {
|
||||
_instance = new IronSourceConfig ();
|
||||
}
|
||||
return _instance;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#if UNITY_ANDROID && !UNITY_EDITOR
|
||||
private static AndroidJavaObject _androidBridge;
|
||||
private readonly static string AndroidBridge = "com.ironsource.unity.androidbridge.AndroidBridge";
|
||||
|
||||
public IronSourceConfig ()
|
||||
{
|
||||
using (var pluginClass = new AndroidJavaClass( AndroidBridge ))
|
||||
_androidBridge = pluginClass.CallStatic<AndroidJavaObject> ("getInstance");
|
||||
}
|
||||
|
||||
//Setters
|
||||
public void setLanguage (string language)
|
||||
{
|
||||
_androidBridge.Call ("setLanguage", language);
|
||||
}
|
||||
|
||||
public void setClientSideCallbacks (bool status)
|
||||
{
|
||||
_androidBridge.Call ("setClientSideCallbacks", status);
|
||||
}
|
||||
|
||||
public void setRewardedVideoCustomParams (Dictionary<string,string> rewardedVideoCustomParams)
|
||||
{
|
||||
string json = IronSourceJSON.Json.Serialize (rewardedVideoCustomParams);
|
||||
_androidBridge.Call ("setRewardedVideoCustomParams", json);
|
||||
}
|
||||
|
||||
public void setOfferwallCustomParams (Dictionary<string,string> offerwallCustomParams)
|
||||
{
|
||||
string json = IronSourceJSON.Json.Serialize (offerwallCustomParams);
|
||||
_androidBridge.Call ("setOfferwallCustomParams", json);
|
||||
}
|
||||
|
||||
|
||||
#elif (UNITY_IPHONE || UNITY_IOS) && !UNITY_EDITOR
|
||||
[DllImport("__Internal")]
|
||||
private static extern void CFSetLanguage (string language);
|
||||
|
||||
[DllImport("__Internal")]
|
||||
private static extern void CFSetClientSideCallbacks (bool useClientSideCallbacks);
|
||||
|
||||
[DllImport("__Internal")]
|
||||
private static extern void CFSetRewardedVideoCustomParams (string rewardedVideoCustomParams);
|
||||
|
||||
[DllImport("__Internal")]
|
||||
private static extern void CFSetOfferwallCustomParams (string offerwallCustomParams);
|
||||
|
||||
|
||||
public void setLanguage (string language)
|
||||
{
|
||||
CFSetLanguage (language);
|
||||
}
|
||||
|
||||
public void setClientSideCallbacks (bool status)
|
||||
{
|
||||
CFSetClientSideCallbacks (status);
|
||||
}
|
||||
|
||||
public void setRewardedVideoCustomParams (Dictionary<string,string> rewardedVideoCustomParams)
|
||||
{
|
||||
string json = IronSourceJSON.Json.Serialize (rewardedVideoCustomParams);
|
||||
CFSetRewardedVideoCustomParams (json);
|
||||
}
|
||||
|
||||
public void setOfferwallCustomParams (Dictionary<string,string> offerwallCustomParams)
|
||||
{
|
||||
string json = IronSourceJSON.Json.Serialize (offerwallCustomParams);
|
||||
CFSetOfferwallCustomParams (json);
|
||||
}
|
||||
|
||||
public IronSourceConfig ()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
|
||||
#else
|
||||
public void setLanguage (string language)
|
||||
{
|
||||
Debug.Log (unsupportedPlatformStr);
|
||||
}
|
||||
|
||||
public void setClientSideCallbacks (bool status)
|
||||
{
|
||||
Debug.Log (unsupportedPlatformStr);
|
||||
}
|
||||
|
||||
public void setRewardedVideoCustomParams (Dictionary<string,string> rewardedVideoCustomParams)
|
||||
{
|
||||
Debug.Log (unsupportedPlatformStr);
|
||||
}
|
||||
|
||||
public void setOfferwallCustomParams (Dictionary<string,string> offerwallCustomParams)
|
||||
{
|
||||
Debug.Log (unsupportedPlatformStr);
|
||||
}
|
||||
|
||||
public IronSourceConfig ()
|
||||
{
|
||||
Debug.Log (unsupportedPlatformStr);
|
||||
}
|
||||
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
fileFormatVersion: 2
|
||||
guid: e25760c5c158c41b4aa31bffb0209769
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
|
@ -0,0 +1,35 @@
|
|||
public static class IronSourceConstants
|
||||
{
|
||||
public const string interstitialBridgeListenerClass = "com.ironsource.unity.androidbridge.UnityInterstitialListener";
|
||||
public const string rewardedVideoBridgeListenerClass = "com.ironsource.unity.androidbridge.UnityRewardedVideoListener";
|
||||
public const string bridgeClass = "com.ironsource.unity.androidbridge.AndroidBridge";
|
||||
public const string offerwallBridgeListenerClass = "com.ironsource.unity.androidbridge.UnityOfferwallListener";
|
||||
public const string bannerBridgeListenerClass = "com.ironsource.unity.androidbridge.UnityBannerListener";
|
||||
public const string segmentBridgeListenerClass = "com.ironsource.unity.androidbridge.UnitySegmentListener";
|
||||
public const string ERROR_CODE = "error_code";
|
||||
public const string ERROR_DESCRIPTION = "error_description";
|
||||
public const string INSTANCE_ID_KEY = "instanceId";
|
||||
public const string PLACEMENT_KEY = "placement";
|
||||
public const string IMPRESSION_DATA_KEY_AUCTION_ID = "auctionId";
|
||||
public const string IMPRESSION_DATA_KEY_AD_UNIT = "adUnit";
|
||||
public const string IMPRESSION_DATA_KEY_COUNTRY = "country";
|
||||
public const string IMPRESSION_DATA_KEY_ABTEST = "ab";
|
||||
public const string IMPRESSION_DATA_KEY_SEGMENT_NAME = "segmentName";
|
||||
public const string IMPRESSION_DATA_KEY_PLACEMENT = "placement";
|
||||
public const string IMPRESSION_DATA_KEY_AD_NETWORK = "adNetwork";
|
||||
public const string IMPRESSION_DATA_KEY_INSTANCE_NAME = "instanceName";
|
||||
public const string IMPRESSION_DATA_KEY_INSTANCE_ID = "instanceId";
|
||||
public const string IMPRESSION_DATA_KEY_REVENUE = "revenue";
|
||||
public const string IMPRESSION_DATA_KEY_PRECISION = "precision";
|
||||
public const string IMPRESSION_DATA_KEY_LIFETIME_REVENUE = "lifetimeRevenue";
|
||||
public const string IMPRESSION_DATA_KEY_ENCRYPTED_CPM = "encryptedCPM";
|
||||
public const string IMPRESSION_DATA_KEY_CONVERSION_VALUE= "conversionValue";
|
||||
public const string GENDER_MALE = "male";
|
||||
public const string GENDER_FEMALE = "female";
|
||||
public const string GENDER_UNKNOWN = "unknown";
|
||||
|
||||
public const string IRONSOURCE_MEDIATION_SETTING_NAME = "IronSourceMediationSettings";
|
||||
public const string IRONSOURCE_MEDIATED_NETWORK_SETTING_NAME = "IronSourceMediatedNetworkSettings";
|
||||
public const string IRONSOURCE_RESOURCES_PATH = "Assets/IronSource/Resources";
|
||||
public const string IRONSOURCE_SKAN_ID_KEY = "su67r6k2v3.skadnetwork";
|
||||
}
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 86d04d1d517d942e79c31e208285c06a
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
|
@ -0,0 +1,35 @@
|
|||
|
||||
using System;
|
||||
|
||||
public class IronSourceError
|
||||
{
|
||||
private string description;
|
||||
private int code;
|
||||
|
||||
public int getErrorCode ()
|
||||
{
|
||||
return code;
|
||||
}
|
||||
|
||||
public string getDescription ()
|
||||
{
|
||||
return description;
|
||||
}
|
||||
|
||||
public int getCode ()
|
||||
{
|
||||
return code;
|
||||
}
|
||||
|
||||
public IronSourceError (int errorCode, string errorDescription)
|
||||
{
|
||||
code = errorCode;
|
||||
description = errorDescription;
|
||||
}
|
||||
|
||||
public override string ToString ()
|
||||
{
|
||||
return code + " : " + description;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
fileFormatVersion: 2
|
||||
guid: c3eeee77c4aea4a979d85dcb1630fbe4
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,11 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 06a7a5a9d456c4634864ec18b18f72dc
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
|
@ -0,0 +1,176 @@
|
|||
using System.Collections.Generic;
|
||||
|
||||
public interface IronSourceIAgent
|
||||
{
|
||||
//******************* Base API *******************//
|
||||
|
||||
void onApplicationPause (bool pause);
|
||||
|
||||
void setMediationSegment (string segment);
|
||||
|
||||
string getAdvertiserId ();
|
||||
|
||||
void validateIntegration ();
|
||||
|
||||
void shouldTrackNetworkState (bool track);
|
||||
|
||||
bool setDynamicUserId (string dynamicUserId);
|
||||
|
||||
void setAdaptersDebug(bool enabled);
|
||||
|
||||
void setMetaData(string key, string value);
|
||||
|
||||
void setMetaData(string key, params string[] values);
|
||||
|
||||
int? getConversionValue();
|
||||
|
||||
//******************* SDK Init *******************//
|
||||
|
||||
void setUserId (string userId);
|
||||
|
||||
void init (string appKey);
|
||||
|
||||
void init (string appKey, params string[] adUnits);
|
||||
|
||||
void initISDemandOnly (string appKey, params string[] adUnits);
|
||||
|
||||
//******************* RewardedVideo API *******************//
|
||||
|
||||
void showRewardedVideo ();
|
||||
|
||||
void showRewardedVideo (string placementName);
|
||||
|
||||
bool isRewardedVideoAvailable ();
|
||||
|
||||
bool isRewardedVideoPlacementCapped (string placementName);
|
||||
|
||||
IronSourcePlacement getPlacementInfo (string name);
|
||||
|
||||
void setRewardedVideoServerParams(Dictionary<string, string> parameters);
|
||||
|
||||
void clearRewardedVideoServerParams();
|
||||
|
||||
//******************* RewardedVideo DemandOnly API *******************//
|
||||
|
||||
void showISDemandOnlyRewardedVideo (string instanceId);
|
||||
|
||||
void loadISDemandOnlyRewardedVideo (string instanceId);
|
||||
|
||||
bool isISDemandOnlyRewardedVideoAvailable (string instanceId);
|
||||
|
||||
//******************* Interstitial API *******************//
|
||||
|
||||
void loadInterstitial ();
|
||||
|
||||
void showInterstitial ();
|
||||
|
||||
void showInterstitial (string placementName);
|
||||
|
||||
bool isInterstitialReady ();
|
||||
|
||||
bool isInterstitialPlacementCapped (string placementName);
|
||||
|
||||
//******************* Interstitial DemandOnly API *******************//
|
||||
|
||||
void loadISDemandOnlyInterstitial (string instanceId);
|
||||
|
||||
void showISDemandOnlyInterstitial (string instanceId);
|
||||
|
||||
bool isISDemandOnlyInterstitialReady (string instanceId);
|
||||
|
||||
//******************* Offerwall API *******************//
|
||||
|
||||
void showOfferwall ();
|
||||
|
||||
void showOfferwall (string placementName);
|
||||
|
||||
bool isOfferwallAvailable ();
|
||||
|
||||
void getOfferwallCredits ();
|
||||
|
||||
//******************* Banner API *******************//
|
||||
|
||||
void loadBanner (IronSourceBannerSize size, IronSourceBannerPosition position);
|
||||
|
||||
void loadBanner (IronSourceBannerSize size, IronSourceBannerPosition position, string placementName);
|
||||
|
||||
void destroyBanner();
|
||||
|
||||
void displayBanner();
|
||||
|
||||
void hideBanner();
|
||||
|
||||
bool isBannerPlacementCapped(string placementName);
|
||||
|
||||
void setSegment(IronSourceSegment segment);
|
||||
|
||||
void setConsent(bool consent);
|
||||
|
||||
//******************* ConsentView API *******************//
|
||||
|
||||
void loadConsentViewWithType(string consentViewType);
|
||||
|
||||
void showConsentViewWithType(string consentViewType);
|
||||
|
||||
//******************* ILRD API *******************//
|
||||
|
||||
void setAdRevenueData(string dataSource, Dictionary<string, string> impressionData);
|
||||
}
|
||||
|
||||
public static class dataSource
|
||||
{
|
||||
public static string MOPUB { get { return "MoPub"; } }
|
||||
|
||||
}
|
||||
|
||||
|
||||
public static class IronSourceAdUnits
|
||||
{
|
||||
public static string REWARDED_VIDEO { get { return "rewardedvideo"; } }
|
||||
|
||||
public static string INTERSTITIAL { get { return "interstitial"; } }
|
||||
|
||||
public static string OFFERWALL { get { return "offerwall"; } }
|
||||
|
||||
public static string BANNER { get { return "banner"; } }
|
||||
}
|
||||
|
||||
public class IronSourceBannerSize
|
||||
{
|
||||
private int width;
|
||||
private int height;
|
||||
private string description;
|
||||
|
||||
public static IronSourceBannerSize BANNER = new IronSourceBannerSize("BANNER");
|
||||
public static IronSourceBannerSize LARGE = new IronSourceBannerSize("LARGE");
|
||||
public static IronSourceBannerSize RECTANGLE = new IronSourceBannerSize("RECTANGLE");
|
||||
public static IronSourceBannerSize SMART = new IronSourceBannerSize("SMART");
|
||||
|
||||
private IronSourceBannerSize() {
|
||||
|
||||
}
|
||||
|
||||
public IronSourceBannerSize(int width, int height)
|
||||
{
|
||||
this.width = width;
|
||||
this.height = height;
|
||||
this.description = "CUSTOM";
|
||||
}
|
||||
|
||||
public IronSourceBannerSize(string description)
|
||||
{
|
||||
this.description = description;
|
||||
this.width = 0;
|
||||
this.height = 0;
|
||||
}
|
||||
|
||||
public string Description { get { return description; } }
|
||||
public int Width { get { return width; } }
|
||||
public int Height { get { return height; } }
|
||||
};
|
||||
|
||||
public enum IronSourceBannerPosition
|
||||
{
|
||||
TOP = 1,
|
||||
BOTTOM = 2
|
||||
};
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
fileFormatVersion: 2
|
||||
guid: a69a6174c46124e04b4b27ac7fbdd78d
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
|
@ -0,0 +1,127 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using UnityEngine;
|
||||
|
||||
public class IronSourceImpressionData
|
||||
{
|
||||
|
||||
public readonly string auctionId;
|
||||
public readonly string adUnit;
|
||||
public readonly string country;
|
||||
public readonly string ab;
|
||||
public readonly string segmentName;
|
||||
public readonly string placement;
|
||||
public readonly string adNetwork;
|
||||
public readonly string instanceName;
|
||||
public readonly string instanceId;
|
||||
public readonly double? revenue;
|
||||
public readonly string precision;
|
||||
public readonly double? lifetimeRevenue;
|
||||
public readonly string encryptedCPM;
|
||||
public readonly int? conversionValue;
|
||||
public readonly string allData;
|
||||
|
||||
|
||||
public IronSourceImpressionData(string json)
|
||||
{
|
||||
if (json != null)
|
||||
{
|
||||
try
|
||||
{
|
||||
object obj;
|
||||
double parsedDouble;
|
||||
int parsedInt;
|
||||
allData = json;
|
||||
// Retrieve a CultureInfo object.
|
||||
CultureInfo invCulture = CultureInfo.InvariantCulture;
|
||||
Dictionary<string, object> jsonDic = IronSourceJSON.Json.Deserialize(json) as Dictionary<string, object>;
|
||||
if (jsonDic.TryGetValue(IronSourceConstants.IMPRESSION_DATA_KEY_AUCTION_ID, out obj) && obj != null)
|
||||
{
|
||||
auctionId = obj.ToString();
|
||||
}
|
||||
if (jsonDic.TryGetValue(IronSourceConstants.IMPRESSION_DATA_KEY_AD_UNIT, out obj) && obj != null)
|
||||
{
|
||||
adUnit = obj.ToString();
|
||||
}
|
||||
if (jsonDic.TryGetValue(IronSourceConstants.IMPRESSION_DATA_KEY_COUNTRY, out obj) && obj != null)
|
||||
{
|
||||
country = obj.ToString();
|
||||
}
|
||||
if (jsonDic.TryGetValue(IronSourceConstants.IMPRESSION_DATA_KEY_ABTEST, out obj) && obj != null)
|
||||
{
|
||||
ab = obj.ToString();
|
||||
}
|
||||
if (jsonDic.TryGetValue(IronSourceConstants.IMPRESSION_DATA_KEY_SEGMENT_NAME, out obj) && obj != null)
|
||||
{
|
||||
segmentName = obj.ToString();
|
||||
}
|
||||
if (jsonDic.TryGetValue(IronSourceConstants.IMPRESSION_DATA_KEY_PLACEMENT, out obj) && obj != null)
|
||||
{
|
||||
placement = obj.ToString();
|
||||
}
|
||||
if (jsonDic.TryGetValue(IronSourceConstants.IMPRESSION_DATA_KEY_AD_NETWORK, out obj) && obj != null)
|
||||
{
|
||||
adNetwork = obj.ToString();
|
||||
}
|
||||
if (jsonDic.TryGetValue(IronSourceConstants.IMPRESSION_DATA_KEY_INSTANCE_NAME, out obj) && obj != null)
|
||||
{
|
||||
instanceName = obj.ToString();
|
||||
}
|
||||
if (jsonDic.TryGetValue(IronSourceConstants.INSTANCE_ID_KEY, out obj) && obj != null)
|
||||
{
|
||||
instanceId = obj.ToString();
|
||||
}
|
||||
if (jsonDic.TryGetValue(IronSourceConstants.IMPRESSION_DATA_KEY_PRECISION, out obj) && obj != null)
|
||||
{
|
||||
precision = obj.ToString();
|
||||
}
|
||||
if (jsonDic.TryGetValue(IronSourceConstants.IMPRESSION_DATA_KEY_ENCRYPTED_CPM, out obj) && obj != null)
|
||||
{
|
||||
encryptedCPM = obj.ToString();
|
||||
}
|
||||
|
||||
if (jsonDic.TryGetValue(IronSourceConstants.IMPRESSION_DATA_KEY_REVENUE, out obj) && obj != null && double.TryParse(string.Format(invCulture, "{0}", obj), NumberStyles.Any, invCulture, out parsedDouble))
|
||||
{
|
||||
revenue = parsedDouble;
|
||||
}
|
||||
|
||||
if (jsonDic.TryGetValue(IronSourceConstants.IMPRESSION_DATA_KEY_LIFETIME_REVENUE, out obj) && obj != null && double.TryParse(string.Format(invCulture,"{0}",obj), NumberStyles.Any, invCulture, out parsedDouble))
|
||||
{
|
||||
lifetimeRevenue = parsedDouble;
|
||||
}
|
||||
|
||||
if (jsonDic.TryGetValue(IronSourceConstants.IMPRESSION_DATA_KEY_CONVERSION_VALUE, out obj) && obj != null && int.TryParse(string.Format(invCulture, "{0}", obj), NumberStyles.Any, invCulture, out parsedInt))
|
||||
{
|
||||
conversionValue = parsedInt;
|
||||
}
|
||||
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Debug.Log("error parsing impression " + ex.ToString());
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return "IronSourceImpressionData{" +
|
||||
"auctionId='" + auctionId + '\'' +
|
||||
", adUnit='" + adUnit + '\'' +
|
||||
", country='" + country + '\'' +
|
||||
", ab='" + ab + '\'' +
|
||||
", segmentName='" + segmentName + '\'' +
|
||||
", placement='" + placement + '\'' +
|
||||
", adNetwork='" + adNetwork + '\'' +
|
||||
", instanceName='" + instanceName + '\'' +
|
||||
", instanceId='" + instanceId + '\'' +
|
||||
", revenue=" + revenue +
|
||||
", precision='" + precision + '\'' +
|
||||
", lifetimeRevenue=" + lifetimeRevenue +
|
||||
", encryptedCPM='" + encryptedCPM + '\'' +
|
||||
", conversionValue=" + conversionValue +
|
||||
'}';
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 7ab0e9e995e4a4024abb4cee85c301ba
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
|
@ -0,0 +1,43 @@
|
|||
using UnityEngine;
|
||||
|
||||
public class IronSourceInitilizer
|
||||
{
|
||||
#if UNITY_IOS || UNITY_ANDROID
|
||||
[RuntimeInitializeOnLoadMethod]
|
||||
static void Initilize()
|
||||
{
|
||||
var developerSettings = Resources.Load<IronSourceMediationSettings>(IronSourceConstants.IRONSOURCE_MEDIATION_SETTING_NAME);
|
||||
if (developerSettings != null)
|
||||
{
|
||||
#if UNITY_ANDROID
|
||||
string appKey = developerSettings.AndroidAppKey;
|
||||
#elif UNITY_IOS
|
||||
string appKey = developerSettings.IOSAppKey;
|
||||
#endif
|
||||
if (developerSettings.EnableIronsourceSDKInitAPI == true)
|
||||
{
|
||||
if (appKey.Equals(string.Empty))
|
||||
{
|
||||
Debug.LogWarning("IronSourceInitilizer Cannot init without AppKey");
|
||||
}
|
||||
else
|
||||
{
|
||||
IronSource.Agent.init(appKey);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (developerSettings.EnableAdapterDebug)
|
||||
{
|
||||
IronSource.Agent.setAdaptersDebug(true);
|
||||
}
|
||||
|
||||
if (developerSettings.EnableIntegrationHelper)
|
||||
{
|
||||
IronSource.Agent.validateIntegration();
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
fileFormatVersion: 2
|
||||
guid: f3e8e12247da34eafb182ebdfb06c10e
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
|
@ -0,0 +1,495 @@
|
|||
/*
|
||||
* Based on the miniJSON by Calvin Rien
|
||||
*/
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
|
||||
namespace IronSourceJSON
|
||||
{
|
||||
public static class Json
|
||||
{
|
||||
public static object Deserialize (string json)
|
||||
{
|
||||
if (json == null) {
|
||||
return null;
|
||||
}
|
||||
return Parser.Parse (json);
|
||||
}
|
||||
|
||||
sealed class Parser : IDisposable
|
||||
{
|
||||
const string WHITE_SPACE = " \t\n\r";
|
||||
const string WORD_BREAK = " \t\n\r{}[],:\"";
|
||||
|
||||
enum TOKEN
|
||||
{
|
||||
NONE,
|
||||
CURLY_OPEN,
|
||||
CURLY_CLOSE,
|
||||
SQUARED_OPEN,
|
||||
SQUARED_CLOSE,
|
||||
COLON,
|
||||
COMMA,
|
||||
STRING,
|
||||
NUMBER,
|
||||
TRUE,
|
||||
FALSE,
|
||||
NULL
|
||||
}
|
||||
;
|
||||
|
||||
StringReader json;
|
||||
|
||||
Parser (string jsonString)
|
||||
{
|
||||
json = new StringReader (jsonString);
|
||||
}
|
||||
|
||||
public static object Parse (string jsonString)
|
||||
{
|
||||
using (var instance = new Parser(jsonString)) {
|
||||
return instance.ParseValue ();
|
||||
}
|
||||
}
|
||||
|
||||
public void Dispose ()
|
||||
{
|
||||
json.Dispose ();
|
||||
json = null;
|
||||
}
|
||||
|
||||
Dictionary<string, object> ParseObject ()
|
||||
{
|
||||
Dictionary<string, object> table = new Dictionary<string, object> ();
|
||||
|
||||
// ditch opening brace
|
||||
json.Read ();
|
||||
|
||||
// {
|
||||
while (true) {
|
||||
switch (NextToken) {
|
||||
case TOKEN.NONE:
|
||||
return null;
|
||||
case TOKEN.COMMA:
|
||||
continue;
|
||||
case TOKEN.CURLY_CLOSE:
|
||||
return table;
|
||||
default:
|
||||
// name
|
||||
string name = ParseString ();
|
||||
if (name == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
// :
|
||||
if (NextToken != TOKEN.COLON) {
|
||||
return null;
|
||||
}
|
||||
// ditch the colon
|
||||
json.Read ();
|
||||
|
||||
// value
|
||||
table [name] = ParseValue ();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
List<object> ParseArray ()
|
||||
{
|
||||
List<object> array = new List<object> ();
|
||||
|
||||
// ditch opening bracket
|
||||
json.Read ();
|
||||
|
||||
// [
|
||||
var parsing = true;
|
||||
while (parsing) {
|
||||
TOKEN nextToken = NextToken;
|
||||
|
||||
switch (nextToken) {
|
||||
case TOKEN.NONE:
|
||||
return null;
|
||||
case TOKEN.COMMA:
|
||||
continue;
|
||||
case TOKEN.SQUARED_CLOSE:
|
||||
parsing = false;
|
||||
break;
|
||||
default:
|
||||
object value = ParseByToken (nextToken);
|
||||
|
||||
array.Add (value);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return array;
|
||||
}
|
||||
|
||||
object ParseValue ()
|
||||
{
|
||||
TOKEN nextToken = NextToken;
|
||||
return ParseByToken (nextToken);
|
||||
}
|
||||
|
||||
object ParseByToken (TOKEN token)
|
||||
{
|
||||
switch (token) {
|
||||
case TOKEN.STRING:
|
||||
return ParseString ();
|
||||
case TOKEN.NUMBER:
|
||||
return ParseNumber ();
|
||||
case TOKEN.CURLY_OPEN:
|
||||
return ParseObject ();
|
||||
case TOKEN.SQUARED_OPEN:
|
||||
return ParseArray ();
|
||||
case TOKEN.TRUE:
|
||||
return true;
|
||||
case TOKEN.FALSE:
|
||||
return false;
|
||||
case TOKEN.NULL:
|
||||
return null;
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
string ParseString ()
|
||||
{
|
||||
StringBuilder s = new StringBuilder ();
|
||||
char c;
|
||||
|
||||
// ditch opening quote
|
||||
json.Read ();
|
||||
|
||||
bool parsing = true;
|
||||
while (parsing) {
|
||||
|
||||
if (json.Peek () == -1) {
|
||||
parsing = false;
|
||||
break;
|
||||
}
|
||||
|
||||
c = NextChar;
|
||||
switch (c) {
|
||||
case '"':
|
||||
parsing = false;
|
||||
break;
|
||||
case '\\':
|
||||
if (json.Peek () == -1) {
|
||||
parsing = false;
|
||||
break;
|
||||
}
|
||||
|
||||
c = NextChar;
|
||||
switch (c) {
|
||||
case '"':
|
||||
case '\\':
|
||||
case '/':
|
||||
s.Append (c);
|
||||
break;
|
||||
case 'b':
|
||||
s.Append ('\b');
|
||||
break;
|
||||
case 'f':
|
||||
s.Append ('\f');
|
||||
break;
|
||||
case 'n':
|
||||
s.Append ('\n');
|
||||
break;
|
||||
case 'r':
|
||||
s.Append ('\r');
|
||||
break;
|
||||
case 't':
|
||||
s.Append ('\t');
|
||||
break;
|
||||
case 'u':
|
||||
var hex = new StringBuilder ();
|
||||
|
||||
for (int i=0; i< 4; i++) {
|
||||
hex.Append (NextChar);
|
||||
}
|
||||
|
||||
s.Append ((char)Convert.ToInt32 (hex.ToString (), 16));
|
||||
break;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
s.Append (c);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return s.ToString ();
|
||||
}
|
||||
|
||||
object ParseNumber ()
|
||||
{
|
||||
string number = NextWord;
|
||||
|
||||
if (number.IndexOf ('.') == -1) {
|
||||
long parsedInt;
|
||||
Int64.TryParse (number, NumberStyles.Any, CultureInfo.InvariantCulture, out parsedInt);
|
||||
return parsedInt;
|
||||
}
|
||||
|
||||
double parsedDouble;
|
||||
Double.TryParse (number, NumberStyles.Any, CultureInfo.InvariantCulture, out parsedDouble);
|
||||
return parsedDouble;
|
||||
}
|
||||
|
||||
void EatWhitespace ()
|
||||
{
|
||||
while (WHITE_SPACE.IndexOf(PeekChar) != -1) {
|
||||
json.Read ();
|
||||
|
||||
if (json.Peek () == -1) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
char PeekChar {
|
||||
get {
|
||||
return Convert.ToChar (json.Peek ());
|
||||
}
|
||||
}
|
||||
|
||||
char NextChar {
|
||||
get {
|
||||
return Convert.ToChar (json.Read ());
|
||||
}
|
||||
}
|
||||
|
||||
string NextWord {
|
||||
get {
|
||||
StringBuilder word = new StringBuilder ();
|
||||
|
||||
while (WORD_BREAK.IndexOf(PeekChar) == -1) {
|
||||
word.Append (NextChar);
|
||||
|
||||
if (json.Peek () == -1) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return word.ToString ();
|
||||
}
|
||||
}
|
||||
|
||||
TOKEN NextToken {
|
||||
get {
|
||||
EatWhitespace ();
|
||||
|
||||
if (json.Peek () == -1) {
|
||||
return TOKEN.NONE;
|
||||
}
|
||||
|
||||
char c = PeekChar;
|
||||
switch (c) {
|
||||
case '{':
|
||||
return TOKEN.CURLY_OPEN;
|
||||
case '}':
|
||||
json.Read ();
|
||||
return TOKEN.CURLY_CLOSE;
|
||||
case '[':
|
||||
return TOKEN.SQUARED_OPEN;
|
||||
case ']':
|
||||
json.Read ();
|
||||
return TOKEN.SQUARED_CLOSE;
|
||||
case ',':
|
||||
json.Read ();
|
||||
return TOKEN.COMMA;
|
||||
case '"':
|
||||
return TOKEN.STRING;
|
||||
case ':':
|
||||
return TOKEN.COLON;
|
||||
case '0':
|
||||
case '1':
|
||||
case '2':
|
||||
case '3':
|
||||
case '4':
|
||||
case '5':
|
||||
case '6':
|
||||
case '7':
|
||||
case '8':
|
||||
case '9':
|
||||
case '-':
|
||||
return TOKEN.NUMBER;
|
||||
}
|
||||
|
||||
string word = NextWord;
|
||||
|
||||
switch (word) {
|
||||
case "false":
|
||||
return TOKEN.FALSE;
|
||||
case "true":
|
||||
return TOKEN.TRUE;
|
||||
case "null":
|
||||
return TOKEN.NULL;
|
||||
}
|
||||
|
||||
return TOKEN.NONE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Converts a IDictionary / IList object or a simple type (string, int, etc.) into a JSON string
|
||||
/// </summary>
|
||||
/// <param name="json">A Dictionary<string, object> / List<object></param>
|
||||
/// <returns>A JSON encoded string, or null if object 'json' is not serializable</returns>
|
||||
public static string Serialize (object obj)
|
||||
{
|
||||
return Serializer.Serialize (obj);
|
||||
}
|
||||
|
||||
sealed class Serializer
|
||||
{
|
||||
StringBuilder builder;
|
||||
|
||||
Serializer ()
|
||||
{
|
||||
builder = new StringBuilder ();
|
||||
}
|
||||
|
||||
public static string Serialize (object obj)
|
||||
{
|
||||
var instance = new Serializer ();
|
||||
|
||||
instance.SerializeValue (obj);
|
||||
|
||||
return instance.builder.ToString ();
|
||||
}
|
||||
|
||||
void SerializeValue (object value)
|
||||
{
|
||||
IList asList;
|
||||
IDictionary asDict;
|
||||
string asStr;
|
||||
|
||||
if (value == null) {
|
||||
builder.Append ("null");
|
||||
} else if ((asStr = value as string) != null) {
|
||||
SerializeString (asStr);
|
||||
} else if (value is bool) {
|
||||
builder.Append (value.ToString ().ToLower ());
|
||||
} else if ((asList = value as IList) != null) {
|
||||
SerializeArray (asList);
|
||||
} else if ((asDict = value as IDictionary) != null) {
|
||||
SerializeObject (asDict);
|
||||
} else if (value is char) {
|
||||
SerializeString (value.ToString ());
|
||||
} else {
|
||||
SerializeOther (value);
|
||||
}
|
||||
}
|
||||
|
||||
void SerializeObject (IDictionary obj)
|
||||
{
|
||||
bool first = true;
|
||||
|
||||
builder.Append ('{');
|
||||
|
||||
foreach (object e in obj.Keys) {
|
||||
if (!first) {
|
||||
builder.Append (',');
|
||||
}
|
||||
|
||||
SerializeString (e.ToString ());
|
||||
builder.Append (':');
|
||||
|
||||
SerializeValue (obj [e]);
|
||||
|
||||
first = false;
|
||||
}
|
||||
|
||||
builder.Append ('}');
|
||||
}
|
||||
|
||||
void SerializeArray (IList anArray)
|
||||
{
|
||||
builder.Append ('[');
|
||||
|
||||
bool first = true;
|
||||
|
||||
foreach (object obj in anArray) {
|
||||
if (!first) {
|
||||
builder.Append (',');
|
||||
}
|
||||
|
||||
SerializeValue (obj);
|
||||
|
||||
first = false;
|
||||
}
|
||||
|
||||
builder.Append (']');
|
||||
}
|
||||
|
||||
void SerializeString (string str)
|
||||
{
|
||||
builder.Append ('\"');
|
||||
|
||||
char[] charArray = str.ToCharArray ();
|
||||
foreach (var c in charArray) {
|
||||
switch (c) {
|
||||
case '"':
|
||||
builder.Append ("\\\"");
|
||||
break;
|
||||
case '\\':
|
||||
builder.Append ("\\\\");
|
||||
break;
|
||||
case '\b':
|
||||
builder.Append ("\\b");
|
||||
break;
|
||||
case '\f':
|
||||
builder.Append ("\\f");
|
||||
break;
|
||||
case '\n':
|
||||
builder.Append ("\\n");
|
||||
break;
|
||||
case '\r':
|
||||
builder.Append ("\\r");
|
||||
break;
|
||||
case '\t':
|
||||
builder.Append ("\\t");
|
||||
break;
|
||||
default:
|
||||
int codepoint = Convert.ToInt32 (c);
|
||||
if ((codepoint >= 32) && (codepoint <= 126)) {
|
||||
builder.Append (c);
|
||||
} else {
|
||||
builder.Append ("\\u" + Convert.ToString (codepoint, 16).PadLeft (4, '0'));
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
builder.Append ('\"');
|
||||
}
|
||||
|
||||
void SerializeOther (object value)
|
||||
{
|
||||
if (value is float
|
||||
|| value is int
|
||||
|| value is uint
|
||||
|| value is long
|
||||
|| value is double
|
||||
|| value is sbyte
|
||||
|| value is byte
|
||||
|| value is short
|
||||
|| value is ushort
|
||||
|| value is ulong
|
||||
|| value is decimal) {
|
||||
builder.Append (value.ToString ());
|
||||
} else {
|
||||
SerializeString (value.ToString ());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 6704b25b621ab47ebbfa013ced92bdb0
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
|
@ -0,0 +1,26 @@
|
|||
using System.IO;
|
||||
using UnityEngine;
|
||||
|
||||
public class IronSourceMediationSettings : ScriptableObject
|
||||
{
|
||||
public static readonly string IRONSOURCE_SETTINGS_ASSET_PATH = Path.Combine(IronSourceConstants.IRONSOURCE_RESOURCES_PATH, IronSourceConstants.IRONSOURCE_MEDIATION_SETTING_NAME + ".asset");
|
||||
|
||||
[Header("Ironsource AppKey")]
|
||||
[Tooltip("Add your application AppKeys, as provided in Ironsource Platform")]
|
||||
public string AndroidAppKey = string.Empty;
|
||||
[Tooltip("Add your application AppKeys, as provided in Ironsource Platform")]
|
||||
public string IOSAppKey = string.Empty;
|
||||
|
||||
[Header("Automatic Initialization")]
|
||||
[Tooltip("Use this flag when you wish to initialize all ad units (recommended)")]
|
||||
public bool EnableIronsourceSDKInitAPI;
|
||||
|
||||
[Header("Ironsource SKAdNetwork ID")]
|
||||
[Tooltip("Add Ironsource SKAdNetworkIdentifier to your Info.plist for iOS 14+")]
|
||||
public bool AddIronsourceSkadnetworkID;
|
||||
|
||||
[Header("Project Features")]
|
||||
public bool EnableAdapterDebug;
|
||||
|
||||
public bool EnableIntegrationHelper;
|
||||
}
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
fileFormatVersion: 2
|
||||
guid: d5a679b8640d04834b4f09b8c6adec7a
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
|
@ -0,0 +1,37 @@
|
|||
using System;
|
||||
|
||||
public class IronSourcePlacement
|
||||
{
|
||||
private string rewardName;
|
||||
private int rewardAmount;
|
||||
private string placementName;
|
||||
|
||||
public IronSourcePlacement (string placementName, string rewardName, int rewardAmount)
|
||||
{
|
||||
this.placementName = placementName;
|
||||
this.rewardName = rewardName;
|
||||
this.rewardAmount = rewardAmount;
|
||||
}
|
||||
|
||||
public string getRewardName ()
|
||||
{
|
||||
return rewardName;
|
||||
}
|
||||
|
||||
public int getRewardAmount ()
|
||||
{
|
||||
return rewardAmount;
|
||||
}
|
||||
|
||||
public string getPlacementName ()
|
||||
{
|
||||
return placementName;
|
||||
}
|
||||
|
||||
public override string ToString ()
|
||||
{
|
||||
return placementName + " : " + rewardName + " : " + rewardAmount;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 984e6a9b75cea4626baa9dcb08114ebf
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
|
@ -0,0 +1,66 @@
|
|||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using System.Linq;
|
||||
|
||||
|
||||
|
||||
|
||||
public class IronSourceSegment
|
||||
{
|
||||
|
||||
public int age;
|
||||
public string gender = null;
|
||||
public int level;
|
||||
public int isPaying;
|
||||
public long userCreationDate;
|
||||
public double iapt;
|
||||
public string segmentName = null;
|
||||
public Dictionary<string,string> customs;
|
||||
|
||||
public IronSourceSegment ()
|
||||
{
|
||||
customs = new Dictionary<string,string> ();
|
||||
age = -1;
|
||||
level = -1;
|
||||
isPaying = -1;
|
||||
userCreationDate = -1;
|
||||
iapt = 0;
|
||||
}
|
||||
|
||||
public void setCustom(string key, string value){
|
||||
customs.Add (key, value);
|
||||
}
|
||||
|
||||
public Dictionary<string,string> getSegmentAsDict ()
|
||||
{
|
||||
Dictionary<string,string> temp = new Dictionary<string,string> ();
|
||||
if (age != -1)
|
||||
temp.Add ("age", age + "");
|
||||
if (!string.IsNullOrEmpty(gender))
|
||||
temp.Add ("gender", gender);
|
||||
if (level != -1)
|
||||
temp.Add ("level", level + "");
|
||||
if (isPaying > -1 && isPaying < 2)
|
||||
temp.Add ("isPaying", isPaying + "");
|
||||
if (userCreationDate != -1)
|
||||
temp.Add ("userCreationDate", userCreationDate + "");
|
||||
if (!string.IsNullOrEmpty(segmentName))
|
||||
temp.Add ("segmentName", segmentName);
|
||||
if (iapt > 0)
|
||||
temp.Add ("iapt", iapt + "");
|
||||
|
||||
Dictionary<string,string> result = temp.Concat (customs).GroupBy (d => d.Key).ToDictionary (d => d.Key, d => d.First ().Value);
|
||||
|
||||
return result;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
fileFormatVersion: 2
|
||||
guid: f060327917ac94f60857545bd54c308e
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
|
@ -0,0 +1,59 @@
|
|||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
|
||||
public class IronSourceUtils
|
||||
{
|
||||
private const string ERROR_CODE = "error_code";
|
||||
private const string ERROR_DESCRIPTION = "error_description";
|
||||
private const string INSTANCE_ID_KEY = "instanceId";
|
||||
private const string PLACEMENT_KEY = "placement";
|
||||
|
||||
public static IronSourceError getErrorFromErrorObject(object descriptionObject)
|
||||
{
|
||||
Dictionary<string, object> error = null;
|
||||
if (descriptionObject is IDictionary)
|
||||
{
|
||||
error = descriptionObject as Dictionary<string, object>;
|
||||
}
|
||||
else if (descriptionObject is String && !String.IsNullOrEmpty(descriptionObject.ToString()))
|
||||
{
|
||||
error = IronSourceJSON.Json.Deserialize(descriptionObject.ToString()) as Dictionary<string, object>;
|
||||
}
|
||||
|
||||
IronSourceError sse = new IronSourceError(-1, "");
|
||||
if (error != null && error.Count > 0)
|
||||
{
|
||||
int eCode = Convert.ToInt32(error[ERROR_CODE].ToString());
|
||||
string eDescription = error[ERROR_DESCRIPTION].ToString();
|
||||
sse = new IronSourceError(eCode, eDescription);
|
||||
}
|
||||
|
||||
return sse;
|
||||
}
|
||||
|
||||
public static IronSourcePlacement getPlacementFromObject(object placementObject)
|
||||
{
|
||||
Dictionary<string, object> placementJSON = null;
|
||||
if (placementObject is IDictionary)
|
||||
{
|
||||
placementJSON = placementObject as Dictionary<string, object>;
|
||||
}
|
||||
else if (placementObject is String)
|
||||
{
|
||||
placementJSON = IronSourceJSON.Json.Deserialize(placementObject.ToString()) as Dictionary<string, object>;
|
||||
}
|
||||
|
||||
IronSourcePlacement ssp = null;
|
||||
if (placementJSON != null && placementJSON.Count > 0)
|
||||
{
|
||||
int rewardAmount = Convert.ToInt32(placementJSON["placement_reward_amount"].ToString());
|
||||
string rewardName = placementJSON["placement_reward_name"].ToString();
|
||||
string placementName = placementJSON["placement_name"].ToString();
|
||||
|
||||
ssp = new IronSourcePlacement(placementName, rewardName, rewardAmount);
|
||||
}
|
||||
|
||||
return ssp;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
fileFormatVersion: 2
|
||||
guid: bba6a563b7b0746aea78a1ea9fea14fe
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
|
@ -0,0 +1,287 @@
|
|||
using UnityEngine;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
|
||||
public class UnsupportedPlatformAgent : IronSourceIAgent
|
||||
{
|
||||
public UnsupportedPlatformAgent ()
|
||||
{
|
||||
Debug.Log ("Unsupported Platform");
|
||||
}
|
||||
|
||||
#region IronSourceAgent implementation
|
||||
|
||||
public void start ()
|
||||
{
|
||||
Debug.Log ("Unsupported Platform");
|
||||
}
|
||||
|
||||
//******************* Base API *******************//
|
||||
|
||||
public void onApplicationPause (bool pause)
|
||||
{
|
||||
Debug.Log ("Unsupported Platform");
|
||||
}
|
||||
|
||||
public void setMediationSegment (string segment)
|
||||
{
|
||||
Debug.Log ("Unsupported Platform");
|
||||
}
|
||||
|
||||
public string getAdvertiserId ()
|
||||
{
|
||||
Debug.Log ("Unsupported Platform");
|
||||
return "";
|
||||
}
|
||||
|
||||
public void validateIntegration ()
|
||||
{
|
||||
Debug.Log ("Unsupported Platform");
|
||||
}
|
||||
|
||||
public void shouldTrackNetworkState (bool track)
|
||||
{
|
||||
Debug.Log ("Unsupported Platform");
|
||||
}
|
||||
|
||||
public bool setDynamicUserId (string dynamicUserId)
|
||||
{
|
||||
Debug.Log ("Unsupported Platform");
|
||||
return false;
|
||||
}
|
||||
|
||||
public void setAdaptersDebug(bool enabled)
|
||||
{
|
||||
Debug.Log ("Unsupported Platform");
|
||||
}
|
||||
|
||||
public void setMetaData(string key, string value)
|
||||
{
|
||||
Debug.Log("Unsupported Platform");
|
||||
}
|
||||
|
||||
public void setMetaData(string key, params string[] values)
|
||||
{
|
||||
Debug.Log("Unsupported Platform");
|
||||
}
|
||||
|
||||
public int? getConversionValue()
|
||||
{
|
||||
Debug.Log("Unsupported Platform");
|
||||
return null;
|
||||
}
|
||||
|
||||
//******************* SDK Init *******************//
|
||||
|
||||
public void setUserId (string userId)
|
||||
{
|
||||
Debug.Log ("Unsupported Platform");
|
||||
}
|
||||
|
||||
public void init (string appKey)
|
||||
{
|
||||
Debug.Log ("Unsupported Platform");
|
||||
}
|
||||
|
||||
public void init (string appKey, params string[] adUnits)
|
||||
{
|
||||
Debug.Log ("Unsupported Platform");
|
||||
}
|
||||
|
||||
public void initISDemandOnly (string appKey, params string[] adUnits)
|
||||
{
|
||||
Debug.Log ("Unsupported Platform");
|
||||
}
|
||||
|
||||
//******************* RewardedVideo API *******************//
|
||||
|
||||
public void showRewardedVideo ()
|
||||
{
|
||||
Debug.Log ("Unsupported Platform");
|
||||
}
|
||||
|
||||
public void showRewardedVideo (string placementName)
|
||||
{
|
||||
Debug.Log ("Unsupported Platform");
|
||||
}
|
||||
|
||||
public bool isRewardedVideoAvailable ()
|
||||
{
|
||||
Debug.Log ("Unsupported Platform");
|
||||
return false;
|
||||
}
|
||||
|
||||
public bool isRewardedVideoPlacementCapped (string placementName)
|
||||
{
|
||||
Debug.Log ("Unsupported Platform");
|
||||
return true;
|
||||
}
|
||||
|
||||
public IronSourcePlacement getPlacementInfo (string placementName)
|
||||
{
|
||||
Debug.Log ("Unsupported Platform");
|
||||
return null;
|
||||
}
|
||||
|
||||
public void setRewardedVideoServerParams(Dictionary<string, string> parameters)
|
||||
{
|
||||
Debug.Log ("Unsupported Platform");
|
||||
}
|
||||
|
||||
public void clearRewardedVideoServerParams()
|
||||
{
|
||||
Debug.Log ("Unsupported Platform");
|
||||
}
|
||||
|
||||
//******************* RewardedVideo DemandOnly API *******************//
|
||||
|
||||
public void showISDemandOnlyRewardedVideo (string instanceId)
|
||||
{
|
||||
Debug.Log ("Unsupported Platform");
|
||||
}
|
||||
|
||||
public void loadISDemandOnlyRewardedVideo (string instanceId)
|
||||
{
|
||||
Debug.Log ("Unsupported Platform");
|
||||
|
||||
}
|
||||
|
||||
public bool isISDemandOnlyRewardedVideoAvailable (string instanceId)
|
||||
{
|
||||
Debug.Log ("Unsupported Platform");
|
||||
return false;
|
||||
}
|
||||
|
||||
//******************* Interstitial API *******************//
|
||||
|
||||
public void loadInterstitial ()
|
||||
{
|
||||
Debug.Log ("Unsupported Platform");
|
||||
}
|
||||
|
||||
public void showInterstitial ()
|
||||
{
|
||||
Debug.Log ("Unsupported Platform");
|
||||
}
|
||||
|
||||
public void showInterstitial (string placementName)
|
||||
{
|
||||
Debug.Log ("Unsupported Platform");
|
||||
}
|
||||
|
||||
public bool isInterstitialReady ()
|
||||
{
|
||||
Debug.Log ("Unsupported Platform");
|
||||
return false;
|
||||
}
|
||||
|
||||
public bool isInterstitialPlacementCapped (string placementName)
|
||||
{
|
||||
Debug.Log ("Unsupported Platform");
|
||||
return true;
|
||||
}
|
||||
|
||||
//******************* Interstitial DemandOnly API *******************//
|
||||
|
||||
public void loadISDemandOnlyInterstitial (string instanceId)
|
||||
{
|
||||
Debug.Log ("Unsupported Platform");
|
||||
}
|
||||
|
||||
public void showISDemandOnlyInterstitial (string instanceId)
|
||||
{
|
||||
Debug.Log ("Unsupported Platform");
|
||||
}
|
||||
|
||||
public bool isISDemandOnlyInterstitialReady (string instanceId)
|
||||
{
|
||||
Debug.Log ("Unsupported Platform");
|
||||
return false;
|
||||
}
|
||||
|
||||
//******************* Offerwall API *******************//
|
||||
|
||||
public void showOfferwall ()
|
||||
{
|
||||
Debug.Log ("Unsupported Platform");
|
||||
}
|
||||
|
||||
public void showOfferwall (string placementName)
|
||||
{
|
||||
Debug.Log ("Unsupported Platform");
|
||||
}
|
||||
|
||||
public void getOfferwallCredits ()
|
||||
{
|
||||
Debug.Log ("Unsupported Platform");
|
||||
}
|
||||
|
||||
public bool isOfferwallAvailable ()
|
||||
{
|
||||
Debug.Log ("Unsupported Platform");
|
||||
return false;
|
||||
}
|
||||
|
||||
//******************* Banner API *******************//
|
||||
|
||||
public void loadBanner (IronSourceBannerSize size, IronSourceBannerPosition position)
|
||||
{
|
||||
Debug.Log ("Unsupported Platform");
|
||||
}
|
||||
|
||||
public void loadBanner (IronSourceBannerSize size, IronSourceBannerPosition position, string placementName)
|
||||
{
|
||||
Debug.Log ("Unsupported Platform");
|
||||
}
|
||||
|
||||
public void destroyBanner()
|
||||
{
|
||||
Debug.Log ("Unsupported Platform");
|
||||
}
|
||||
|
||||
public void displayBanner()
|
||||
{
|
||||
Debug.Log ("Unsupported Platform");
|
||||
}
|
||||
|
||||
public void hideBanner()
|
||||
{
|
||||
Debug.Log ("Unsupported Platform");
|
||||
}
|
||||
|
||||
public bool isBannerPlacementCapped(string placementName)
|
||||
{
|
||||
Debug.Log ("Unsupported Platform");
|
||||
return false;
|
||||
}
|
||||
|
||||
public void setSegment(IronSourceSegment segment){
|
||||
Debug.Log ("Unsupported Platform");
|
||||
}
|
||||
|
||||
public void setConsent(bool consent)
|
||||
{
|
||||
Debug.Log ("Unsupported Platform");
|
||||
}
|
||||
|
||||
//******************* ConsentView API *******************//
|
||||
|
||||
public void loadConsentViewWithType(string consentViewType)
|
||||
{
|
||||
Debug.Log("Unsupported Platform");
|
||||
}
|
||||
|
||||
public void showConsentViewWithType(string consentViewType)
|
||||
{
|
||||
Debug.Log("Unsupported Platform");
|
||||
}
|
||||
|
||||
//******************* ILRD API *******************//
|
||||
|
||||
public void setAdRevenueData(string dataSource, Dictionary<string, string> impressionData)
|
||||
{
|
||||
Debug.Log("Unsupported Platform");
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
fileFormatVersion: 2
|
||||
guid: fa7a1bdde72c745a48f5ab116d847d96
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
|
@ -0,0 +1,455 @@
|
|||
#if UNITY_IPHONE || UNITY_IOS
|
||||
using UnityEngine;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Linq;
|
||||
using System;
|
||||
using System.Globalization;
|
||||
|
||||
public class iOSAgent : IronSourceIAgent
|
||||
{
|
||||
[DllImport("__Internal")]
|
||||
private static extern void CFSetPluginData (string pluginType, string pluginVersion, string pluginFrameworkVersion);
|
||||
|
||||
[DllImport("__Internal")]
|
||||
private static extern void CFSetMediationSegment (string segment);
|
||||
|
||||
[DllImport("__Internal")]
|
||||
private static extern string CFGetAdvertiserId ();
|
||||
|
||||
[DllImport("__Internal")]
|
||||
private static extern void CFValidateIntegration ();
|
||||
|
||||
[DllImport("__Internal")]
|
||||
private static extern void CFShouldTrackNetworkState (bool track);
|
||||
|
||||
[DllImport("__Internal")]
|
||||
private static extern bool CFSetDynamicUserId (string dynamicUserId);
|
||||
|
||||
[DllImport("__Internal")]
|
||||
private static extern void CFSetAdaptersDebug (bool enabled);
|
||||
|
||||
[DllImport("__Internal")]
|
||||
private static extern void CFSetMetaData (string key, string value);
|
||||
|
||||
[DllImport("__Internal")]
|
||||
private static extern void CFSetMetaDataWithValues (string key, params string[] values);
|
||||
|
||||
[DllImport("__Internal")]
|
||||
private static extern string CFGetConversionValue();
|
||||
|
||||
//******************* SDK Init *******************//
|
||||
|
||||
[DllImport("__Internal")]
|
||||
private static extern void CFSetUserId (string userId);
|
||||
|
||||
[DllImport("__Internal")]
|
||||
private static extern void CFInit (string appKey);
|
||||
|
||||
[DllImport("__Internal")]
|
||||
private static extern void CFInitWithAdUnits (string appKey, params string[] adUnits);
|
||||
|
||||
[DllImport("__Internal")]
|
||||
private static extern void CFInitISDemandOnly (string appKey, params string[] adUnits);
|
||||
|
||||
//******************* RewardedVideo API *******************//
|
||||
|
||||
[DllImport("__Internal")]
|
||||
private static extern void CFShowRewardedVideo ();
|
||||
|
||||
[DllImport("__Internal")]
|
||||
private static extern void CFShowRewardedVideoWithPlacementName (string placementName);
|
||||
|
||||
[DllImport("__Internal")]
|
||||
private static extern bool CFIsRewardedVideoAvailable ();
|
||||
|
||||
[DllImport("__Internal")]
|
||||
private static extern bool CFIsRewardedVideoPlacementCapped (string placementName);
|
||||
|
||||
[DllImport("__Internal")]
|
||||
private static extern string CFGetPlacementInfo (string placementName);
|
||||
|
||||
[DllImport("__Internal")]
|
||||
private static extern void CFSetRewardedVideoServerParameters (string jsonString);
|
||||
|
||||
[DllImport("__Internal")]
|
||||
private static extern void CFClearRewardedVideoServerParameters ();
|
||||
|
||||
//******************* RewardedVideo DemandOnly API *******************//
|
||||
|
||||
[DllImport("__Internal")]
|
||||
private static extern void CFShowISDemandOnlyRewardedVideo (string instanceId);
|
||||
|
||||
[DllImport("__Internal")]
|
||||
private static extern void CFLoadISDemandOnlyRewardedVideo (string instanceId);
|
||||
|
||||
[DllImport("__Internal")]
|
||||
private static extern bool CFIsDemandOnlyRewardedVideoAvailable (string instanceId);
|
||||
|
||||
//******************* Interstitial API *******************//
|
||||
|
||||
[DllImport("__Internal")]
|
||||
private static extern void CFLoadInterstitial ();
|
||||
|
||||
[DllImport("__Internal")]
|
||||
private static extern void CFShowInterstitial ();
|
||||
|
||||
[DllImport("__Internal")]
|
||||
private static extern void CFShowInterstitialWithPlacementName (string placementName);
|
||||
|
||||
[DllImport("__Internal")]
|
||||
private static extern bool CFIsInterstitialReady ();
|
||||
|
||||
[DllImport("__Internal")]
|
||||
private static extern bool CFIsInterstitialPlacementCapped (string placementName);
|
||||
|
||||
//******************* Interstitial DemandOnly API *******************//
|
||||
|
||||
[DllImport("__Internal")]
|
||||
private static extern void CFLoadISDemandOnlyInterstitial (string instanceId);
|
||||
|
||||
[DllImport("__Internal")]
|
||||
private static extern void CFShowISDemandOnlyInterstitial(string instanceId);
|
||||
|
||||
[DllImport("__Internal")]
|
||||
private static extern bool CFIsDemandOnlyInterstitialReady (string instanceId);
|
||||
|
||||
|
||||
//******************* Offerwall API *******************//
|
||||
|
||||
[DllImport("__Internal")]
|
||||
private static extern void CFShowOfferwall ();
|
||||
|
||||
[DllImport("__Internal")]
|
||||
private static extern void CFShowOfferwallWithPlacementName (string placementName);
|
||||
|
||||
[DllImport("__Internal")]
|
||||
private static extern void CFGetOfferwallCredits ();
|
||||
|
||||
[DllImport("__Internal")]
|
||||
private static extern bool CFIsOfferwallAvailable ();
|
||||
|
||||
//******************* Banner API *******************//
|
||||
|
||||
[DllImport("__Internal")]
|
||||
private static extern void CFLoadBanner (string description, int width, int height, int position, string placementName);
|
||||
|
||||
[DllImport("__Internal")]
|
||||
private static extern void CFDestroyBanner ();
|
||||
|
||||
[DllImport("__Internal")]
|
||||
private static extern void CFDisplayBanner ();
|
||||
|
||||
[DllImport("__Internal")]
|
||||
private static extern void CFHideBanner ();
|
||||
|
||||
[DllImport("__Internal")]
|
||||
private static extern bool CFIsBannerPlacementCapped (string placementName);
|
||||
|
||||
[DllImport("__Internal")]
|
||||
private static extern void CFSetSegment(string json);
|
||||
|
||||
[DllImport("__Internal")]
|
||||
private static extern void CFSetConsent(bool consent);
|
||||
|
||||
//******************* ConsentView API *******************//
|
||||
|
||||
[DllImport("__Internal")]
|
||||
private static extern void CFLoadConsentViewWithType(string consentViewType);
|
||||
|
||||
[DllImport("__Internal")]
|
||||
private static extern void CFShowConsentViewWithType(string consentViewType);
|
||||
|
||||
//******************* ILRD API *******************//
|
||||
|
||||
[DllImport("__Internal")]
|
||||
private static extern void CFSetAdRevenueData(string dataSource, string impressionData);
|
||||
|
||||
public iOSAgent ()
|
||||
{
|
||||
}
|
||||
|
||||
#region IronSourceIAgent implementation
|
||||
|
||||
//******************* Base API *******************//
|
||||
|
||||
public void onApplicationPause (bool pause)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public void setMediationSegment (string segment)
|
||||
{
|
||||
CFSetMediationSegment (segment);
|
||||
}
|
||||
|
||||
public string getAdvertiserId ()
|
||||
{
|
||||
return CFGetAdvertiserId ();
|
||||
}
|
||||
|
||||
public void validateIntegration ()
|
||||
{
|
||||
CFValidateIntegration ();
|
||||
}
|
||||
|
||||
public void shouldTrackNetworkState (bool track)
|
||||
{
|
||||
CFShouldTrackNetworkState (track);
|
||||
}
|
||||
|
||||
public bool setDynamicUserId (string dynamicUserId)
|
||||
{
|
||||
return CFSetDynamicUserId (dynamicUserId);
|
||||
}
|
||||
|
||||
public void setAdaptersDebug(bool enabled)
|
||||
{
|
||||
CFSetAdaptersDebug (enabled);
|
||||
}
|
||||
|
||||
public void setMetaData(string key, params string[] values)
|
||||
{
|
||||
CFSetMetaDataWithValues(key, values);
|
||||
}
|
||||
|
||||
public void setMetaData(string key, string value)
|
||||
{
|
||||
CFSetMetaData(key, value);
|
||||
}
|
||||
|
||||
public int? getConversionValue()
|
||||
{
|
||||
CultureInfo invCulture = CultureInfo.InvariantCulture;
|
||||
int parsedInt;
|
||||
if(int.TryParse(string.Format(invCulture, "{0}", CFGetConversionValue()), NumberStyles.Any, invCulture, out parsedInt))
|
||||
{
|
||||
return parsedInt;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
//******************* SDK Init *******************//
|
||||
|
||||
public void setUserId (string userId)
|
||||
{
|
||||
CFSetUserId (userId);
|
||||
}
|
||||
|
||||
public void init (string appKey)
|
||||
{
|
||||
CFSetPluginData ("Unity", IronSource.pluginVersion(), IronSource.unityVersion());
|
||||
Debug.Log ("IntegrationHelper pluginVersion: " + IronSource.pluginVersion ());
|
||||
CFInit (appKey);
|
||||
}
|
||||
|
||||
public void init (string appKey, params string[] adUnits)
|
||||
{
|
||||
CFSetPluginData ("Unity", IronSource.pluginVersion(), IronSource.unityVersion());
|
||||
Debug.Log ("IntegrationHelper pluginVersion: " + IronSource.pluginVersion ());
|
||||
CFInitWithAdUnits (appKey, adUnits);
|
||||
}
|
||||
|
||||
public void initISDemandOnly (string appKey, params string[] adUnits)
|
||||
{
|
||||
CFSetPluginData ("Unity", IronSource.pluginVersion(), IronSource.unityVersion());
|
||||
Debug.Log ("IntegrationHelper pluginVersion: " + IronSource.pluginVersion ());
|
||||
CFInitISDemandOnly (appKey, adUnits);
|
||||
}
|
||||
|
||||
//******************* RewardedVideo API *******************//
|
||||
|
||||
public void showRewardedVideo ()
|
||||
{
|
||||
CFShowRewardedVideo ();
|
||||
}
|
||||
|
||||
public void showRewardedVideo (string placementName)
|
||||
{
|
||||
CFShowRewardedVideoWithPlacementName (placementName);
|
||||
}
|
||||
|
||||
public bool isRewardedVideoAvailable ()
|
||||
{
|
||||
return CFIsRewardedVideoAvailable ();
|
||||
}
|
||||
|
||||
public bool isRewardedVideoPlacementCapped (string placementName)
|
||||
{
|
||||
return CFIsRewardedVideoPlacementCapped (placementName);
|
||||
}
|
||||
|
||||
public IronSourcePlacement getPlacementInfo (string placementName)
|
||||
{
|
||||
IronSourcePlacement sp = null;
|
||||
|
||||
string spString = CFGetPlacementInfo (placementName);
|
||||
if (spString != null) {
|
||||
Dictionary<string,object> spDic = IronSourceJSON.Json.Deserialize (spString) as Dictionary<string,object>;
|
||||
string pName = spDic ["placement_name"].ToString ();
|
||||
string rewardName = spDic ["reward_name"].ToString ();
|
||||
int rewardAmount = Convert.ToInt32 (spDic ["reward_amount"].ToString ());
|
||||
sp = new IronSourcePlacement (pName, rewardName, rewardAmount);
|
||||
}
|
||||
|
||||
return sp;
|
||||
}
|
||||
|
||||
public void setRewardedVideoServerParams(Dictionary<string, string> parameters){
|
||||
string json = IronSourceJSON.Json.Serialize (parameters);
|
||||
CFSetRewardedVideoServerParameters (json);
|
||||
}
|
||||
|
||||
public void clearRewardedVideoServerParams(){
|
||||
CFClearRewardedVideoServerParameters ();
|
||||
}
|
||||
|
||||
//******************* RewardedVideo DemandOnly API *******************//
|
||||
|
||||
public void showISDemandOnlyRewardedVideo (string instanceId)
|
||||
{
|
||||
CFShowISDemandOnlyRewardedVideo(instanceId);
|
||||
}
|
||||
|
||||
public void loadISDemandOnlyRewardedVideo (string instanceId)
|
||||
{
|
||||
CFLoadISDemandOnlyRewardedVideo(instanceId);
|
||||
}
|
||||
|
||||
public bool isISDemandOnlyRewardedVideoAvailable (string instanceId)
|
||||
{
|
||||
return CFIsDemandOnlyRewardedVideoAvailable(instanceId);
|
||||
}
|
||||
|
||||
//******************* Interstitial API *******************//
|
||||
|
||||
public void loadInterstitial ()
|
||||
{
|
||||
CFLoadInterstitial ();
|
||||
}
|
||||
|
||||
public void showInterstitial ()
|
||||
{
|
||||
CFShowInterstitial ();
|
||||
}
|
||||
|
||||
public void showInterstitial (string placementName)
|
||||
{
|
||||
CFShowInterstitialWithPlacementName (placementName);
|
||||
}
|
||||
|
||||
public bool isInterstitialReady ()
|
||||
{
|
||||
return CFIsInterstitialReady ();
|
||||
}
|
||||
|
||||
public bool isInterstitialPlacementCapped (string placementName)
|
||||
{
|
||||
return CFIsInterstitialPlacementCapped (placementName);
|
||||
}
|
||||
|
||||
//******************* Interstitial DemandOnly API *******************//
|
||||
|
||||
public void loadISDemandOnlyInterstitial (string instanceId)
|
||||
{
|
||||
CFLoadISDemandOnlyInterstitial (instanceId);
|
||||
}
|
||||
|
||||
public void showISDemandOnlyInterstitial (string instanceId)
|
||||
{
|
||||
CFShowISDemandOnlyInterstitial(instanceId);
|
||||
}
|
||||
|
||||
public bool isISDemandOnlyInterstitialReady (string instanceId)
|
||||
{
|
||||
return CFIsDemandOnlyInterstitialReady (instanceId);
|
||||
}
|
||||
|
||||
//******************* Offerwall API *******************//
|
||||
|
||||
public void showOfferwall ()
|
||||
{
|
||||
CFShowOfferwall ();
|
||||
}
|
||||
|
||||
public void showOfferwall (string placementName)
|
||||
{
|
||||
CFShowOfferwallWithPlacementName (placementName);
|
||||
}
|
||||
|
||||
public void getOfferwallCredits ()
|
||||
{
|
||||
CFGetOfferwallCredits ();
|
||||
}
|
||||
|
||||
public bool isOfferwallAvailable ()
|
||||
{
|
||||
return CFIsOfferwallAvailable ();
|
||||
}
|
||||
|
||||
//******************* Banner API *******************//
|
||||
|
||||
public void loadBanner (IronSourceBannerSize size, IronSourceBannerPosition position)
|
||||
{
|
||||
loadBanner(size, position, "");
|
||||
}
|
||||
|
||||
public void loadBanner (IronSourceBannerSize size, IronSourceBannerPosition position, string placementName)
|
||||
{
|
||||
CFLoadBanner (size.Description, (int)size.Width, (int)size.Height, (int)position, placementName);
|
||||
}
|
||||
|
||||
public void destroyBanner ()
|
||||
{
|
||||
CFDestroyBanner ();
|
||||
}
|
||||
|
||||
public void displayBanner ()
|
||||
{
|
||||
CFDisplayBanner ();
|
||||
}
|
||||
|
||||
public void hideBanner ()
|
||||
{
|
||||
CFHideBanner ();
|
||||
}
|
||||
|
||||
public bool isBannerPlacementCapped (string placementName)
|
||||
{
|
||||
return CFIsBannerPlacementCapped (placementName);
|
||||
}
|
||||
|
||||
public void setSegment(IronSourceSegment segment){
|
||||
Dictionary <string,string> dict = segment.getSegmentAsDict ();
|
||||
string json = IronSourceJSON.Json.Serialize (dict);
|
||||
CFSetSegment (json);
|
||||
}
|
||||
|
||||
public void setConsent(bool consent)
|
||||
{
|
||||
CFSetConsent(consent);
|
||||
}
|
||||
|
||||
public void loadConsentViewWithType(string consentViewType)
|
||||
{
|
||||
CFLoadConsentViewWithType(consentViewType);
|
||||
}
|
||||
|
||||
public void showConsentViewWithType(string consentViewType)
|
||||
{
|
||||
CFShowConsentViewWithType(consentViewType);
|
||||
}
|
||||
|
||||
//******************* ILRD API *******************//
|
||||
|
||||
public void setAdRevenueData(string dataSource, Dictionary<string, string> impressionData)
|
||||
{
|
||||
string json = IronSourceJSON.Json.Serialize (impressionData);
|
||||
CFSetAdRevenueData(dataSource, json);
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
#endif
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue