How to Integrate Huawei Account kit

305 views Asked by At

Currently I'm using Huawei Plugin From EvilMindDev.

Below is AccountManager script.

using HuaweiMobileServices.Id;
using HuaweiMobileServices.Utils;
using System;
using UnityEngine;

namespace HmsPlugin
{
    public class AccountManager : MonoBehaviour
    {

    public static AccountManager GetInstance(string name = "AccountManager") => GameObject.Find(name).GetComponent<AccountManager>();

    private static HuaweiIdAuthService DefaultAuthService
    {
        get
        {
            Debug.Log("[HMS]: GET AUTH");
            var authParams = new HuaweiIdAuthParamsHelper(HuaweiIdAuthParams.DEFAULT_AUTH_REQUEST_PARAM).SetIdToken().CreateParams();
            Debug.Log("[HMS]: AUTHPARAMS AUTHSERVICE" + authParams);
            var result = HuaweiIdAuthManager.GetService(authParams);
            Debug.Log("[HMS]: RESULT AUTHSERVICE"+ result);
            return result;
        }
    }

    public AuthHuaweiId HuaweiId { get; private set; }
    public Action<AuthHuaweiId> OnSignInSuccess { get; set; }
    public Action<HMSException> OnSignInFailed { get; set; }

    private HuaweiIdAuthService authService;

    // Start is called before the first frame update
    void Awake()
    {
        Debug.Log("[HMS]: AWAKE AUTHSERVICE");
        authService = DefaultAuthService;
        Debug.Log("DefaultAuthService : "+DefaultAuthService);
        Debug.Log("authService : "+authService);
    }

    public void SignIn()
    {
        Debug.Log("[HMS]: Sign in " + authService);
        authService.StartSignIn((authId) =>
        {
            HuaweiId = authId;
            Debug.Log("HuaweiId : "+HuaweiId);
            OnSignInSuccess?.Invoke(authId);
        }, (error) =>
        {
            HuaweiId = null;
            OnSignInFailed?.Invoke(error);
        });
    }

    public void SignOut()
    {
        Debug.Log("authService.SignOut");
        authService.SignOut();
        HuaweiId = null;
    }
}
}

Below is AccountSignIn script.

using HuaweiMobileServices.Id;
using HuaweiMobileServices.Utils;
using UnityEngine;
using UnityEngine.UI;
using HmsPlugin;
public class AccountSignIn : MonoBehaviour
{

private const string NOT_LOGGED_IN = "No user logged in";
private const string LOGGED_IN = "{0} is logged in";
private const string LOGIN_ERROR = "Error or cancelled login";

private Text loggedInUser;
private AccountManager accountManager;

// Start is called before the first frame update
void Start()
{
    loggedInUser = GameObject.Find("LoggedUserText").GetComponent<Text>();
    loggedInUser.text = NOT_LOGGED_IN;

    //accountManager = AccountManager.GetInstance();
    accountManager = GetComponent<AccountManager>();
    accountManager.OnSignInSuccess = OnLoginSuccess;
    accountManager.OnSignInFailed = OnLoginFailure;
    LogIn();
}

public void LogIn()
{
    accountManager.SignIn();
}

public void LogOut()
{
    accountManager.SignOut();
    loggedInUser.text = NOT_LOGGED_IN;
}

public void OnLoginSuccess(AuthHuaweiId authHuaweiId)
{
    loggedInUser.text = string.Format(LOGGED_IN, authHuaweiId.DisplayName);
}

public void OnLoginFailure(HMSException error)
{
    loggedInUser.text = LOGIN_ERROR;
}
}

Everytime I try to SignIn it will give me this error. This is HuaweiIdAuthService.

Even if I try the demo provided will give me the same error. If I try debug using Android Studio it will still give me the same error.

public void SignIn()
{
    Debug.Log("[HMS]: Sign in " + authService);
    authService.StartSignIn((authId) =>
    {
        HuaweiId = authId;
        Debug.Log("HuaweiId : "+HuaweiId);
        OnSignInSuccess?.Invoke(authId);
    }, (error) =>
    {
        HuaweiId = null;
        OnSignInFailed?.Invoke(error);
    });
}

the authService doesn't return anything. Where can I get that from ?

2

There are 2 answers

0
gmYsf On

This plugin have 2 branch for Unity 2019 and Unity 2018.

  1. You should activate Account Kit API in Huawei Appgallery
  2. Check configuration AndroidManifest file
  3. Check Agconnect-service.json file
3
zhangxaochen On

It is a null pointer. Please check for unassigned objects. If you cannot find anything, please delete project and install again cause sometimes these kind of things happening.