如何添加保存到 phone google 按钮并通过 xamarin 移动应用程序添加支付通行证

How to add save to phone google button and add pay passes via xamarin mobile app

我已成功创建 Google 支付通行证 ASP.Net 核心支持,其余 api 成功 return JWT 令牌。而且我使用了保存到 phone web 按钮并使用了工作正常的 JWT 但我需要将通行证与我的 Xamarin Forms 应用程序集成,在 xamrin 中我如何添加保存到 phone 按钮以及如何绑定JWT 和那个按钮?

终于,我找到了解决办法。如果您的后端服务器 return 您的 google 支付通行证的 JWT,您可以通过依赖服务在 Xamarin 表单中实现此目的。

如果可以使用 JWT link 和 Intent,JWT POST 请求方法和原生 Android SDK。请参考这个guidelines

我的通行证类型是忠诚卡,所以我用过JWT link and intent method

在将通行证与您的应用程序集成之前,您可以使用 chrome 浏览器测试您的 JWT。请在chrome浏览器中用你的JWT点击这个(https://pay.google.com/gp/v/save/{jwt_generated})url,如果JWT没问题,你会在浏览器中看到pass

实现

  1. 在您的 PCL 项目中创建一个界面

          namespace App.DependencyServices
          {
              public interface IGPayPass
              {
                 void LoadGPayPass(string JWT);
              }
          }
    
  2. 在您的 Android 项目中创建本机实现

    public class GPayImplementation : IGPayPass
    {
     /// <summary>
     ///     summary:
     ///         This methode load the google pay pass from the JWT and open the pay passes in Google pay app
     ///         To show the pass in google pay we have to create an ACTION_VIEW
     ///         If pass is the loyality pass we can use the JWT link and intent method(https://developers.google.com/pay/passes/guides/get-started/implementing-the-api/save-to-google-pay#use-jwt-link-and-intent)
    ///         To load the pass send the https request to google pass class object like https://pay.google.com/gp/v/save/{jwt_generated}
    ///
    ///     parameters:
    ///         JWT : The server return this token for pay passes and pass via dependency service to this native implementation
    ///
    ///     returns:
    ///
    /// </summary>
    /// <param name="JWT"></param>
       public void LoadGPayPass(string JWT)
       {
          //create context
          Context context = Android.App.Application.Context;
    
          string url = "https://pay.google.com/gp/v/save/" + JWT;
    
          //Send the https request to google pay pass class object via Android intent
          Intent intent = new Intent(Intent.ActionView, Uri.Parse(url));
    
          //Assign new task Flag for intent otherwise runtime exepption will return
          intent.AddFlags(ActivityFlags.NewTask);
          context.StartActivity(intent);
       }
    }
    
  3. 通过依赖服务使用 PCL 项目中的本机实现

            if (response.HttpCode == HttpStatusCode.OK)
            {
                ResponseSting = response.Results.ToString();
    
                //Remove quates from the JWT string
                MembershipCardAndroidJWT = ResponseSting.TrimStart('"').TrimEnd('"');
    
                //Pass The JWT string via dependency service to the Anroid native Environment
                DependencyService.Get<IGPayPass>().LoadGPayPass(MembershipCardAndroidJWT);
            }
    

在 UI 中,没有像 google 网络按钮那样的任何默认按钮,但您必须遵循品牌指南 (https://developers.google.com/pay/passes/guides/get-started/api-guidelines/brand-guidelines)

您可以使用任何类型的按钮并通过 onclik 或命令触发此方法

此方法使用来自服务器的 pass JWT 并传递到 google 钱包