My application was rejected due to Google Maps? - appstore-approval

Today my app got reject i don't understand problem.
Rejected because:
10.6 - Apple and our customers place a high value on simple, refined, creative, well thought through interfaces. They take more work but are worth it. Apple sets a high bar. If your user interface is complex or less than very good, it may be rejected
With comment:
10.6 Details
Your app’s location feature is not integrated with the built-in mapping functionality, which limits users to a third party Maps application. 
Next Steps
Please revise your app to give users the option to launch the native Apple Maps application. 
What i need to do? I should add Apple Maps in my app and give the user a choice?
Why they do not require such other applications.
A few words about my application: It’s social network that displays the users on map
You can see main screen with Google Maps

they say:
"to give users the option to launch the native Apple Maps..."
what you can do is show an action sheet with 3 options:
google maps
waze
maps
the user will choose ...
one of the option shoukd be maps of Apple
implement the maps option as follow:
let regionDistance:CLLocationDistance = 100
let coordinates = CLLocationCoordinate2DMake(lat, lon)
let regionSpan = MKCoordinateRegionMakeWithDistance(coordinates, regionDistance, regionDistance)
let options = [
MKLaunchOptionsMapCenterKey: NSValue(mkCoordinate: regionSpan.center),
MKLaunchOptionsMapSpanKey: NSValue(mkCoordinateSpan: regionSpan.span),
MKLaunchOptionsDirectionsModeKey: motType = MKLaunchOptionsDirectionsModeDriving
] as [String : Any]
let mapItem = MKMapItem(placemark: MKPlacemark(coordinate: coordinates, addressDictionary: nil))
mapItem.name = placeName
mapItem.openInMaps(launchOptions: options)

Inside iTunes Connect, I simply questioned the rejection, asking them why this was required, and stated that I have business logic related to Google Maps. After two days the app got accepted.

Related

Here SDK flutter does not show places image. Always returns no data for images

I am new to "Here" and I am using Here SDK Flutter 4.3.3.0. I want to fetch/search for places and get the Place's Photos/Image and or Place's Logo if the place is a business/company.
The place images place.details.internalimages are always empty when I search for any place. I tried for different countries like "Chipotle" a restaurant near Las Vegas, a restaurant in Canda, and a Shopping mall in India. All of these return 0 (zero) images. Does, Here API support to get places photos like Google Places or TomTom API?
Looks like this API has a method to get WebImage List but does not contain any data at all. Please advise, If I need to use any other method to get Place's photos.
Another question is, is there a way to get a company logo, if the place I am searching for is a business/company like Restaurant, Store, etc.
Below is the code, I use in my Flutter application. Note, I am able to get other field values like title, address, etc.
TextQuery textQuery = TextQuery.withAreaCenterInCountries('some partial place name', geoCoordinates, countryCodes);
searchEngine.suggest(textQuery, searchOptions, onHereSearchSuggestionCompleted);
In onHereSearchSuggestionCompleted functions, I have the following code:
if(suggestions.length > 0){
print('explore - onHereSearchSuggestionCompleted - suggestions count > 0');
for (Suggestion suggestion in suggestions) {
print('onHereSearchSuggestionCompleted - current count = ${(suggestions.indexOf(suggestion) + 1)}');
print('onHereSearchSuggestionCompleted - suggestion title = ${suggestion.title}');
print('onHereSearchSuggestionCompleted - place id = ${suggestion.place.id}');
print('onHereSearchSuggestionCompleted - place title = ${suggestion.place.title}');
print('onHereSearchSuggestionCompleted - place address = ${suggestion.place.address.addressText}');
print('onHereSearchSuggestionCompleted - place img length = ${suggestion.place.details.internalimages.length}');
}
}
Please note, you have been able to see this functionality being exposed in flutter SDK due to a bug exposing internal methods in flutter. In general this functionality is not yet public (not in native android and iOS).
We plan to expose this functionality soon, however even when we do, only certain eligible customers would have access to the image content. There should be contractual agreement to be able to see this functionality

How to Integrate Apple Pay with Stripe in Xamarin.forms?

i'm following that blog entrance, https://agileapp.co/Stripe-and-ApplePay-with-Xamarin-Forms/, that tells us how to integrate Stripe with Apple Pay using Xamarin Forms.
I follow all code, and the only thing I changed is in PaymentButtonRenderer, CountryCode and CurrencyCode properties of PKPaymentRequest, set for use in Spain (ES and EUR), and of course, MerchantIdentifier as I set in apple developer portal.
All things I have to do in Stripe are already done.
As you can see in the images below, payment is not finished, and I don't know why. I don't know where I have to set the pay using Stripe (var myCharge = new ChargeCreateOptions()....), maybe in PCL ViewModel, in PaymentWillAuthorize or PaymentDidAuthorize... but I have two breakpoints and PaymentDidAuthorize never breaks, only PaymentWillAuthorize , but I don't know how I have to code in these methods.
Another extrange thing, is that if I use MerchantCapabilities as PKMerchantCapability.ThreeDS, I have an error message that tells that "Apple Pay is not available in my App", but if I change it to PKMerchantCapability.Debit, then the payment not finish.
Could you tell me what is wrong??
Thanks
Everything works fine, I just only create apple merchant certificate again, and code does what it have to do.
Problem solved, thanks #karllekko

Getting the error "ApiKey invalid" for hotel live prices

I'm trying to get the a list of current hotel prices but I can't get my API Key to work. I've had it for a couple days so I know it isn't too new. I even tried the example in the docs (after fixing the dates):
http://partners.api.skyscanner.net/apiservices/hotels/liveprices/v2/UK/EUR/en-GB/27539733/2016-12-04/2016-12-10/2/1?apiKey=myKey
While it worked for the demo key it wouldn't work for mine. I also tried it on the ec2 micro I'm using for testing with Python and get a response with u'{"errors":["ApiKey invalid"]}':
SKY_SCAN_URL = "http://partners.api.skyscanner.net/apiservices/hotels/liveprices/v2/"
sky_key = get_sky_scan_key()
def get_hotels(request):
entityid = request.GET['entityid']
checkindate = date_formatter(request.GET['start'])
checkoutdate = date_formatter(request.GET['end'])
rooms = request.GET['rooms']
guests = request.GET['guests']
FINAL_SKY_URL = "%s/%s/%s/%s/%s/%s/%s/%s/%s/?apiKey=%s" % (
SKY_SCAN_URL, 'US', 'USD', 'en-US', entityid, checkindate, checkoutdate, guests, rooms, sky_key)
sky_response = requests.get(FINAL_SKY_URL)
This function outputs a get request with a URL like this:
http://partners.api.skyscanner.net/apiservices/hotels/liveprices/v2//US/USD/en-US/20.7983626,-156.3319253-latlong/2016-09-07/2016-09-14/1/1/?apiKey=myKey
Any advice on what the possible issue could be would be awesome, thanks!
Edit:
To be more specific I'm looking for reasons why my API Key is invalid. I'm not familiar with skyscan and while I've added an app from the skyscanner dashboard by clicking the travel api and copied the key into my project and directly into a valid url my key is showing as bad. Are there any additional steps or things that I need to take into account?
I don't know about how you're creating the URL but it seems like it shouldn't be built that way. (most likely due to their misleading documentation)
This:
http://partners.api.skyscanner.net/apiservices/hotels/liveprices/v3/?apiKey=myKey&checkoutdate=2016-09-14&checkindate=2016-09-07&currency=USD&rooms=1&entityid=20.7983626%2C-156.3319253-latlong&local=en-US&market=US&guests=1
Should be:
http://partners.api.skyscanner.net/apiservices/hotels/liveprices/v3/US/USD/en-US/20.7983626,-156.3319253-latlong/2016-09-07/2016-09-14/1/1/?apiKey=myKey
Your code should be something like:
SKY_SCAN_URL = "http://partners.api.skyscanner.net/apiservices/hotels/liveprices/v3/"
FINAL_URL = "%s/%s/%s/%s/%s/%s/%s/%s/%s/?apiKey=%s" % (SKY_SCAN_URL, market, currency, locale, entityid, checkindate, checkoutdate, guests, rooms, apiKey)
sky_response = requests.get(FINAL_URL)
I also suggest you do some tests here.
From their help site as of 17 days ago -
https://support.business.skyscanner.net/hc/en-us/articles/209452689-Why-is-my-API-key-returning-no-results-for-hotels-
"Our Hotels API is currently being reworked, and access is not available at present. Apologies for any inconvenience, when the new API is ready for use we will update the Skyscanner for Business site, so please check back there for updates."
Unclear when this changes.
Since April 2017, skyScanner started re-working their Hotels API, thus stopping all ongoing API calls to LIVE Pricing APIs:
https://support.business.skyscanner.net/hc/en-us/articles/209452689-Why-is-my-API-key-returning-no-results-for-hotels-
Hotels and Flights Cached Pricing and Browse services still working, though I am not sure if it is enough for your business case.
It seems that Skyscanner has updated their Hotels API recently and the documentation can be found here: https://skyscanner.github.io/slate/#hotels-live-prices

Display direction route on WKInterfaceMap in WatchKit

In one of my watchKit application I need to show the route between two locations on the WKInterfaceMap. I searched for different links including Apple Developer Link. But I didn't find any way to display the route on the WKInterfaceMap.
Then, how the Uber watchKit App displays the route on the WKInterfaceMap? Is it the Map or an WKInterfaceImage/UIImage?
Below is the screenshot for the Uber App.
My guess is that they are be finding the route on the iOS app then passing it on to the watch in the form of a WKInerfaceImage
WKInterfacemap is non interactive map. If you just want to give the user driving directions, use below code where you can specify destination lat and long and open Map application on iWatch. It will launch Map application on iPhone, from there WatchOS will receive routing information.
let coordinate = CLLocationCoordinate2DMake( <ENTER DESTINATON LATITUDE>, <ENTER DESTINATON LONGITUDE>)
let mapItem = MKMapItem(placemark: MKPlacemark(coordinate: coordinate, add ressDictionary:nil))
mapItem.name = <DESTINATION NAME>
mapItem.openInMaps(launchOptions: [MKLaunchOptionsDirectionsModeKey : MKLaunchOptionsDirectionsModeDriving])

Phone number masking/mapping/translation APIs or services

Services like Uber provide users with masked phone numbers so that they can communicate directly with one another without exposing their actual phone number. It seems to me a form of network address translation?
Does anyone have services, OSS, API/code examples or SDK links that one might use to set up a similar system?
Primarily this would entail mapping/translating a generated phone number to a user's actual number (behind the scenes), but telemetry style analytics would also be desirable.
Preferably Node Javascript, C#, or Java... but anything is better than nothing!
Many thanks
Ricky from Twilio here.
We put together a tutorial on how to build masked phone numbers with Node.js, C#, Java, Python or Ruby:
https://www.twilio.com/docs/tutorials/walkthrough/masked-numbers/node/express
In this Node.js example, here's the block of code that masks a phone call:
router.post('/use-voice', twilio.webhook({ validate: false }), function (req, res) {
from = req.body.From;
to = req.body.To;
body = req.body.Body;
gatherOutgoingNumber(from, to)
.then(function (outgoingPhoneNumber) {
var twiml = new twilio.TwimlResponse();
twiml.play('http://howtodocs.s3.amazonaws.com/howdy-tng.mp3');
twiml.dial(outgoingPhoneNumber);
res.type('text/xml');
res.send(twiml.toString());
})
});
The gatherOutgoingNumber function uses the phone call from and to to determine who the user is intending to call, once that number is found this code forwards the call to the correct phone number.
It's MIT licensed and hopefully can help you get started.
I found what Uber uses... Twilio! So that's one option at least

Resources