如何从Xamarin表单应用程序自动为.pkpass文件启动Apple钱包

时间:2019-11-25 13:56:11

标签: xamarin.forms xamarin.ios wallet

我已经成功创建了.pkpass文件,并且api成功返回了.pkpass文件。在Xamarin表单中,我使用了API,并尝试将.pkpass文件添加到钱包中,但是钱包不会自动启动。

通过Xamarin应用程序从api使用的文件工作正常,该文件没有问题。我已作为电子邮件附件发送并下载了附件-.pkpass文件随钱包应用程序自动打开。

public async Task DigitalMembershipCardApple()
    {
        string accesstoken = _dataHelper.GetAccessTokenFromDBAsync().Result;
        try
        {
            _oHttpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accesstoken);
            HttpResponseMessage response = await _oHttpClient.GetAsync(new Uri(Constants.Urls.DigitalMembershipCardApple + _dataHelper.GetPersonID()));

            byte[] filebytes = await response.Content.ReadAsByteArrayAsync();

            string filePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal), Constants.CISIMembershipCardFields.FileDownloadName);

            if (File.Exists(filePath))
            {
                File.Delete(filePath);
                File.WriteAllBytes(filePath, filebytes);
            }
            else
            {
                File.WriteAllBytes(filePath, filebytes);
            }

            await Launcher.OpenAsync(new OpenFileRequest
            {
                File = new ReadOnlyFile(filePath, Constants.CISIMembershipCardFields.MimeTypeApple)
            });
        }
        catch (Exception ex)
        {
            Debug.WriteLine(ex.StackTrace);
            throw ex;
        }
    }

我还使用了Xamarin基本启动器,但这没有帮助。

enter image description here enter image description here 非常感谢您的快速帮助

2 个答案:

答案 0 :(得分:1)

//Called from Xamarin Forms, now on iOS Project,
public async void AddToWallet(byte[] passByteArray)
{
NSData nsdata = NSData.FromArray(passByteArray);
NSError err = new NSError(new NSString("42"), -42);
PKPass newPass = new PKPass(nsdata, out err);

PKAddPassesViewController pkapvc = new PKAddPassesViewController(newPass);

await     UIApplication.SharedApplication.KeyWindow.RootViewController.
PresentViewControllerAsync(pkapvc, true);
}

答案 1 :(得分:0)

在读PassKit in Xamarin.iOS的文档之前,Adding Passes into Wallet部分中我没有使用Apple电子钱包,它说:

  

可以通过以下方式将通行证添加到电子钱包:

     
      
  • Conduit Apps –它们不直接处理通行证,它们只是加载通行证文件,并向用户显示将其添加到电子钱包的选项。
  •   
  • 伴侣应用程序–由提供商编写,用于分发通行证,并提供其他功能来浏览或编辑它们。 Xamarin.iOS应用程序具有对PassKit API的完全访问权限,以创建和处理通行证。然后可以使用PKAddPassesViewController将通行证添加到电子钱包。此过程在本文档的“伴侣应用程序”部分中有更详细的说明。
  •   

Mail是管道应用程序,它将附件识别为通行证,因此钱包应用程序会自动打开。

Your xamarin app是Companion App,然后可以使用PKAddPassesViewController将通行证添加到电子钱包。在您的应用程序中读取文件不会打开钱包应用程序。

我的想法是,您可以下载文件并按照步骤here通过在iOS项目中使用dependency-service打开钱包应用。