Skip to content
This repository has been archived by the owner on Mar 26, 2018. It is now read-only.

App Rejected - Failed on Apple 11.6 guidelines #1082

Closed
callaght opened this issue Aug 13, 2013 · 213 comments
Closed

App Rejected - Failed on Apple 11.6 guidelines #1082

callaght opened this issue Aug 13, 2013 · 213 comments

Comments

@callaght
Copy link

Slapshot Mag just got rejected again, but I can't understand the reason why. Has anyone been rejected for this reason? : -

11.6

We found that while your app offers a content subscription, there is no mechanism in place to support the App Store Review Guidelines requirement that the subscription content be available to the user on all of their iOS devices.

The detailed requirements for the Subscription Purchasability type are available in the Entering In App Purchase Information section of the iTunes Connect Developer Guide:

"...subscriptions must be provided on all devices associated with a user. In App Purchase expects subscriptions to be delivered through an external server that you will provide. You must provide infrastructure to deliver subscriptions to multiple devices."

It would be appropriate to modify your app to include an optional user registration feature, to deliver subscription content to all of a user's iOS devices. Such user registration must be made optional, not required. We also recommend indicating that registering is required to access the subscription content from their other iOS devices - and providing a way to register later, if users wish to have access to this content at a future time.

In layman terms, what does this mean?

Kind regards,
Tom

@nin9creative
Copy link
Contributor

That's weird. First time I've heard about that being used to reject a Baker app (but then again maybe I just haven't heard) :)

I think it means that basically if a user has two iPads or two devices they need to be able to access their subscription purchase on both devices. However I don't see why being able to click on "Restore Purchases" from the subscription dropdown doesn't fulfill this requirement. If I install and purchase something on an iPad, then install it on another iPad and then click the restore purchases - it should unlock the issues on the second iPad as well given the way that Baker resends the info to MagRocket...

Andrew

@callaght
Copy link
Author

Thanks Andrew

I've replied with: -

Hi,

Many thanks for reviewing my app.

If the user taps the restore option then all of their purchases will be restored to which ever iPad they are using at the time.

Could you clarify why it was rejected as I think I have misunderstood the rejection reason.

Kind regards,
Tom


lets see what they say! :-)

@nin9creative
Copy link
Contributor

You could test it by using a test user id in the sandbox on the simulator. Delete the app after making the purchase, then reinstall it in the simulator and do a restore purchases with the same test user id.

@nin9creative
Copy link
Contributor

Yeah, I guess see what they say... lol :)

@callaght
Copy link
Author

Good suggestion - I'll test this on my iPad and simulator on Thursday

@callaght
Copy link
Author

Apple came back with the response: -

Thank you for your message. It would be appropriate to modify your app to include an optional user 
registration feature, to deliver subscription content to all of a user's iOS devices. Such user 
registration must be made optional, not required.

So I tested by purchasing a subscription on an iPad2 and then restoring the purchase on an
iPad Mini and all worked fine, so I replied to Apple: -

Hi,

I implement the user registration feature using open source MagRocket on PHP and MySQL.

I have tested by restoring Slapshot Magazine to a new iPad Mini (original magazine purchase, 
was on an iPad2)

On the iPad Mini, I tapped the 'Restore purchases' option(screenshot1.png attached) and, at 
the end of the process, I was able to download and read the magazine(screenshot2.png attached).

If you require, I can send all 9 screenshots I took in delivering subscription content to a 
user's additional iPad iOS 6.0 device.

Kind regards,
Tom

screenshot1
screenshot2

But Apple has replied: -

Thank you for your message. Aside from the Restore button, it would be appropriate to modify 
your app to include an optional user registration feature, to deliver the non-renewing 
subscription content to all of a user's iOS devices. 

In order for your application to be reconsidered for the App Store, please resolve this issue 
and upload your new binary to iTunes Connect.

I am soooo confused!!!! :-) what do they mean?

It seems restoring to a users addition device is fine. But apple want: -

an optional user registration feature, to deliver the non-renewing subscription content to all 
of a user's iOS devices

What is this feature? I just can't get my head around it.

I'm probably missing something obvious. Can anyone help?

@callaght
Copy link
Author

I've been searching around for hours now trying to find something.

I noticed in my 3 Month Auto-renewing subscription that I had selected the option - 'Offer marketing opt-in incentive?'

Which I have said Yes to.

If I click the '?' next to it, it says: -

As an incentive, customers will get a free subscription extension when they opt in to receive 
marketing. This extension is in addition to any free trial that you may choose to offer with the 
subscription.

Could this be why?

aut

@callaght
Copy link
Author

PLEASE HELP! :-)

Apple simply aren't responding, I'm tearing out my hair and Slapshot Mag is gathering dust.

@callaght
Copy link
Author

I've spoke to a very helpful lady in the Apple review team today.

She called me about this opt-in issue that I've that a brick wall with.

She explained to me that there needs to be an option for a user when they subscribe to optionally enter their email address.

This email address would be stored on a server so that if that user got another iPad they could simply enter their email address on this new iPad and their subscription would be available on that new iPad and all of the content they have paid for would be downloaded.

I tried to explain that the restore button did this, but she said this is not the same.

My problem is I'm not exactly articulate and able to get my point across on the fly! So was unable to explain this to her.

When I tried to talk about MagRocket (sorry I know this is the Baker board) One of the questions she did ask was - What information was MagRocket storing so that it could implement this required functionality.

Argh! That put me on the spot there! :-) Busted! I couldn't answer her question. I think I said something like - er, the UDID and receipts and stuff - oooops.

Maybe this is the key - if I can explain what is stored and how it was determined the user had already subscribed and could download content based on this.

Anyways, she's said I can email her back when I've got my thoughts together. Could someone help me on this - to explain succinctly what is stored and how this determines a user can get their content on multiple devices?

@nin9creative
Copy link
Contributor

Odd since others have been approved already with Baker and MagRocket - not sure why you are having these issues...

Andrew


From: Tom Callaghan [email protected]
To: Simbul/baker [email protected]
Cc: Andrew [email protected]
Sent: Wednesday, August 21, 2013 2:49 PM
Subject: Re: [baker] App Rejected - but I can't understand the reason (#1082)

I've spoke to a very helpful lady in the Apple review team today.
She called me about this opt-in issue that I've that a brick wall with.
She explained to me that there needs to be an option for a user when they subscribe to optionally enter their email address.
This email address would be stored on a server so that if that user got another iPad they could simply enter their email address on this new iPad and their subscription would be available on that new iPad and all of the content they have paid for would be downloaded.
I tried to explain that the restore button did this, but she said this is not the same.
My problem is I'm not exactly articulate and able to get my point across on the fly! So was unable to explain this to her.
When I tried to talk about MagRocket (sorry I know this is the Baker board) One of the questions she did ask was - What information was MagRocket storing so that it could implement this required functionality.
Argh! That put me on the spot there! :-) Busted! I couldn't answer her question. I think I said something like - er, the UDID and receipts and stuff - oooops.
Maybe this is the key - if I can explain what is stored and how it was determined the user had already subscribed and could download content based on this.
Anyways, she's said I can email her back when I've got my thoughts together. Could someone help me on this - to explain succinctly what is stored and how this determines a user can get their content on multiple devices?

Reply to this email directly or view it on GitHub.

@callaght
Copy link
Author

Yeah, I'm really being made to run the gauntlet with this!

Hopefully my experience will come in useful for others that may face this similar situation in future.

I think one of my problems is in me being able to convincingly put across how functionality 11.6 is indeed implemented in MagRocket/Baker. Although, saying that, I shouldn't need to explain - they just need to tap the restore button!!! lol!

@DrByrnes
Copy link

I'm being dragged through the exact same coals that you are, callaght. If/when you discover the definitive reason why your app isn't approved and what needs to be changed or implemented for approval, please follow up and post the result here!

@MaverickWar
Copy link

If this is the case, could baker link up with mag rocket and create an account feature, which has a login that connect to mag rocket and collects purchased or downloaded content?

I think the issue now is that alot of the commercial apps for newsstand now contain an account feature or login and with the popularity of people having multiple devices and apple wanting their app stores to contain top quality apps, it seems they are making big changes.

This could be something we now all start to face.

@MaverickWar
Copy link

I know this might be a little time consuming but if people continue to get rejected as these have and I have. Perhaps we could look to get things in line with their new terms,

@callaght
Copy link
Author

I think the solution is: -

  1. Store username and password in new table in MagRocket
  2. On new device enter username and password
  3. If they match, execute the restore button code

No idea if that will work, but thats what I'm going to try.

@MaverickWar
Copy link

How will that combat the registration and login they ask for, I was under the impression they equally wanted to see login and registration facility aswell as pulling records for restore?

If this works, would definitely appreciate you helping us out with it, it would be nice if baker worked closer with magrocket to fix this moving forward though.

A temporary fix is good for now but apple appears to be moving in the direction or closer linking server backend with front end app and user transactions being better recorded, managed and recalled in multiple devices.

It seems almost like they have looked at some of the top commercial apps that have teams of devs and said, 'this is what we want all newsstand apps to look like and function like'

@nin9creative
Copy link
Contributor

The part I don't get is what are they actually expecting. The restore purchases process does all this at a subscription, purchases and availability standpoint.

I really don't get the comment about implementing an "optional" registration system... But then rejecting apps?

Apparently they are changing requirements as to what will get approved or not.

Sent from my iPhone

On Aug 24, 2013, at 8:03 AM, MaverickWar [email protected] wrote:

How will that combat the registration and login they ask for, I was under the impression they equally wanted to see login and registration facility aswell as pulling records for restore?

If this works, would definitely appreciate you helping us out with it, it would be nice if baker worked closer with magrocket to fix this moving forward though.

A temporary fix is good for now but apple appears to be moving in the direction or closer linking server backend with front end app and user transactions being better recorded, managed and recalled in multiple devices.

It seems almost like they have looked at some of the top commercial apps that have teams of devs and said, 'this is what we want all newsstand apps to look like and function like'


Reply to this email directly or view it on GitHub.

@MaverickWar
Copy link

It's seems like they have a look and feel for what they want to see in a magazine newsstand app, I think this is their way of pushing the quality of apps up, they are looking for all apps to look like the commercial newsstand apps, I know that pixelmags have had the subscribe/register, account area which shows you what you've bought for a while now and it now seems that apple wants all solutions to do this... So for the time being, it looks like baker mags are on hold

@callaght
Copy link
Author

From what I understand when speaking to Apple is that its optional to the user if they register or not but it is a mandatory requirement to implement this functionality for us.

@MaverickWar
Copy link

So you don't think they are specifically looking for something pretty? Just a specific function, gosh they are so picky.

@MaverickWar
Copy link

Someone posted this online as a response to this new apple rule and his app has been accepted for a while now, may be worth a read...also a slight I change to the below, he said aswell as adding a token, he also added a username.

"I have a suggestion given to me from Gavin McKenzie, which sounds like the best bet I've heard:

Upon purchase of the subscription, make a "short code" available to the user. The code would be stored on the server as well, tied to that user's account. When they hit Restore on another device, request the short code from the original device and account, thereby tying those devices together.

Gavin further suggested the use of this in a "pairing" method similar to Bluetooth: when restoring, initiate the pairing on Device A, which generates the short code and pushes it to the server. Device B can then use that code. Five minutes later, or when the pairing screen is dismissed, the code is deleted.

I'm not sure how this would stand up if you want to restore to the same device, say, after deleting the phone and restoring. But this feels like a good start."

@Simbul
Copy link
Owner

Simbul commented Aug 24, 2013

This email address would be stored on a server so that if that user got another iPad they could simply enter their email address on this new iPad and their subscription would be available on that new iPad and all of the content they have paid for would be downloaded.

This is exactly what restoring purchases does. The explanation you got from the Apple rep does not make any sense to me.

If you want to try and get in touch with them again with a bit more information, here's how purchases work in Baker+MagRocket:

  1. Baker generates a unique identifier to track the specific instance of the app (i.e. this does not map 1:1 to a user). This uuid is used by MagRocket to know what the app is allowed to download.
  2. When a user buys anything (a single issue or a subscription), the App Store saves the purchase against the user Apple ID and sends a receipt to Baker.
  3. Baker sends the receipt for the purchase and the uuid to MagRocket, where the receipt is checked against the Apple verification server and the issue (or group of issues) is unlocked.

Now, here's how restoring purchases works:

  1. When a user opens the app on a new device, Baker will generate a new uuid. There is yet no way to get to previously purchased content at this point
  2. However, when the user Restores purchases, the App Store will send to Baker the receipts for all of the user's purchases (issues and subscriptions).
  3. Baker sends the receipts for the purchases and the uuid to MagRocket, where the receipts are checked against the Apple verification server and the issues are unlocked.

You can see that the steps are essentially the same in both scenarios, with the only difference that step 2. is applied to multiple receipts when restoring and to a single one when buying.

In short, Baker generates a uuid for each installation of the app. When restoring purchases, MagRocket will associate all purchases with the new uuid, effectively "cloning" the purchase history of the user, so that they will be able to access all the content they purchased on a newly installed app.

@callaght
Copy link
Author

Thanks Simbul!

@MaverickWar
Copy link

Ok, i have just got off the phone with them, it was weird having them call me from america, The reason they rang is because i appealed about a few days ago, anyway, i told them all of this and they basically said the software you are using in its current state doesnt comply with their terms, reference 11.6, she said that heres what im saying but there is not user/registration option on the account, there is no where through the app where you can see the user is logged and what the user is able to use, they no longer accept this restore button as an option to fix this issue, its not clear enough for end users, i said what i said on here basically, that they seem to be expecting these apps to be able to access account like features and be like the commercial apps and she basically gave the impression that this is the way its going.

She said if there was a tab that had a login/register facility within the app, not just relying on itunes, but to connect to backend, this would be acceptable.

She also indicated that there could be more changes on the horizon regarding newsstand terms and what they are looking for in their ecosystem.

I cant tell you anymore because i was unable to bounce back from a points, it was a dead end and they seem pretty stuck in their ways about it.

Any thoughts guys?

@callaght
Copy link
Author

Just working on it at the moment.

So, from your conversation, does the user have to 'opt-in' with just an email address, or, do they have to create a password as well?

Basically, can the user enter their email and if it matches what they registered with then we just execute the restore button code?

Just out of interest - is the reviewer you spoke to called Sky?

@Simbul
Copy link
Owner

Simbul commented Aug 24, 2013

Here's what section 11.6 of the App Store Review Guidelines says:

11.6 Content subscriptions using IAP must last a minimum of 7 days and be available to the user from all of their iOS devices

In the review, they quoted the iTunes Connect Developer Guide (even though I couldn't find that specific quote in there):

...subscriptions must be provided on all devices associated with a user. In App Purchase expects subscriptions to be delivered through an external server that you will provide. You must provide infrastructure to deliver subscriptions to multiple devices.

As far as I can see, Baker completely meets these requirements by the Restore Purchases button. The only thing I can think of now is that Apple wants all devices belonging to a user to be in sync.
It's not simply a matter of making the content available: supposing a user had an iPad and an iPhone and they bought a subscription on their iPad, all issues covered by that subscription should be pushed to both devices simultaneously.

If that is the case, entering just the email won't work: you would be able to access all purchases for a user just by knowing their email (which is fairly trivial).

@MaverickWar have you asked them about the "short code" approach?

@callaght
Copy link
Author

How would we implement such a thing - to push out and sync to all devices? That sounds like a complex thing to do.

Are there any good examples of this in action at the moment on the AppStore?

@MaverickWar
Copy link

As far as i could tell they are looking for a cleaner more unified approach and login/account management seems to be the way its going, i asked about short code approach and she said every submission is taken on its merits but she couldnt tell me whether it would be accepted for certain until it was with their submission team.

She said that for now the requirements are that a user have the 'option to log in', she didnt say how the log in would need be implemented, i questioned her and she mentioned username and password for login and registration that link up with a users purchase history, she said ideally apps will have an option to see purchase history also in the future but this isn't a requirement at this moment.

I got the impression that was coming soon though so it may be a good idea to consider this otherwise we could be looking at more down time when they make those changes.

I found it hard to narrow down exactly what they wanted from the conversion, she spoke alot but none of it seem to give 100% clarity on what they want.

You guys had any luck deciphering what they are looking for. I find it all a bit confusing and it seems its sprung out of nowhere.

@MaverickWar
Copy link

Well at the moment, like i mentioned before, when you log into custompc magazine, there is a settings area and account section where you log in via username(email) and password.

so you set up a registration to tie in email or username with password, then when user makes a purchase or subscription, this then links to the user/password. and as such whichever device they log onto it would appear.

as pixelmags do this already and have (a lot) of high profile magazine in AppStore, i would assume that this would be sufficient with their current guidelines. Obviously restore buttons no longer work for them.

@nin9creative
Copy link
Contributor

Sounds pretty complex to me! lol

Regards,
Andrew

Sent from my iPhone

On Aug 24, 2013, at 4:47 PM, Tom Callaghan [email protected] wrote:

How would we implement such a thing - to push out and sync to all devices? That sounds like a complex thing to do.

Are there any good examples of this in action at the moment on the AppStore?


Reply to this email directly or view it on GitHub.

@folletto
Copy link
Collaborator

It's a LOT of code. Could you maybe edit and use https://gist.github.com/ instead? :)

@callaght
Copy link
Author

@folletto - Sorry I haven't got a clue how to use github. It took me two hours to work out how to download a Baker Master initially! lol! :-)

@folletto
Copy link
Collaborator

It's not a problem, have a look at https://gist.github.com/ because it's meant to support in a very clean way what you're doing here. After you're done you can repost here and remove the other posts. :)

@callaght
Copy link
Author

ok cool

@callaght
Copy link
Author

ok, I've put it all in gist

@folletto
Copy link
Collaborator

Can you put here the link to the gist? ;)

@MaverickWar
Copy link

Is this going to be merged into the current baker release so that we can redownload and recompile?

Also will anyone be able to make this work for iPhones aswell as iPads?

@callaght
Copy link
Author

@folletto I clicked this button after I put everything in: -

screen shot 2013-09-13 at 08 59 27

But nothing happened. I was suspicious at that point because I thought nothing has been saved - it turns out to be the case as I haven't got a link.

So, I'll put it all in again and post the link.

If it does the same again I'll throw my laptop out of the window!!!! ;-) haha!

@folletto
Copy link
Collaborator

It's strange. However it should be the URL at the top.
And it should use your profile, this way: https://gist.github.com/folletto

@callaght
Copy link
Author

This is how mine looks: -

screen shot 2013-09-13 at 09 07 22

Is this right?

@folletto
Copy link
Collaborator

https://gist.github.com/callaght —> "callaght hasn't created any public gists yet." So no, the code wasn't saved. Try again. ;)

@callaght
Copy link
Author

Cool! That worked :-)

Can you check you can see this: -

https://gist.github.com/callaght/6547921

If so I'll put the rest in

@folletto
Copy link
Collaborator

Yep, that works. :)

@callaght
Copy link
Author

Ok, everything has been added :-)

https://gist.github.com/callaght/6547921

Just remember, for: -

CreateAccountDecisionViewController
CreateAccountViewController
AccountSettingsViewController
LogonViewController

Simply wire up a XIB for each controller to all of the IBOutlets for each one.

Now that SLAPSHOT MAG has been published, check out: -

#1127

@nicholasmartin
Copy link

Tom, very well done getting your mag published!

@folletto will you guys be looking over the code Tom submitted and refactor it into a later Baker master/version? Just wondering as I might wait for you guys to check it out before I start adding Tom's code. Thanks!

@folletto
Copy link
Collaborator

Well, it depends on your deadline. ;)
We have to review Tom's code as the reference starting point and then evaluate the ideal solution to allow scalability and flexibility for everyone — for example we can't assume MagRocket will be the backend, we have to consolidate in a single API (BakerAPI.m), verify iPhone compatibility, and so on.

If Tom's solution works for you as is, go ahead. ;)

@Barney2324
Copy link

Is this a simple thing to implement, the only bit I'm not sure of is this xibs creation and linking up? Could we not get a little walk through on this, the rest seems easy enough though.

Also, how can we make this work for IPhones aswell as iPads?

@Barney2324
Copy link

@folletto I hear what your saying about not assuming magrocket is the backend everyone uses, could you guys create a separate verified branch for magrocket, basically just adding your current master into another branch with these modifications? Would be a lot easier then for people to work with and customize

@folletto
Copy link
Collaborator

As before, we won't spend time to work on solutions that won't be in the final version of Baker (time is very limited), but that's a good suggestion in the meantime, surely someone else can fork Baker and do that. ;)

@nin9creative
Copy link
Contributor

Just from the MagRocket perspective.  I am going to wait until the Baker crew comes up with their "generic" approach to handling this through
an API and hooks before doing any coding on the MagRocket side for it to work.  I need to keep things in sync with the Baker direction and since
my time is very limited as well, I need to make sure that I'm aligned with the overall Baker direction.

That's not to say that someone else that wants to fork Baker and fork MagRocket can't make this interim solution work.

Andrew


From: Barney2324 [email protected]
To: Simbul/baker [email protected]
Cc: Andrew [email protected]
Sent: Friday, September 13, 2013 7:33 AM
Subject: Re: [baker] App Rejected - but I can't understand the reason (#1082)

@folletto I hear what your saying about not assuming magrocket is the backend everyone uses, could you guys create a separate verified branch for magrocket, basically just adding your current master into another branch with these modifications? Would be a lot easier then for people to work with and customize

Reply to this email directly or view it on GitHub.

@callaght
Copy link
Author

I think there may be a bug in the code I wrote. A user helpfully sent in a video of the bug in action: -

http://youtu.be/p8AwlNd-KPo

@fturner19
Copy link

@callaght Instead of skipping the account setup screen create an account and see if you're able to download your issue then.

@callaght
Copy link
Author

Good idea, I will suggest this to the user

@JamesMowatt
Copy link

Hi Guys,

An extension to me letting you know that my magazine was accepted, is that I did submit as iPad only. Sorry if this scews your results.

Thanks

@callaght
Copy link
Author

callaght commented Oct 2, 2013

Great news jmowatt!

Did you implement a user account feature or not need to?

@folletto
Copy link
Collaborator

So, two things happened since the last time we did a check on this topic:

  1. A few have been able to submit successfully.
  2. We've implemented in Ability to provide access to Issues via "Access Code" or subscriptions/purchases made outside Newsstand. #886 an init event in the "Info" box that could be used to trigger registrations and logins.

For more details see the documentation on the wiki:
https://github.com/Simbul/baker/wiki/Use-baker-javascript-events

So, if you find stuck in there, you will be able to implement a form with a callback to a server of your choice inside the Info dropdown (maybe renaming also Info to something else). Given the approvals, that shouldn't be required, but just in case, it's there.

@nin9creative
Copy link
Contributor

@folletto This is good news that there is basic ability to open a server hosted form and pass these details. That should be enough to implement some mechanism to link a UserID/Email address on the backend.

I suppose this is also good for the ability to implement a mechanism for offering free issues or subscriptions based on some sort of user enterable code...

Will need to think about this - but it will definitely help with the base requirements for implementing something in MagRocket :)

@folletto
Copy link
Collaborator

Precisely. It should enable a lot of different things, and it should be quite flexible given it's all HTML. :)

Let's see! :D

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

No branches or pull requests