Hi, I'm building an app to build and update a wallet pass.
I want to send a push notification to the Wallet app to update the pass, but I got the following error.
:status: 403
apns-id: 3EDEDFEA-C8F1-215A-D9F3-2FA7D6C5AF0C
{reason: MissingProviderToken}
I am using the certificate and authentication header like this.
var storage = admin.storage().bucket()
var signerCert = (await getRawBody(storage.file('signerCert.pem').createReadStream())).toString();
var signerKey = (await getRawBody(storage.file('signerKey.pem').createReadStream())).toString();
// 方法1(クライアント立てる)
const client = http2.connect(url);
client.on('socketError', (err) => console.error('ソケットエラー!',err));
client.on('error', (err) => console.error('エラー!',err));
var header = {
'Authrorization': 'Bearer '+pushToken
}
const req = client.request({
':method': 'POST',
':path': path,
'cert': signerCert,
'key': signerKey,
'passphrase': '',
'headers': JSON.stringify(header),
});
req.on('response', (headers, flags) => {
for (const name in headers) {
console.log(`${name}: ${headers[name]}`);
}
});
req.setEncoding('utf8');
let data = '';
req.on('data', (chunk) => { data += chunk; });
req.on('end', () => {
console.log(`\n${data}`);
client.destroy();
});
req.end();
Language is Typescript.
The code sits in Cloud Functions.
Is there something wrong with the code?
Wallet
RSS for tagOffer rewards cards boarding passes tickets gift cards and more using Wallet.
Posts under Wallet tag
126 Posts
Sort by:
Post
Replies
Boosts
Views
Activity
Hello,
Is there an option to restrict a pass for use only at certain geographical locations?
BR,
Daniel
I have gained the PassKit access, but don't know how to configure com. Apple. Developer. PassKit. Pass the presentation - suppression the permissions.
Who can tell us the detailed process, which Capabilities should be configured in the App ID?
I want to send APN to update a pass in the Wallet app.
Followed this guideline.
https://developer.apple.com/documentation/walletpasses/adding_a_web_service_to_update_passes#3733254
I tried with Typescript (Firebase Functions) like this.
var path = "/3/device/"+pushToken
var url = "https://api.push.apple.com:443"+path
const response = await fetch(url, {
method: 'POST',
body: null,
headers: {
'apns-topic': 'com.colorfull.walletPass',
'apns-push-type': 'background',
'connection': 'keep-alive'
}
});
Got this error.
TypeError: fetch failed
Tried with Flutter like this.
var path = "/3/device/$pushToken";
var url = "https://api.push.apple.com:443$path";
Response resp = await post(Uri.parse(url), headers: {
'apns-topic': 'com.colorfull.walletPass',
'apns-push-type': 'background',
'connection': 'keep-alive'
}, body: {});
Got this error.
ClientException: Invalid request method, uri=https://api.push.apple.com/3/device/688a3d6bf83526f00f6fb3d8dd197578f665dea0eeba7aebbe68c61f06bad198
Obviously I'm doing it all wrong, but there is no clear guideline.
How can I send APN??
Hi,
I can't complete provisioning flow on Sandbox Environment. You can find error response and PKAddPaymentPassRequestConfiguration below. How can I find the issue?
guard let addPaymentPassRequestConfiguration = PKAddPaymentPassRequestConfiguration(
encryptionScheme: .ECC_V2
) else { return }
addPaymentPassRequestConfiguration.style = .payment
addPaymentPassRequestConfiguration.cardholderName = debitCard.cardholder
addPaymentPassRequestConfiguration.primaryAccountSuffix = String(debitCard.cardNumber.suffix(4))
addPaymentPassRequestConfiguration.localizedDescription = debitCard.cardType.cardDisplayName
addPaymentPassRequestConfiguration.paymentNetwork = .girocard
https://crt-pod1-smp-device.apple.com:443/broker/v4/devices/--------------/cards 500 Time profile: 0.207283 seconds
{
x-conversation-id = "9affa45be1a1499381c2136dd3971443"
Vary = "accept-language"
Content-Type = "application/json"
x-pod = "crt-pod1"
x-keystone-correlationid = "A43237AA-DF0F-4B53-8A3D-4729CFC6C03E"
Date = "Tue, 28 Nov 2023 15:17:12 GMT"
x-apay-service-response-details = "via_upstream"
Content-Length = "81"
x-envoy-upstream-service-time = "36"
x-pod-region = "paymentpass.com.apple"
}
{
statusCode = 500;
statusMessage = "Broker Service Response exception";
}
Hello Sir/Madam,
In Apple Car Keys Specification R1 - Developer Preview 3 page 24, table 2-9, is mentioned the "NFC Protocol Start " parameter with the value of 5ms.
Looks like this time was defined to include all the NFC procedures regarding protocol discovery and anti-collision, until the Select AID for the CCC applet command is issued.
Quote: "NFC protocol start includes all ISO 14443-3 commands required to setup the NFC communication (REQA, ATQA, AC, etc.).".
This requirement seems highly unfeasible on our side. The typical time on some of our products is between 30-50ms for the NFC protocol link set up. This includes the unmodulated carrier time, the VASUP command, REQA/ATQA sequence, HLTA/WUPA/ATQA sequence, ANTICOLLISION sequence, SELECT device ID/SAK/RATS/ATS sequence, all of which impossible to fit in 5ms even if we reduce everything to back to back communication and no delays between commands.
Can you further define what the "NFC Protocol Start " 5ms typical time means and how to interpret this time, for example:
Can you enlist the starting point and ending point of measuring this 5ms time?
Is this a strict requirement? What is the accepted time range if otherwise? (the document only mentions this is a "typical" time).
Does this time also include the RF unmodulated field before the first NFC data transmission? (only this time can take up to 5ms according to ISSO-14443-3).
Thanks for your support!
Peter.
Hi All
Earlier, I had created some Apple pass without 'webServiceURL' using PHP.
Those pass were added in the Apple wallet successfully,
Now. I need to update the existing those passes.
Are there options to update those existing passes.
Thanks in advance
My provisioning code works in my main app, but when I try to use it in my app clip it fails with this:
The operation couldn’t be completed. (PKPassKitErrorDomain error 2.)
I'm having an issue due to how vague this particular error is and how little documentation exists to explain it? I've been looking around the PassKit and Apple Pay documentation for more specific information. But I'm not certain what to do just yet.
After provisioning and receiving the digital wallet token, adding the request to the wallet produces the unsupportedVersionError.
My initial thought is because the appClip bundle identifier does not match the identifier that the issuer expects, but I'm not entirely sure. I have the entitlement necessary to provision passes on apples end.
Can Apple pay support insufficient funds cards?
If yes please share the details
My idea is to help small businesses (without IT infrastucture) generate apple wallet passes for their customers (to identify them later). All the data would be stored in my database and will be accessible by businesses. So Customer would show apple wallet pass which business would be able to scan and fetch customer info from my database. And businesses would be able to create/modify their passes through my app.
Can I generate apple wallet passes using my pass type id?
In https://developer.apple.com/forums/thread/48719, one of the comments mentioned:
You agree not to ... use Your Pass Type ID to sign a third party's pass.
I haven't seen this rule anywhere on apple's website, so not sure if it is still active.
and distribution needs to be under Your own trademark or brand.
Does that mean I can't generate passes for other businesses? Although, I am providing service related to wallet passes and pass generation is not part of the main service itself.
If so, is there any legal workaround for my use case? E.g. maybe putting my company logo as main logo etc.
Thanks!
P.S. creating paid apple developer account to obtain business' own pass type id and certificate is not a viable solution
Hi,
If I remove a Pass Type Identifier that is linked with a production (currently live) Pass Type ID certificate, will it affect my production pass certificate?
When I press delete it states: "Delete Pass Type ID"
"Deleting this Pass Type ID will prevent you from sending future updates to any associated passes. Installed passes will not be affected."
But I want to make sure I will not be breaking anything in production.
Any help?
Many Thanks
I have by accident linked 5 certificates to my Pass Type ID. 5 is the limit and I am struggling to get one removed.
Can I delete the Pass Type ID and create a new one?
Will this break the app I have in production using the Pass Certificate?
Thank you
Hi All
I have successfully created an Apple pass using PHP.
The pass is added to the Apple wallet successfully, and the pass auto update working fine
Now, is there an option to update the pass, when I open the Apple wallet? If Yes, please help me with the steps to follow.
please help me on this to solve the problem
Thanks in advance
I have a Apple Wallet Pass with a back field declared like so:
{
key: 'EnableLink',
label: 'Powered by',
value: 'Enable.tech',
attributedValue: "<a href='https://enable.tech'>Enable.tech</a>"
}
When the wallet pass is active (side button pressed twice), and the user goes to the back of the pass, the link is visible and highlighted, however tapping it does not open the linked webpage in a browser. There are tel: links as well, that cannot be interacted with as well.
Anyone know a workaround or a fix?
Our card is added to wallet app, and now we have updated our app icon. But wallet app show old icon on notifications. This doesn't happen for newly added card. Only happens to older added cards (before icon update).
Is there a way to let wallet app to update the icon for older cards.
We requested the In-App Provisioning entitlement and received the email from Apple said:
“The entitlement for In-App Provisioning has been assigned to your account, and you can now configure this capability for eligible apps. ”
Then we enabled the In-App Provisioning capability in the Additional Capabilities tab of App ID Configuration, and according to Apple’s instruction, there should be an entitlements drop-down menu in the provision profile edition page,but we‘ve never seen such menu in our provision profile.
So is there any suggestion about this problem?
Hi guys,
I want to build a referral program wherein current users are rewarded for inviting friends to join my app/website.
I also wanted to keep the accounts linked so that recruiting users can get rewarded every time a new user they recruited purchases something.
I want to just give the users points, I'm not offering cash or subscription discounts. similar to how game invites work.
through my research into the topic I have found dynamic links with flutter and firebase. deep deferred links, QR code deferred links, and some work around that included taking the user to a website copying the code to their clipboard, then pasting it into a hidden textfield to verify and track the code
can anyone help me get started?
The domains registered for several of my merchant ID's had their status changed to “Pending” in some moment, but I didn’t receive any alert.
We just realized that this happened when there was a payment attempt and it was denied.
How can this be avoided in the future?
Is there some email registered to receive messages alerting for these changes?
Can I update it?
Hi all,
So, I've always used Apple Gift Cards to buy apps. Buy a card, redeemed it.
I'd like to gift an app to my wife.
But AppStore demands that I have an another payment method, like my card or Apple Pay.
Why?
AppStore can just debit my gift card, right?
I am trying to add girocard in my wallet Sandbox from our app but I am getting an error like in screenshot. Even through PKAddPaymentPassRequestConfiguration is correct, I can't continue provisioning.
In that webpage, there is only information regarding credit cards. https://developer.apple.com/apple-pay/sandbox-testing/
Can you please help me regarding that issue?
guard let addPaymentPassRequestConfiguration = PKAddPaymentPassRequestConfiguration(
encryptionScheme: .ECC_V2
) else { return }
addPaymentPassRequestConfiguration.style = .payment
addPaymentPassRequestConfiguration.cardholderName = debitCard.cardholder
addPaymentPassRequestConfiguration.primaryAccountSuffix = String(girocard.cardNumber.suffix(4))
addPaymentPassRequestConfiguration.localizedDescription = girocard.cardType.cardDisplayName
addPaymentPassRequestConfiguration.paymentNetwork = .girocard
guard let addPaymentPassViewController = AddPaymentPassViewController(
requestConfiguration: addPaymentPassRequestConfiguration,
delegate: self
) else { return }
let addPaymentPassRequest = PKAddPaymentPassRequest()
addPaymentPassRequest.encryptedPassData = giroCardPaymentPassData.encryptedData
addPaymentPassRequest.activationData = giroCardPaymentPassData.activationData
addPaymentPassRequest.ephemeralPublicKey = giroCardPaymentPassData.ephemeralPublicKey
handler(addPaymentPassRequest)