Google 登录 Xamarin 绑定

Google SignIn Xamarin Binding

我正在尝试绑定 Google SignIn SDK 2.0 here

我对代表具体 class 而不是 ISignInDelegate 接口的 Delegate generated 有疑问。

这个 ApiDefinition 有什么问题?

[BaseType (typeof (NSObject), Name = "GIDSignInDelegate")]
    [Protocol]
    [Model] 
    public interface SignInDelegate
    {
        // @required -(void)signIn:(GIDSignIn *)signIn didSignInForUser:(GIDGoogleUser *)user withError:(NSError *)error;
        [Abstract]
        [Export ("signIn:didSignInForUser:withError:"), EventArgs ("SignInDelegateDidSignInForUser")]
        void DidSignInForUser (SignIn signIn, GoogleUser user, NSError error);

        // @optional -(void)signIn:(GIDSignIn *)signIn didDisconnectWithUser:(GIDGoogleUser *)user withError:(NSError *)error;
        [Export ("signIn:didDisconnectWithUser:withError:"), EventArgs ("SignInDelegateDidDisconnect")]
        void DidDisconnect (SignIn signIn, GoogleUser user, NSError error);
    }

您展示的内容很好,但部分不完整。您要求同时生成协议(接口)和模型(具体)类型。没关系,但名称是针对模型的(协议生成时带有 I 前缀)。

从你的 link 我看到你的委托 属性 是用 SignInDelegate 生成的,因为它是类型,例如

public SignInDelegate Delegate {

这就是模型(具体)类型,可能是因为它是您创建绑定(到模型,而不是协议)的方式。如果是这样,那么只需添加

interface ISignInDelegate {}

在您的绑定文件中(例如,就在 SignInDelegate 的绑定上方)并将此类型用于委托 属性,例如

public ISignInDelegate Delegate { ... }

IOW 您只是(较早地)提供了生成器将生成的内容,并允许您在编写绑定时使用接口(用于协议)。