Skip to content

Commit

Permalink
fix android login
Browse files Browse the repository at this point in the history
  • Loading branch information
fraidev committed Oct 24, 2023
1 parent d4f80a6 commit c895fd8
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 36 deletions.
1 change: 1 addition & 0 deletions Runtime/Scripts/Tezos/Tezos.cs
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ public Tezos(DAppMetadata providedDAppMetadata = null)
};

Wallet = new WalletProvider(dAppMetadata);
Wallet.Connect(WalletProviderType.beacon, false);

MessageReceiver = Wallet.MessageReceiver;
MessageReceiver.AccountConnected += _ =>
Expand Down
63 changes: 27 additions & 36 deletions Runtime/Scripts/Tezos/Wallet/WalletProvider.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
using System.Collections;
using System.Text.Json;
using Beacon.Sdk.Beacon.Sign;
using Beacon.Sdk.Core.Domain.Entities;
using TezosSDK.Beacon;
using TezosSDK.Helpers;
using UnityEngine;
Expand Down Expand Up @@ -33,22 +34,6 @@ private void InitBeaconConnector()
? unityBeacon.GetComponent<WalletMessageReceiver>()
: new GameObject("UnityBeacon").AddComponent<WalletMessageReceiver>();

// Assign the BeaconConnector depending on the platform.
#if !UNITY_EDITOR && UNITY_WEBGL
_beaconConnector = new BeaconConnectorWebGl();
#else
_beaconConnector = new BeaconConnectorDotNet();
(_beaconConnector as BeaconConnectorDotNet)?.SetWalletMessageReceiver(MessageReceiver);
Connect(WalletProviderType.beacon, withRedirectToWallet: false);

// todo: maybe call RequestTezosPermission from _beaconConnector?
MessageReceiver.PairingCompleted += _ =>
{
_beaconConnector.RequestTezosPermission(
networkName: TezosConfig.Instance.Network.ToString(),
networkRPC: TezosConfig.Instance.RpcBaseUrl);
};
#endif
MessageReceiver.HandshakeReceived += handshake => { _handshake = handshake; };
MessageReceiver.AccountConnected += account =>
{
Expand All @@ -72,28 +57,35 @@ private void InitBeaconConnector()
CoroutineRunner.Instance.StartWrappedCoroutine(
new CoroutineWrapper<object>(MessageReceiver.TrackTransaction(transactionHash)));
};
// Assign the BeaconConnector depending on the platform.
#if !UNITY_EDITOR && UNITY_WEBGL
_beaconConnector = new BeaconConnectorWebGl();
#else
_beaconConnector = new BeaconConnectorDotNet();
MessageReceiver.PairingCompleted += _ =>
{
_beaconConnector.RequestTezosPermission(
networkName: TezosConfig.Instance.Network.ToString(),
networkRPC: TezosConfig.Instance.RpcBaseUrl);
};
(_beaconConnector as BeaconConnectorDotNet)?.SetWalletMessageReceiver(MessageReceiver);
#endif
}

// Below there are some async/wait workarounds and magic numbers,
// we should rewrite the Beacon connector to be coroutine compatible.
private IEnumerator OnOpenWallet(bool withRedirectToWallet)
private IEnumerator OpenWallet(bool withRedirectToWallet)
{
if (string.IsNullOrEmpty(_handshake))
{
//No handshake, Waiting for handshake...
yield return new WaitForSeconds(2.5f);
}
yield return new WaitUntilForSeconds(() => !string.IsNullOrEmpty(_handshake), 2.5f);

#if UNITY_ANDROID || UNITY_IOS
if (withRedirectToWallet){
_beaconConnector.RequestTezosPermission(
networkName: TezosConfig.Instance.Network.ToString(),
networkRPC: TezosConfig.Instance.RpcBaseUrl);
yield return new WaitForSeconds(2.5f);
if (!string.IsNullOrEmpty(_handshake)){
Application.OpenURL($"tezos://?type=tzip10&data={_handshake}");
}
}
if (!withRedirectToWallet) yield break;
#if UNITY_IOS
// TODO: improve background peer pairing for iOS, then we can remove this workaround
_beaconConnector.RequestTezosPermission(
networkName: TezosConfig.Instance.Network.ToString(),
networkRPC: TezosConfig.Instance.RpcBaseUrl
);
#endif
Application.OpenURL($"tezos://?type=tzip10&data={_handshake}");
#endif
}

Expand All @@ -102,16 +94,15 @@ public void OnReady()
_beaconConnector.OnReady();
}

public void Connect(WalletProviderType walletProvider, bool withRedirectToWallet)
public void Connect(WalletProviderType walletProvider, bool withRedirectToWallet = true)
{
_beaconConnector.InitWalletProvider(
network: TezosConfig.Instance.Network.ToString(),
rpc: TezosConfig.Instance.RpcBaseUrl,
walletProviderType: walletProvider,
dAppMetadata: _dAppMetadata);

_beaconConnector.ConnectAccount();
CoroutineRunner.Instance.StartWrappedCoroutine(OnOpenWallet(withRedirectToWallet));
CoroutineRunner.Instance.StartWrappedCoroutine(OpenWallet(withRedirectToWallet));
}

public void Disconnect()
Expand Down

0 comments on commit c895fd8

Please sign in to comment.