ThumbWorks / sf-ios

An app for iOS social events in SF
MIT License
19 stars 13 forks source link

Implement Sign in with Apple 😀 #140

Open brennanMKE opened 5 years ago

brennanMKE commented 5 years ago

https://developer.apple.com/sign-in-with-apple/get-started/

Combined with iCloud this could allow for additional customization features, such as selecting which groups to show or hide.

rodericj commented 5 years ago

Is there something that this adds that we couldn’t do with just iCloud though? iCloud has a concept of a user token that is unique per app and fairly anonymous.

brennanMKE commented 5 years ago

One reason would be to allow for prompting for profile details like email and name. I've just created a unique identity on my work MacBook so it would be possible to contribute a PR over lunch if I can knock out an update quickly.

https://gist.github.com/brennanMKE/7be9c5d174286a25e6e2a5a7e55bd3b6

rodericj commented 5 years ago

And we are thinking of tying the GitHub user ID to some account or something and adding that to a profile? Would anything else be on the profile? Is showing the email in the profile intended to help them if they like forget their own email? Also if we are trying to get an email does it make sense to explicitly NOT use Apple sign on since that is essentially an email randomizer?

brennanMKE commented 5 years ago

I think allowing people to associate a profile photo, name, birth date and the general area where they live that would be helpful. Users could be notified when an upcoming location is near their home. The app can also show a list of current birthdays for that week if it is a weekly event.

Once I have freed up a bit of time I could do some work on these features, perhaps once I get up to speed with SwiftUI and Combine.

rodericj commented 5 years ago

I buy the location based notifications as a feature but that wouldn’t really require a user account. It could be stored as a region in nsuserdefaults.

The profile picture, birthdate, home location though, I’m a bit hesitant on those features. It kind of sounds like you’re building an ad network at this point and my interest level drops quite sharply in exposing that risk to a group that I would consider friends. We currently don’t track ANYTHING about users or their actions. We do track system events like refresh from background, but it explicitly doesn’t reveal anything about the users.

Thoughts?

brennanMKE commented 5 years ago

Location Pins

If we approach it from a very privacy oriented way we could give users the option to place pins on a map of the selected city to indicate the places they'd like to meet up for coffee. I suppose it could be limited to 3 pins. In the backend there would be no way to link to a person's real name or any other details. The pins would also not necessarily be their home or work locations. Anyone sensitive about those locations could simply place pins in other areas they like to visit.

Authorization

In order to add and remove pins we'd need to authorize the change for that user. I'd use a UUID and a generated passcode which is stored in settings with either their iCloud storage or an Apple sign in identity. All of the pins together would show where the areas of highest concentration would make for the best meetup locations. We could also put an expiration on the pins and prompt users to confirm they are still accurate if they have not adjusted the pins in 12 months. Each time they make a change the expiration is reset.

Heat Map

I'd also like to be able to see a heat map representing all of the pins together. It would be interesting, but also could help someone scout out good spots in the hotspots to suggest for upcoming locations.

Notifications

If an upcoming location is within the scope of one of my pins I'd like to have the option to get a notification the day before and the morning of the day as an option to remind me. It really helps to have a personal reminder. And when it directly deep links into the app to make it easy to request directions that is even better.

Pin Radius

Each pin could have a radius which indicates essentially how close the location has to be to be worthwhile. Many pins may be placed near a BART or Muni station which makes a coffee shop which is a half mile away unappealing to some commuters. Others may be more mobile so a wider radius will work for them. When a user sets a pin they could select a radius of 100 meters, 500 meters, 1000 meters after they place it, perhaps even as a slider between 100 meters and 1000 meters which would give a visual of that radius on the map.

Other Cities

I am thinking how this would be useful in other cities where they are adding new people and have not already established the best places for most people.