Skip to content
Closed
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions auth/src/desktop/auth_desktop.cc
Original file line number Diff line number Diff line change
Expand Up @@ -575,6 +575,11 @@ void Auth::UseEmulator(std::string host, uint32_t port) {
auth_impl->assigned_emulator_url.append(std::to_string(port));
}

AuthError Auth::UseUserAccessGroup(const char* access_group) {
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Android also needs this stub.

// This is an iOS-only feature. No-op on other platforms.
return kAuthErrorNone;
}

void InitializeTokenRefresher(AuthData* auth_data) {
auto auth_impl = static_cast<AuthImpl*>(auth_data->auth_impl);
auth_impl->token_refresh_thread.Initialize(auth_data);
Expand Down
15 changes: 15 additions & 0 deletions auth/src/include/firebase/auth.h
Original file line number Diff line number Diff line change
Expand Up @@ -517,6 +517,21 @@ class Auth {
/// not available on the current device.
static Auth* GetAuth(App* app, InitResult* init_result_out = nullptr);

/// @brief Specifies a user access group for iCloud keychain access.
///
/// This method is only functional on iOS. On other platforms, it is a no-op
/// and will always return `kAuthErrorNone`.
///
/// If you are using iCloud keychain synchronization, you will need to call
/// this method to set the user access group.
///
/// @param[in] access_group The user access group to use. Set to `nullptr` or
/// an empty string to use the default access group.
///
/// @return `kAuthErrorNone` on success, or an AuthError code if an error
/// occurred.
AuthError UseUserAccessGroup(const char* access_group);

private:
/// @cond FIREBASE_APP_INTERNAL
friend class ::firebase::App;
Expand Down
18 changes: 18 additions & 0 deletions auth/src/ios/auth_ios.mm
Original file line number Diff line number Diff line change
Expand Up @@ -608,5 +608,23 @@ void DisableTokenAutoRefresh(AuthData *auth_data) {}
void InitializeTokenRefresher(AuthData *auth_data) {}
void DestroyTokenRefresher(AuthData *auth_data) {}

AuthError Auth::UseUserAccessGroup(const char* access_group_str) {
if (!auth_data_) {
return kAuthErrorUninitialized;
}
NSString* access_group_ns_str = nil;
if (access_group_str != nullptr && strlen(access_group_str) > 0) {
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If there is a blank string, let's pass it in verbatim instead of nil. Remember to update the docs to reflect this.

access_group_ns_str = [NSString stringWithUTF8String:access_group_str];
}

NSError* error = nil;
BOOL success = [AuthImpl(auth_data_) useUserAccessGroup:access_group_ns_str error:&error];
if (success) {
return kAuthErrorNone;
} else {
return AuthErrorFromNSError(error);
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you double-check which error codes this might return and make sure there are values for all of them in the AuthError enum and the AuthErrorFromNSError function?

}
}

} // namespace auth
} // namespace firebase
Loading