From fb5115a90f009f9963ab99fb9a5c838d32084083 Mon Sep 17 00:00:00 2001
From: 0xFirekeeper <43042585+0xFirekeeper@users.noreply.github.com>
Date: Mon, 28 Oct 2024 21:28:29 +0000
Subject: [PATCH] [Docs] Unity as of 5.7.0 (#5195)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
## PR-Codex overview
This PR focuses on updating the documentation for the `Unity SDK`, including changes to wallet options, sidebar navigation, and the introduction of build instructions. It also replaces an image and adds new sections for configuration and debugging.
### Detailed summary
- Removed `thirdwebmanager.png` and updated image imports.
- Changed title in `page.mdx` from "Unity SDK (v5)" to "Unity SDK".
- Expanded wallet options to include `Github` and `Twitch`.
- Added new `Build Instructions` section in `page.mdx`.
- Updated sidebar to include `Build Instructions` and `Migrate from v4`.
- Revised `Client Settings` and added `Preferences`, `Misc`, and `Debug` sections.
> ✨ Ask PR-Codex anything about this PR by commenting with `/codex {your question}`
---
.../providers/ecosystem-wallet/page.mdx | 2 +-
.../wallets/providers/in-app-wallet/page.mdx | 2 +-
.../app/unity/v5/build-instructions/page.mdx | 49 ++++++++++++++++++
apps/portal/src/app/unity/v5/page.mdx | 2 +-
apps/portal/src/app/unity/v5/sidebar.tsx | 12 +++--
.../src/app/unity/v5/thirdwebmanager/page.mdx | 41 ++++++++++++---
.../v5/thirdwebmanager/thirdwebmanager.png | Bin 21449 -> 0 bytes
.../thirdwebmanager_client.png | Bin 0 -> 27236 bytes
.../thirdwebmanager/thirdwebmanager_debug.png | Bin 0 -> 27435 bytes
.../thirdwebmanager/thirdwebmanager_misc.png | Bin 0 -> 35636 bytes
.../thirdwebmanager_preferences.png | Bin 0 -> 30095 bytes
.../v5/wallets/ecosystem-wallet/page.mdx | 2 +-
.../unity/v5/wallets/in-app-wallet/page.mdx | 2 +-
13 files changed, 95 insertions(+), 17 deletions(-)
create mode 100644 apps/portal/src/app/unity/v5/build-instructions/page.mdx
delete mode 100644 apps/portal/src/app/unity/v5/thirdwebmanager/thirdwebmanager.png
create mode 100644 apps/portal/src/app/unity/v5/thirdwebmanager/thirdwebmanager_client.png
create mode 100644 apps/portal/src/app/unity/v5/thirdwebmanager/thirdwebmanager_debug.png
create mode 100644 apps/portal/src/app/unity/v5/thirdwebmanager/thirdwebmanager_misc.png
create mode 100644 apps/portal/src/app/unity/v5/thirdwebmanager/thirdwebmanager_preferences.png
diff --git a/apps/portal/src/app/dotnet/wallets/providers/ecosystem-wallet/page.mdx b/apps/portal/src/app/dotnet/wallets/providers/ecosystem-wallet/page.mdx
index 198da1614aa..87e3616d00c 100644
--- a/apps/portal/src/app/dotnet/wallets/providers/ecosystem-wallet/page.mdx
+++ b/apps/portal/src/app/dotnet/wallets/providers/ecosystem-wallet/page.mdx
@@ -15,7 +15,7 @@ Create an instance of `EcosystemWallet` using a user's email, phone number or OA
Ecosystem Wallets support a variety of login methods:
- Email (OTP Login)
- Phone (OTP Login)
-- Socials (Google, Apple, Facebook, Telegram, Farcaster, Line etc.)
+- Socials (Google, Apple, Facebook, Telegram, Farcaster, Line, Github, Twitch etc.)
- SIWE (Sign-In with Ethereum)
- Custom Auth (OIDC Compatible)
- Custom Auth (Generic Auth Endpoint)
diff --git a/apps/portal/src/app/dotnet/wallets/providers/in-app-wallet/page.mdx b/apps/portal/src/app/dotnet/wallets/providers/in-app-wallet/page.mdx
index efaaca8c7d8..22d7d28dd14 100644
--- a/apps/portal/src/app/dotnet/wallets/providers/in-app-wallet/page.mdx
+++ b/apps/portal/src/app/dotnet/wallets/providers/in-app-wallet/page.mdx
@@ -15,7 +15,7 @@ Create an instance of `InAppWallet` using a user's email, phone number or OAuth.
In-App Wallets support a variety of login methods:
- Email (OTP Login)
- Phone (OTP Login)
-- Socials (Google, Apple, Facebook, Telegram, Farcaster, Line etc.)
+- Socials (Google, Apple, Facebook, Telegram, Farcaster, Line, Github, Twitch etc.)
- SIWE (Sign-In with Ethereum)
- Custom Auth (OIDC Compatible)
- Custom Auth (Generic Auth Endpoint)
diff --git a/apps/portal/src/app/unity/v5/build-instructions/page.mdx b/apps/portal/src/app/unity/v5/build-instructions/page.mdx
new file mode 100644
index 00000000000..5d1e8cbdc10
--- /dev/null
+++ b/apps/portal/src/app/unity/v5/build-instructions/page.mdx
@@ -0,0 +1,49 @@
+import { Callout, createMetadata } from "@doc";
+
+export const metadata = createMetadata({
+ title: "Unity SDK v5 Build Instructions | thirdweb Unity SDK",
+ description:
+ "Learn how to build your Unity project with the thirdweb Unity SDK.",
+});
+
+# Build Instructions
+
+## General
+
+- **Build Settings:** Use `Smaller (faster) Builds` / `Shorter Build Time`.
+- **Player Settings:** Use IL2CPP over Mono when available.
+- **Stripping Level:** Set `Managed Stripping Level` to `Minimal` (`Player Settings` > `Other Settings` > `Optimization`). (Generally not a hard requirement unless using WalletConnect as a wallet provider option.)
+
+## WebGL
+
+- **WebGL Template:** None enforced, feel free to customize!
+- **Compression Format:** Set to `Disabled` (`Player Settings` > `Publishing Settings`) for final builds.
+- **Testing WebGL Social Login Locally:** Host the build or run it locally with `Cross-Origin-Opener-Policy` set to `same-origin-allow-popups`.
+
+Example setup for testing In-App or Ecosystem Wallet Social Login locally:
+
+```javascript
+// YourWebGLOutputFolder/server.js
+const express = require("express");
+const app = express();
+const port = 8000;
+
+app.use((req, res, next) => {
+ res.header("Cross-Origin-Opener-Policy", "same-origin-allow-popups");
+ next();
+});
+
+app.use(express.static("."));
+app.listen(port, () =>
+ console.log(`Server running on http://localhost:${port}`),
+);
+
+// run it with `node server.js`
+```
+
+No action needed for hosted builds.
+
+## Mobile
+
+- **EDM4U:** Comes with the package, resolves dependencies at runtime. Use `Force Resolve` from `Assets` > `External Dependency Manager` > `Android Resolver`.
+- **Redirect Schemes:** Set custom schemes matching your bundle ID in `Plugins/AndroidManifest.xml` or equivalent to ensure OAuth redirects.
diff --git a/apps/portal/src/app/unity/v5/page.mdx b/apps/portal/src/app/unity/v5/page.mdx
index 9489f4235a2..d65db00304f 100644
--- a/apps/portal/src/app/unity/v5/page.mdx
+++ b/apps/portal/src/app/unity/v5/page.mdx
@@ -1,7 +1,7 @@
import { OpenSourceCard, ArticleIconCard, ArticleCard, Grid } from "@doc";
import { GraduationCap } from "lucide-react";
-# Unity SDK (v5)
+# Unity SDK
The best Unity SDK to build cross-platform games on any EVM blockchain.
diff --git a/apps/portal/src/app/unity/v5/sidebar.tsx b/apps/portal/src/app/unity/v5/sidebar.tsx
index 78c4906b52e..57f798b2b87 100644
--- a/apps/portal/src/app/unity/v5/sidebar.tsx
+++ b/apps/portal/src/app/unity/v5/sidebar.tsx
@@ -12,10 +12,6 @@ export const sidebar: SideBar = {
name: "Overview",
href: sdkSlug,
},
- {
- name: "Migration Guide",
- href: `${sdkSlug}/migration-guide`,
- },
{
name: "Getting Started",
href: `${sdkSlug}/getting-started`,
@@ -29,6 +25,10 @@ export const sidebar: SideBar = {
name: "Thirdweb Manager",
href: `${sdkSlug}/thirdwebmanager`,
},
+ {
+ name: "Build Instructions",
+ href: `${sdkSlug}/build-instructions`,
+ },
],
},
{
@@ -80,6 +80,10 @@ export const sidebar: SideBar = {
href: `${sdkSlug}/contracts`,
},
{ separator: true },
+ {
+ name: "Migrate from v4",
+ href: `${sdkSlug}/migration-guide`,
+ },
{
name: ".NET SDK Portal",
href: "/dotnet",
diff --git a/apps/portal/src/app/unity/v5/thirdwebmanager/page.mdx b/apps/portal/src/app/unity/v5/thirdwebmanager/page.mdx
index d69cd663624..c739dbb7b7f 100644
--- a/apps/portal/src/app/unity/v5/thirdwebmanager/page.mdx
+++ b/apps/portal/src/app/unity/v5/thirdwebmanager/page.mdx
@@ -1,6 +1,9 @@
import { DocImage, createMetadata } from "@doc";
-import thirdwebManager from "./thirdwebmanager.png";
+import thirdwebmanager_client from "./thirdwebmanager_client.png";
+import thirdwebmanager_preferences from "./thirdwebmanager_preferences.png";
+import thirdwebmanager_misc from "./thirdwebmanager_misc.png";
+import thirdwebmanager_debug from "./thirdwebmanager_debug.png";
export const metadata = createMetadata({
title: "Thirdweb Manager | thirdweb Unity SDK",
@@ -15,7 +18,7 @@ Add the prefab to your scene and the client will persist throughout your game's
It is entirely optional, and you can opt to use the [.NET SDK](/dotnet) directly if you prefer to do so.
-
+If you are wrapping the SDK, we recommend making your own Manager inspired by `ThirdwebManager.cs`, specifically for `ThirdwebClient` initialization.
## Configuration
@@ -23,27 +26,49 @@ Configure `ThirdwebManager` through the Unity Inspector window.
Below is a list of all the settings you can adjust.
-### Client Settings
+### Client
-This section involves the basic settings to configure the SDK:
+
+
+This section involves the required thirdweb client settings to configure the SDK:
- `Client ID`: Thirdweb [API Key](https://thirdweb.com/create-api-key). Used to access thirdweb services such as RPC, Storage, and Account Abstraction.
- `Bundle ID`: The bundle ID used to access thirdweb services from native platforms. Should be the same as the bundle ID in your Unity project, e.g., `com.companyname.gamename`.
+- `Create API Key`: A link to create a new API key if you don't have one.
+
+### Preferences
+
+
+
+This section allows you to define the default preferences for the SDK:
+
- `Initialize On Awake`: Whether the SDK should initialize on awake or not. If not, you can call `ThirdwebManager.Instance.Initialize()` to initialize it manually.
- `Show Debug Logs`: Whether to show thirdweb SDK debug logs.
- `Opt Out Usage Analytics`: Whether to opt out of Connect usage analytics, such as the number of wallets connected to your game.
-### WalletConnect Settings
+### Misc
+
+
+
+This section allows you to customize the SDK's behavior:
+
+- `Supported Chains`: A list of chains that the wallets should be able to connect to by default when using `WalletConnect` as a wallet provider.
+- `Redirect Page HTML Override`: Raw HTML to override the default redirect page when connecting to `InAppWallet` or `EcosystemWallet` providers.
+
+### Debug
+
+
-This section allows you to define WalletConnect-specific settings:
+This section allows you to find helpful information:
-- `Supported Chains`: A list of chains that the wallets should be able to connect to by default. Each chain is defined by a chain ID.
+- `Log Active Wallet Info`: Logs the active (last connected) wallet's information such as its address.
+- `Open Documentation`: Opens the thirdweb SDK documentation in your default browser.
## Interacting with the ThirdwebManager
Once your `ThirdwebManager` is set up, you can interact with it using the following methods:
-### Initialize
+### Initialize (If not set to `Initialize On Awake`)
```csharp
ThirdwebManager.Instance.Initialize();
diff --git a/apps/portal/src/app/unity/v5/thirdwebmanager/thirdwebmanager.png b/apps/portal/src/app/unity/v5/thirdwebmanager/thirdwebmanager.png
deleted file mode 100644
index 71baaba6516c87c731c8a19c6697fe4ca7c646df..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 21449
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
diff --git a/apps/portal/src/app/unity/v5/thirdwebmanager/thirdwebmanager_client.png b/apps/portal/src/app/unity/v5/thirdwebmanager/thirdwebmanager_client.png
new file mode 100644
index 0000000000000000000000000000000000000000..4b987ba073a1d42dddfb90906ac2bfc36df953c5
GIT binary patch
literal 27236
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 W7h7xtE>g%*71yjZoWHan^6hr}
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 |