2014-11-21 131 views
0

我正在使用Passbook实施ios应用程序。所以我已经实现了ASP.net服务器来生成通行证。该通道从服务器端成功生成。并且当我双击我的mac上的pass.pkpass文件时,pass查看器显示我从服务器创建的pass。但当我试图将其拖到IOS模拟器时,据说“Safari浏览器无法下载此文件”。我已通过重新生成证书进行尝试。但没有任何工作。pkpass未在模拟器中显示

这里是我的pass.json文件

{ 
    "passTypeIdentifier": "<mypassIdenttity>", 
    "formatVersion": 3, 
    "organizationName": "<my organization name>", 
    "serialNumber": "<my serial number>", 
    "teamIdentifier": "<my team identifier>", 
    "description": "123", 
    "foregroundColor": "rgb(255,255,255)", 
    "backgroundColor": "rgb(55,117,50)", 
    "logoText": "Zekes", 
    "barcode": { 
    "message": "123456789", 
    "format": "PKBarcodeFormatPDF417", 
    "messageEncoding": "iso-8859-1" 
    }, 
    "storeCard": { 
    "primaryFields": [ 
    { 
    "key": "balance", 
    "label": "remaining balance", 
    "value": 21.75 
    } 
], 
"auxiliaryFields": [ 
    { 
    "key": "deal", 
    "label": "Deal of the Day", 
    "value": "Lemons" 
    } 
] 
} 
} 

,这里是我的manifest.json

{ 
    "pass.json": "285c63c6580d946eb360e0c6e68d1fa072ea20e9", 
    "logo.png": "25de09e2d3b01ce1fe00c2ca9a90a2be1aaa05cf", 
    "icon.png": "0296b01347b3173e98438a003b0e88986340b2d8", 
    "[email protected]": "5afd9585b08c65fdf105a90c8bd643407cba2787", 
    "strip.png": "736d01f84cb73d06e8a9932e43076d68f19461ff", 
    "[email protected]": "468fa7bc93e6b55342b56fda09bdce7c829d7d46" 
} 

我已经出口我的通行证证书作为P12文件和专用密钥为P12文件。并将它们复制到我的项目路径[在服务器实现]

这里是我如何使用清单和证书文件生成我的签名文件。

static void SignManifest(ZipFile zipFile, byte[] manifestFileData, X509Certificate2 certificate) 
    { 
     var cert = DotNetUtilities.FromX509Certificate(certificate); 

     var privateKey = DotNetUtilities.GetKeyPair(certificate.PrivateKey).Private; 
     var generator = new CmsSignedDataGenerator(); 

     generator.AddSigner(privateKey, cert, CmsSignedDataGenerator.DigestSha1); 

     var certList = new System.Collections.ArrayList(); 
     //////////////////////////////////////////////////////// 
     var a1Cert = new X509Certificate2(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "wwrd.cer")); 
     // var a2Cert = new X509Certificate2(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "AppleIncRootCertificate.cer")); 
     /////////////////////////////////////////////////////////// 
     certList.Add(cert); 
     certList.Add(DotNetUtilities.FromX509Certificate(a1Cert)); 
     //certList.Add(DotNetUtilities.FromX509Certificate(a2Cert)); 

     Org.BouncyCastle.X509.Store.X509CollectionStoreParameters PP = new Org.BouncyCastle.X509.Store.X509CollectionStoreParameters(certList); 
     Org.BouncyCastle.X509.Store.IX509Store st1 = Org.BouncyCastle.X509.Store.X509StoreFactory.Create("CERTIFICATE/COLLECTION", PP); 

     generator.AddCertificates(st1); 

     var content = new CmsProcessableByteArray(manifestFileData); 
     var signedData = generator.Generate(content, false); 

     var data = signedData.GetEncoded(); 

     zipFile.AddEntry("signature", data); 
    } 

我可以成功生成pass.pkpass,但为什么它不在模拟器中运行?有人能告诉我原因吗?我真的在这里呆了两天了..请帮助我。

+0

什么控制台日志告诉你吗? – PassKit 2014-11-21 09:47:59

+0

@PassKit我还没有尝试从一个iOS应用程序加载它..但我知道,通过可以加载拖放到模拟器。所以我现在没有控制台日志输出.. – Darshana 2014-11-21 10:06:05

+0

当您在.pkpass包中拖动时,仍然可以打开控制台。它应该让你对发生的事情有所了解。 – PassKit 2014-11-21 10:35:40

回答

相关问题