I received an email from the app store that contained this message
We’re reaching out to let you know that the subscriptionPricePoints endpoint now requires a territory relationship filter. If you use the App Store Connect API to configure your subscriptions, please note that you'll be required to define this filter in an upcoming release.
but I can't understant it, please could anyon explain what they want or what should I do?
my app was built with Flutter and had in-app purchase
App Store Connect API
RSS for tagThe App Store Connect API helps you automate tasks usually done on the Apple Developer website and App Store Connect.
Post
Replies
Boosts
Views
Activity
Features being implemented
store External Payment Report
Implementation Language and Framework
JAVA springboot
a problem
https://developer.apple.com/documentation/externalpurchaseserverapi/send-external-purchase-report?changes=latest_major
I send jwt tokens in the header to the apple endpoint
If a 401 authentication error occurs all of a sudden while being sent successfully in the beginning, a 401 error has occurred since then
What I checked
Tokens are being re-created and sent every time a report is sent
I'm currently using aws ec2 load balancer and I get 401 error and when I shut down Tomcat and restart it, it works normally and then the above problem occurs again
Even if I send the token that I used to send since 401 happened using postman, 401 error
If my local server issues tokens again with the same content and sends the report to postman, it works fine
Considering the above problems and the confirmed contents, why 401 problems suddenly occur
I'd like to know how to solve that part.
private String keyId="******";
private String issuerId="******";
private String bundleId = "ai.******";
Instant now = Instant.now();
Date issuedAt = Date.from(now);
Date expiresAt = Date.from(now.plusSeconds(20 * 60));
public String createToken(){
try {
PrivateKey key = getPrivateKey();
return Jwts.builder()
.setHeaderParam("alg", "ES256")
.setHeaderParam("kid", keyId)
.setHeaderParam("typ", "JWT")
.setIssuer(issuerId)
.setIssuedAt(issuedAt)
.setExpiration(expiresAt)
.setAudience("appstoreconnect-v1")
.signWith(key, SignatureAlgorithm.ES256)
.claim("bid",bundleId)
.compact();
}catch (Exception e){
e.printStackTrace();
throw new RuntimeException("JWT error", e);
}
}
private static PrivateKey getPrivateKey() throws IOException, NoSuchAlgorithmException, InvalidKeySpecException {
InputStream privateKey = new ClassPathResource("certs/SubscriptionKey_***********.p8").getInputStream();
String result = new BufferedReader(new InputStreamReader(privateKey)) .lines().collect(Collectors.joining("\n"));
String key = result.replace("-----BEGIN PRIVATE KEY-----\n", "")
.replace("-----END PRIVATE KEY-----", "")
.replace("\n", "");
byte[] decoded = Base64.getDecoder().decode(key);
PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(decoded);
KeyFactory keyFactory = KeyFactory.getInstance("EC");
return keyFactory.generatePrivate(keySpec);
}
We are producing a function to submit an Apple external purchase report.
When I sent the report, I created a jwt token and put it in the header
There are times when you operate normally and suddenly get a 401 error.
When I checked the entity to log before sending the report, I found that the header was well contained and the token changed every time I called.
Once you get 401 error, you have to shut down your server(tomcat) once and run it again
May I know what kind of problem is causing this phenomenon?
Or can I find a way to fix the problem? The server is using aws ec2 load balancer
The back language is java spring boot
jwt token create code
private String keyId="******";
private String issuerId="******";
private String bundleId = "ai.******";
Instant now = Instant.now();
Date issuedAt = Date.from(now);
Date expiresAt = Date.from(now.plusSeconds(20 * 60));
public String createToken(){
try {
PrivateKey key = getPrivateKey();
return Jwts.builder()
.setHeaderParam("alg", "ES256")
.setHeaderParam("kid", keyId)
.setHeaderParam("typ", "JWT")
.setIssuer(issuerId)
.setIssuedAt(issuedAt)
.setExpiration(expiresAt)
.setAudience("appstoreconnect-v1")
.signWith(key, SignatureAlgorithm.ES256)
.claim("bid",bundleId)
.compact();
}catch (Exception e){
e.printStackTrace();
throw new RuntimeException("JWT error", e);
}
}
private static PrivateKey getPrivateKey() throws IOException, NoSuchAlgorithmException, InvalidKeySpecException {
InputStream privateKey = new ClassPathResource("certs/SubscriptionKey_***********.p8").getInputStream();
String result = new BufferedReader(new InputStreamReader(privateKey)) .lines().collect(Collectors.joining("\n"));
String key = result.replace("-----BEGIN PRIVATE KEY-----\n", "")
.replace("-----END PRIVATE KEY-----", "")
.replace("\n", "");
byte[] decoded = Base64.getDecoder().decode(key);
PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(decoded);
KeyFactory keyFactory = KeyFactory.getInstance("EC");
return keyFactory.generatePrivate(keySpec);
}
I am trying to retrieve the numbers displayed in "App Analytics" under "Metrics" > "Active Devices" using the API.
Since there does not seem to be a dedicated report for this metric I am using the daily "App Sessions Standard" report and by looking at the "Sessions" field I am able to recreate the numbers displayed for the "Sessions" metric.
However if I try to infer the active devices by looking at the "Unique Devices" field my numbers for individual days are in the same ballpark (deviations may be attributable to privacy reasons?), but the total number of devices is way off. Is there a better way to recreate this metric?
From the Apple Connect API documentation, it seems like this API does not provide an endpoint to add devices to provisioning profiles (or update profiles in any other way). Am I missing something in the docs or is this a known limitation? If latter, are there any viable alternatives?
I added auto renewable subscriptions to my app. First submission of IAPs require a new build along with it. I tested everything locally through the .storekit file. Everything worked perfectly so I submitted it for review.
The moment I did so, StoreKit.Product.products(for:) stops returning the products. If I click on the "Sync" button on .storekit now the pre-existing subscriptions disappear. Apple reviews the build and states that there are no subscription options visible.
Also in "Prepare for submission" phase, IAP & Subscriptions section disappears so one can no longer add them to the next builds.
I have tried to explain this 7 times (with new version submissions) through App Review Comments. It looks like nobody reads the responses. I tried adding the issue as a note, screenshot, video in different parts of the submission. They are entirely ignored. I sent 3 support request none of which have resulted in a response. I tried setting up a 1 on 1 call with Apple and it got rejected.
This issue has been reported by other people in this forum and others with no solutions provided.
I am completely out of options at this point. If I and others are indeed right to think that there is a bug in App Store Connect on the specific scenario with first time IAP review submissions where the first build is rejected by developer's fault, it bugs out with subscriptions.
My app's success entirely depends on this as I can't monetise it and I am in Apple Developer Program which means I am subscribing to this service. Can someone from Apple Team, please respond to this specific issue on whichever medium chosen. I am completely blocked and in dire need of help.
Thanks for your understanding.
We receive status code 405 Not allowed when call POST https://api.appstoreconnect.apple.com/v1/customerReviewResponses Same answer for DELETE response. GET methods works fine. I tried team key, individual key with Customer Support role, individual key with Admin role results are same.
Hi,
My app has been on the store for a few months now with a few updates.
Now I plan a major update that will affect the structure of core data itself (key attribute replaced by relationship). I see no other way than asking the users to delete and reinstall the app to reset all data and start it as new.
In a previous update I provided users the possibility to backup their data in a file so they can restore it with the future release.
Is there a better way than using the "What's new in this version" section to pass the message to the users ?
Is there a way to view the opt-in rate via the API? I have been unsuccessful in finding one.
My company provides an app that allows businesses to connect their Apple Apps to Salesforce so they can manage and respond to their Customer Reviews.
One of our customers has created an API Key for that purpose with a "Customer Support" Role. According to the documentation, that Role should have access to both read and respond to customer reviews:
https://developer.apple.com/help/account/manage-your-team/roles/
We can retrieve Reviews successfully with this API Key. However, whenever they attempt to respond to a Review, they get an error:
[Status=Forbidden, StatusCode=403]
We've confirmed this seems to be related to the Key Role, as they created a new key with an "Admin" role and the response works fine with that key. We don't understand why "Customer Support" doesn't work, though, since the docs seem to indicate that they should support responding to Reviews.
Is there some way to make a "Customer Support" API Key work for responses? If not, are there other roles that would enable them to both read and respond to Customer Reviews? Or is an "Admin" key truly the only Role that would enable responses to Customer Reviews via the API? The customer is understandably hesitant to use an "Admin" key since that opens up a lot of other access.
I am using the API to fetch the following report: asc_api_report_commerce_app_downloads_detailed
The reason I am using the detailed version is that I want to breakdown downloads by in-app event names.
Here are the issues I'm facing:
When comparing the detailed to the standard report, for specific date ranges and markets (comparing apples to apples), the numbers are slightly off - usually by around 1-2k. I can get around this, since I can use the standard report for most of my reporting.
The second, and main issue, is when I try to use the detailed report to see how different IAEs are performing. The data discrepancies here are huge, and don't make any sense to me.
For example, when I check a specific IAE (called Blanked), I can see dates in the console which are not showing up in the ASC API. These dates do exist in the broader dataset, they just don't exist for this specific IAE.
Am I looking at this wrong? Do I need to pull the data differently? Has anyone else found this issue?
ASC API Downloads vs Console Downloads - Sheet1.csv
Greetings to all!
I have a task to write a small parser to automate the collection of analytical indicators for my applications in the App Store. I have already written a parser for the sales and finance reports, the endpoints for which were in the App Store Connect API specification.
But other than that, I would like to collect benchmarks (https://developer.apple.com/app-store/peer-group-benchmarks/). However, I have not found a way to do this through an API request. I understand that there is no such way at the moment, or I was looking for it badly. The only way I've found is to make a request to the authentication page (https://appstoreconnect.apple.com). But authentication requires code from two-factor authentication, which is a big problem for writing a parser. Does anyone know how to get benchmarks without authentication? Naturally, I have all the tokens for my account, so I'm looking for a way to do this task through the API.
Thank you for paying attention to my problem!
We want to use the App Store Server API for in-app purchase validation.
Due to circumstances, we cannot use the team-based private key (team key) and must use an individual authentication key.
However, the JWT authentication keeps failing when using the individual key.
Could there be an issue with our code?
$jwtHeaderArray =
[
'alg' => 'ES256',
'kid' => $this->KID_ID,
'typ' => 'JWT'
];
$jwtBodyArray =
[
'sub' => 'user',
'aud' => $this->ACCESS_TOKEN_AUD,
'iat' => time(),
'exp' => time() + 3600,
"scope" => [
"GET /inApps/v1/transactions"
]
Error and bak to homepage.
any solution to integrate apps with revenuecat ?
We'd like to track the number of installs for each individual app within the App bundle, rather than just overall App Bundle installs.
Does the App Store Connect provide this level of install metrics for App Bundles?
I have successfully built about 10 builds which got uploaded to app store connect within 10 minutes but since yesterday my builds have been under processing until now, anyone facing the same or any solution?
My Build ID: 40cc4a28-1d4d-4d45-963e-edebf4917952
Hello community,
I recently tested a subscription purchase in my app using a non-sandbox Apple account, and I received the subscription confirmation screen (screenshot attached). However, I’m not sure where I can verify or manage the subscription details for this specific account.
Here are a few points about my situation:
1. The account used for testing is not a sandbox account.
2. The subscription confirmation message displayed correctly in the app.
3. I want to confirm whether the subscription was successfully created or recorded in the App Store.
My questions:
• How can I check the subscription status for this account?
• Is there a specific section in App Store Connect or another platform where I can verify the subscription details for a non-sandbox account used in testing?
• Is it normal to test subscriptions like this, or should I strictly use sandbox accounts for testing?
I appreciate any guidance or resources to help me resolve this. Thank you! 😊
every time i am trying to post my application to appstore I got this message:
ITMS-90338: Non-public API usage - The app references non-public selectors in XXXX: setNavigationBar:. If method names in your source code match the private Apple APIs listed above, altering your method names will help prevent this app from being flagged in future submissions. In addition, note that one or more of the above APIs may be located in a static library that was included with your app. If so, they must be removed. For further information, visit the Technical Support Information at http://developer.apple.com/support/technical/
I search inside my code and my 3rd party libraries about setNavigationBar and navigationbar = but i didn't find any matched results.
i tryed to exported the application build and i searched inside the exported build abdout setNavigationBar and found one result in but couldn't find any details about location or file that generated this.
what to do?
I filled in some information when publishing the application and felt that the icon was not good enough. I made another one and used this new icon in XCode. After running it on iPhone, the icon changed, but there was no change in the submission section. Now the application is in the "ready to submit" stage and I don't know how to change it to the new icon. Can anyone give me some guidance? Thank you!
Creating profile via a post request keeps getting a server error 500.
It just worked yestday.
POST https://api.appstoreconnect.apple.com/v1/profiles
{
"code": "UNEXPECTED_ERROR",
"detail": "An unexpected error occurred on the server side. If this issue continues, contact us at https://developer.apple.com/contact/.",
"status": "500",
"title": "An unexpected error occurred."
}