Skip to content

Commit 4f30b81

Browse files
committed
Add featured and single wallet options to Reown integration
Introduces support for 'featuredWalletIds' and 'singleWalletId' in ReownOptions, allowing more granular control over wallet selection in the Reown wallet integration. Updates the PlaygroundManager example to showcase these new options and adds an OAuthProvider enum for improved social login handling. Also updates Reown package dependencies to version 1.5.1.
1 parent 156a566 commit 4f30b81

File tree

5 files changed

+127
-52
lines changed

5 files changed

+127
-52
lines changed

Assets/Thirdweb/Examples/Scripts/PlaygroundManager.cs

Lines changed: 51 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,21 @@
88

99
namespace Thirdweb.Unity.Examples
1010
{
11+
public enum OAuthProvider
12+
{
13+
Google,
14+
Apple,
15+
Facebook,
16+
Discord,
17+
Twitch,
18+
Github,
19+
Coinbase,
20+
X,
21+
TikTok,
22+
Line,
23+
Steam,
24+
}
25+
1126
/// <summary>
1227
/// A simple manager to demonstrate core functionality of the thirdweb SDK.
1328
/// This is not production-ready code. Do not use this in production.
@@ -20,6 +35,7 @@ public class PlaygroundManager : MonoBehaviour
2035
public ulong ChainId;
2136
public string Email;
2237
public string Phone;
38+
public OAuthProvider Social = OAuthProvider.Google;
2339
public Transform ActionButtonParent;
2440
public GameObject ActionButtonPrefab;
2541
public GameObject LogPanel;
@@ -130,7 +146,8 @@ private async void Wallet_Guest()
130146

131147
private async void Wallet_Social()
132148
{
133-
var walletOptions = new WalletOptions(provider: WalletProvider.InAppWallet, chainId: this.ChainId, new InAppWalletOptions(authprovider: AuthProvider.Github));
149+
var parsedOAuthProvider = (AuthProvider)System.Enum.Parse(typeof(AuthProvider), this.Social.ToString());
150+
var walletOptions = new WalletOptions(provider: WalletProvider.InAppWallet, chainId: this.ChainId, new InAppWalletOptions(authprovider: parsedOAuthProvider));
134151
var wallet = await ThirdwebManager.Instance.ConnectWallet(walletOptions);
135152
if (this.AlwaysUpgradeToSmartWallet)
136153
{
@@ -181,7 +198,39 @@ private async void Wallet_External()
181198
var walletOptions = new WalletOptions(
182199
provider: WalletProvider.ReownWallet,
183200
chainId: this.ChainId,
184-
reownOptions: new ReownOptions(projectId: null, name: null, description: null, url: null, iconUrl: null, includedWalletIds: null, excludedWalletIds: null)
201+
reownOptions: new ReownOptions(
202+
projectId: null,
203+
name: null,
204+
description: null,
205+
url: null,
206+
iconUrl: null,
207+
includedWalletIds: null,
208+
excludedWalletIds: null,
209+
featuredWalletIds: new string[]
210+
{
211+
"c57ca95b47569778a828d19178114f4db188b89b763c899ba0be274e97267d96",
212+
"18388be9ac2d02726dbac9777c96efaac06d744b2f6d580fccdd4127a6d01fd1",
213+
"541d5dcd4ede02f3afaf75bf8e3e4c4f1fb09edb5fa6c4377ebf31c2785d9adf",
214+
}
215+
)
216+
);
217+
var wallet = await ThirdwebManager.Instance.ConnectWallet(walletOptions);
218+
if (this.AlwaysUpgradeToSmartWallet)
219+
{
220+
wallet = await ThirdwebManager.Instance.UpgradeToSmartWallet(wallet, chainId: this.ChainId, smartWalletOptions: new SmartWalletOptions(sponsorGas: true));
221+
}
222+
var address = await wallet.GetAddress();
223+
this.LogPlayground($"[SIWE] Connected to wallet:\n{address}");
224+
}
225+
226+
#pragma warning disable IDE0051 // Remove unused private members: This is a showcase of an alternative way to use Reown
227+
private async void Wallet_External_Direct()
228+
#pragma warning restore IDE0051 // Remove unused private members: This is a showcase of an alternative way to use Reown
229+
{
230+
var walletOptions = new WalletOptions(
231+
provider: WalletProvider.ReownWallet,
232+
chainId: this.ChainId,
233+
reownOptions: new ReownOptions(singleWalletId: "c57ca95b47569778a828d19178114f4db188b89b763c899ba0be274e97267d96")
185234
);
186235
var wallet = await ThirdwebManager.Instance.ConnectWallet(walletOptions);
187236
if (this.AlwaysUpgradeToSmartWallet)

Assets/Thirdweb/Runtime/Unity/ThirdwebManagerBase.cs

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -175,23 +175,37 @@ public class ReownOptions
175175
[JsonProperty("excludedWalletIds")]
176176
public string[] ExcludedWalletIds;
177177

178+
[JsonProperty("featuredWalletIds")]
179+
public string[] FeaturedWalletIds;
180+
181+
[JsonProperty("singleWalletId")]
182+
public string SingleWalletId;
183+
178184
public ReownOptions(
179185
string projectId = null,
180186
string name = null,
181187
string description = null,
182188
string url = null,
183189
string iconUrl = null,
184190
string[] includedWalletIds = null,
185-
string[] excludedWalletIds = null
191+
string[] excludedWalletIds = null,
192+
string[] featuredWalletIds = null,
193+
string singleWalletId = null
186194
)
187195
{
196+
if (singleWalletId != null && (includedWalletIds != null || excludedWalletIds != null || featuredWalletIds != null))
197+
{
198+
throw new ArgumentException("singleWalletId cannot be used with includedWalletIds, excludedWalletIds, or featuredWalletIds.");
199+
}
188200
this.ProjectId = projectId ?? "35603765088f9ed24db818100fdbb6f9";
189201
this.Name = name ?? "thirdweb";
190202
this.Description = description ?? "thirdweb powered game";
191203
this.Url = url ?? "https://thirdweb.com";
192204
this.IconUrl = iconUrl ?? "https://thirdweb.com/favicon.ico";
193205
this.IncludedWalletIds = includedWalletIds;
194206
this.ExcludedWalletIds = excludedWalletIds;
207+
this.FeaturedWalletIds = featuredWalletIds;
208+
this.SingleWalletId = singleWalletId;
195209
}
196210
}
197211

@@ -429,7 +443,9 @@ public virtual async Task<IThirdwebWallet> ConnectWallet(WalletOptions walletOpt
429443
url: walletOptions.ReownOptions.Url,
430444
iconUrl: walletOptions.ReownOptions.IconUrl,
431445
includedWalletIds: walletOptions.ReownOptions.IncludedWalletIds,
432-
excludedWalletIds: walletOptions.ReownOptions.ExcludedWalletIds
446+
excludedWalletIds: walletOptions.ReownOptions.ExcludedWalletIds,
447+
featuredWalletIds: walletOptions.ReownOptions.FeaturedWalletIds,
448+
singleWalletId: walletOptions.ReownOptions.SingleWalletId
433449
);
434450
break;
435451
#else

Assets/Thirdweb/Runtime/Unity/Wallets/Reown/ReownWallet.cs

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,9 @@ public static async Task<ReownWallet> Create(
3232
string url,
3333
string iconUrl,
3434
string[] includedWalletIds,
35-
string[] excludedWalletIds
35+
string[] excludedWalletIds,
36+
string[] featuredWalletIds,
37+
string singleWalletId
3638
)
3739
{
3840
_client = client;
@@ -54,8 +56,9 @@ string[] excludedWalletIds
5456
var appKitConfig = new AppKitConfig
5557
{
5658
projectId = projectId,
57-
includedWalletIds = includedWalletIds,
58-
excludedWalletIds = excludedWalletIds,
59+
includedWalletIds = singleWalletId == null ? includedWalletIds : null,
60+
excludedWalletIds = singleWalletId == null ? excludedWalletIds : null,
61+
featuredWalletIds = singleWalletId == null ? featuredWalletIds : null,
5962
metadata = new Metadata(name: name, description: description, url: url, iconUrl: iconUrl, redirect: new RedirectData() { Native = ThirdwebManager.Instance.MobileRedirectScheme }),
6063
enableEmail = false,
6164
enableOnramp = false,
@@ -81,7 +84,7 @@ string[] excludedWalletIds
8184
else
8285
{
8386
ThirdwebDebug.Log($"Awaiting Reown connection (timeout {connectionTimeout.TotalSeconds} seconds)...");
84-
connected = await WaitForInteractiveConnectionAsync(connectionTimeout);
87+
connected = await WaitForInteractiveConnectionAsync(connectionTimeout, singleWalletId);
8588
}
8689

8790
if (!connected)
@@ -268,7 +271,7 @@ private static async Task<bool> TryResumeExistingSessionAsync()
268271
}
269272
}
270273

271-
private static async Task<bool> WaitForInteractiveConnectionAsync(TimeSpan timeout)
274+
private static async Task<bool> WaitForInteractiveConnectionAsync(TimeSpan timeout, string singleWalletId = null)
272275
{
273276
if (AppKit.ConnectorController.IsAccountConnected)
274277
{
@@ -295,7 +298,14 @@ void OnAccountConnected(object sender, AccountConnectedEventArgs args)
295298

296299
if (!AppKit.ConnectorController.IsAccountConnected)
297300
{
298-
AppKit.OpenModal();
301+
if (singleWalletId != null)
302+
{
303+
await AppKit.ConnectAsync(singleWalletId);
304+
}
305+
else
306+
{
307+
AppKit.OpenModal();
308+
}
299309
}
300310

301311
var timeoutMilliseconds = (int)Math.Max(0, timeout.TotalMilliseconds);

Packages/manifest.json

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
{
22
"dependencies": {
33
"com.nethereum.unity": "5.0.0",
4-
"com.reown.appkit.unity": "1.5.0",
5-
"com.reown.core": "1.5.0",
6-
"com.reown.core.common": "1.5.0",
7-
"com.reown.core.crypto": "1.5.0",
8-
"com.reown.core.network": "1.5.0",
9-
"com.reown.core.storage": "1.5.0",
10-
"com.reown.sign": "1.5.0",
11-
"com.reown.sign.nethereum": "1.5.0",
12-
"com.reown.sign.nethereum.unity": "1.5.0",
13-
"com.reown.sign.unity": "1.5.0",
14-
"com.reown.unity.dependencies": "1.5.0",
4+
"com.reown.appkit.unity": "1.5.1",
5+
"com.reown.core": "1.5.1",
6+
"com.reown.core.common": "1.5.1",
7+
"com.reown.core.crypto": "1.5.1",
8+
"com.reown.core.network": "1.5.1",
9+
"com.reown.core.storage": "1.5.1",
10+
"com.reown.sign": "1.5.1",
11+
"com.reown.sign.nethereum": "1.5.1",
12+
"com.reown.sign.nethereum.unity": "1.5.1",
13+
"com.reown.sign.unity": "1.5.1",
14+
"com.reown.unity.dependencies": "1.5.1",
1515
"com.unity.ide.rider": "3.0.36",
1616
"com.unity.ide.visualstudio": "2.0.23",
1717
"com.unity.mobile.android-logcat": "1.4.5",

Packages/packages-lock.json

Lines changed: 31 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -8,33 +8,33 @@
88
"url": "https://package.openupm.com"
99
},
1010
"com.reown.appkit.unity": {
11-
"version": "1.5.0",
11+
"version": "1.5.1",
1212
"depth": 0,
1313
"source": "registry",
1414
"dependencies": {
15-
"com.reown.sign.nethereum.unity": "1.5.0",
16-
"com.reown.sign.unity": "1.5.0",
17-
"com.reown.core": "1.5.0",
18-
"com.reown.unity.dependencies": "1.5.0",
15+
"com.reown.sign.nethereum.unity": "1.5.1",
16+
"com.reown.sign.unity": "1.5.1",
17+
"com.reown.core": "1.5.1",
18+
"com.reown.unity.dependencies": "1.5.1",
1919
"com.unity.vectorgraphics": "2.0.0-preview.24"
2020
},
2121
"url": "https://package.openupm.com"
2222
},
2323
"com.reown.core": {
24-
"version": "1.5.0",
24+
"version": "1.5.1",
2525
"depth": 0,
2626
"source": "registry",
2727
"dependencies": {
28-
"com.reown.core.common": "1.5.0",
29-
"com.reown.core.network": "1.5.0",
30-
"com.reown.core.storage": "1.5.0",
31-
"com.reown.core.crypto": "1.5.0",
32-
"com.reown.unity.dependencies": "1.5.0"
28+
"com.reown.core.common": "1.5.1",
29+
"com.reown.core.network": "1.5.1",
30+
"com.reown.core.storage": "1.5.1",
31+
"com.reown.core.crypto": "1.5.1",
32+
"com.reown.unity.dependencies": "1.5.1"
3333
},
3434
"url": "https://package.openupm.com"
3535
},
3636
"com.reown.core.common": {
37-
"version": "1.5.0",
37+
"version": "1.5.1",
3838
"depth": 0,
3939
"source": "registry",
4040
"dependencies": {
@@ -43,76 +43,76 @@
4343
"url": "https://package.openupm.com"
4444
},
4545
"com.reown.core.crypto": {
46-
"version": "1.5.0",
46+
"version": "1.5.1",
4747
"depth": 0,
4848
"source": "registry",
4949
"dependencies": {
50-
"com.reown.core.common": "1.5.0",
51-
"com.reown.core.network": "1.5.0",
52-
"com.reown.core.storage": "1.5.0",
53-
"com.reown.unity.dependencies": "1.5.0"
50+
"com.reown.core.common": "1.5.1",
51+
"com.reown.core.network": "1.5.1",
52+
"com.reown.core.storage": "1.5.1",
53+
"com.reown.unity.dependencies": "1.5.1"
5454
},
5555
"url": "https://package.openupm.com"
5656
},
5757
"com.reown.core.network": {
58-
"version": "1.5.0",
58+
"version": "1.5.1",
5959
"depth": 0,
6060
"source": "registry",
6161
"dependencies": {
62-
"com.reown.core.common": "1.5.0"
62+
"com.reown.core.common": "1.5.1"
6363
},
6464
"url": "https://package.openupm.com"
6565
},
6666
"com.reown.core.storage": {
67-
"version": "1.5.0",
67+
"version": "1.5.1",
6868
"depth": 0,
6969
"source": "registry",
7070
"dependencies": {
71-
"com.reown.core.common": "1.5.0"
71+
"com.reown.core.common": "1.5.1"
7272
},
7373
"url": "https://package.openupm.com"
7474
},
7575
"com.reown.sign": {
76-
"version": "1.5.0",
76+
"version": "1.5.1",
7777
"depth": 0,
7878
"source": "registry",
7979
"dependencies": {
80-
"com.reown.core": "1.5.0"
80+
"com.reown.core": "1.5.1"
8181
},
8282
"url": "https://package.openupm.com"
8383
},
8484
"com.reown.sign.nethereum": {
85-
"version": "1.5.0",
85+
"version": "1.5.1",
8686
"depth": 0,
8787
"source": "registry",
8888
"dependencies": {
89-
"com.reown.sign": "1.5.0",
89+
"com.reown.sign": "1.5.1",
9090
"com.nethereum.unity": "5.0.0"
9191
},
9292
"url": "https://package.openupm.com"
9393
},
9494
"com.reown.sign.nethereum.unity": {
95-
"version": "1.5.0",
95+
"version": "1.5.1",
9696
"depth": 0,
9797
"source": "registry",
9898
"dependencies": {
99-
"com.reown.sign.nethereum": "1.5.0",
100-
"com.reown.sign.unity": "1.5.0"
99+
"com.reown.sign.nethereum": "1.5.1",
100+
"com.reown.sign.unity": "1.5.1"
101101
},
102102
"url": "https://package.openupm.com"
103103
},
104104
"com.reown.sign.unity": {
105-
"version": "1.5.0",
105+
"version": "1.5.1",
106106
"depth": 0,
107107
"source": "registry",
108108
"dependencies": {
109109
"com.unity.modules.androidjni": "1.0.0",
110-
"com.reown.sign": "1.5.0"
110+
"com.reown.sign": "1.5.1"
111111
},
112112
"url": "https://package.openupm.com"
113113
},
114114
"com.reown.unity.dependencies": {
115-
"version": "1.5.0",
115+
"version": "1.5.1",
116116
"depth": 0,
117117
"source": "registry",
118118
"dependencies": {

0 commit comments

Comments
 (0)