In iOS 15 Content Filter can be used on non-supervised ios Devices if the device is authorized using the Family Control.
Now In iOS 16, we have an individual authorization option will the Content Filter work on the iOS device that is authorized; using the individual authorization option?
Post
Replies
Boosts
Views
Activity
After setting up auto-renewing subscriptions, I’ve hit a snag implementing Offer Codes in my iOS app.
The following has been configured:
2 subscriptions(yearly and monthly) setup in App Store Connect under same the subscription group
Both subscriptions are at the same level of service and include a 60-day trial period
Created 1-year free offer codes under the yearly renewable subscription
The offer code is for new, existing, and expired users
Observed user experience:
The user logs in to the app and subscribes to a monthly renewable subscription
The user then navigates to https://apps.apple.com/redeem?ctx=offercodes&id=##########&code=CODE to redeem 1-year free offer
Code is accepted and Apple ID authorization is prompted
After authorizing the subscription an error is presented stating, “ This offer can’t be redeemed with your current subscription.”
Is there something I missed in my configuration or a restriction I’m unaware of? Does the user have to redeem the offer before subscribing?
We have implemented apple receipt verification using PHP which is working perfectly fine.
Now, I am trying to fetch the exact promo code from the receipt data if used by the customer in-app.
I can see offer name from latest_receipt_info[0].offer_code_ref_name.
I have implemented the transaction history detail after creating the required JWT
GET https://api.storekit.itunes.apple.com/inApps/v1/history/{originalTransactionId}
I received the following details after decoding signedTransaction.
[transactionId] => 270001159964727
[originalTransactionId] => 270001159964727
[webOrderLineItemId] => 270000507948216
[bundleId] => xxxx
[productId] => xxxxx
[subscriptionGroupIdentifier] => 20970033
[purchaseDate] => 1659593358000
[originalPurchaseDate] => 1659593358000
[expiresDate] => 1660198158000
[quantity] => 1
[type] => Auto-Renewable Subscription
[inAppOwnershipType] => PURCHASED
[signedDate] => 1659599990477
[offerType] => 3
[offerIdentifier] => PK_DEV2
[environment] => Production
Main Problem:
I was assuming to get the exact offer code used by the customer in the offer identifier field. which I am not getting.
Is there any way I can get the exact offer code used by the customer from the receipt?
For creating NEPacketTunnelNetworkSettings settings I am using the bellow code.In this code I am only adding "8.8.8.8", "1.1.1.1" in IPV4 includedRoutes and , "2001:4860:4860::8888" IPV6 includedRoutes. excludedRoutes are default.But I am getting some packets from 17.130.21.5:443 this IP.- (NEPacketTunnelNetworkSettings *)createTunnelSettings {
NEPacketTunnelNetworkSettings *settings = [[NEPacketTunnelNetworkSettings alloc] initWithTunnelRemoteAddress:@"127.1.1.1"];
NEIPv4Settings *ipv4 = [[NEIPv4Settings alloc]
initWithAddresses:@[@"172.16.209.2"]
subnetMasks:@[@"255.255.255.252"]];
NEIPv6Settings *ipv6 = [[NEIPv6Settings alloc]
initWithAddresses:@[@"fd12:1:1:1::2"]
networkPrefixLengths:@[ @(64)]];
NEDNSSettings * dns = [[NEDNSSettings alloc] initWithServers: [@"8.8.8.8", @"1.1.1.1",@"2001:4860:4860::8888"]];
NSMutableArray* ipv4IncludedRoutes = [NSMutableArray new];
[ipv4IncludedRoutes addObject:[[NEIPv4Route alloc] initWithDestinationAddress:@"8.8.8.8"
subnetMask:@"255.255.255.255"]];
[ipv4IncludedRoutes addObject:[[NEIPv4Route alloc] initWithDestinationAddress:@"1.1.1.1"
subnetMask:@"255.255.255.255"]];
NSMutableArray* ipv6IncludedRoutes = [NSMutableArray new];
[ipv6IncludedRoutes addObject:[[NEIPv6Route alloc] initWithDestinationAddress:@"2001:4860:4860::8888"
networkPrefixLength: @(128)]];
ipv4.includedRoutes = ipv4IncludedRoutes;
ipv6.includedRoutes = ipv6IncludedRoutes;
ipv4.excludedRoutes = @[[NEIPv4Route defaultRoute]];
ipv6.excludedRoutes = @[[NEIPv6Route defaultRoute]];
dns.matchDomains = @[ @"" ];
settings.DNSSettings = dns;
if(ipv4Available) {
settings.IPv4Settings = ipv4;
}
if(ipv6Available) {
settings.IPv6Settings = ipv6;
}
}
return settings;
}