Обратный вызов работает. Код получен успешно. Проблема в том, что приложение аварийно завершает работу после возврата из потока авторизации WebAuthenticator. Это проблема только iOS, а не Android, который отлично работает при использовании ссылки на приложение Android, обслуживаемой файлом assetslinks.json на том же сервере.
Короткий вопрос
У вас получилось? В этом случае пропустите все трудоемкие детали и объясните мне все! В противном случае вот...
Что я пробовал
- Проверить ссылку на универсальное приложение с помощью настроек разработчика на iPhone.
- При подключенном отладчике приложения введите URL-адрес в Safari со специальной страницы «теста перенаправления» на нашем сервере. Убедитесь, что достигнута точка останова в ContinueUserActivity. Убедитесь, что приложение не аварийно завершает работу при использовании универсальной ссылки на приложение таким образом.
[*]Установка точки останова для проверки возвращенного кода авторизации. Затем немедленно вернитесь, чтобы избежать каких-либо других исключений.
buttonLogin.Clicked += async (sender, e) =>
{
var clientId = "123456789012-1ok9rauo969og7aljrnri1gesrr7l1b3.apps.googleusercontent.com";
var redirectUrl = "https://myfirebasedomain.com/auth";
var scopes = "profile%20openid%20email";
var authUrl = $"https://accounts.google.com/o/oauth2/au ... pe=offline";
Uri authUri = new Uri(authUrl);
Uri callbackUri = new Uri(redirectUrl);
WebAuthenticatorResult result;
try
{
result = await WebAuthenticator.AuthenticateAsync(new WebAuthenticatorOptions
{
Url = authUri,
CallbackUrl = callbackUri,
PrefersEphemeralWebBrowserSession = true
});
}
catch (TaskCanceledException)
{
// 'Not' an error. The user simply cancelled this op.
return;
}
catch (Exception ex)
{
Debug.Fail(ex.Message);
return;
}
// Exchange the authorization code for an access token
var payload = new
{
code = result.Properties["code"],
redirectUri = redirectUrl,
clientId = clientId,
key = "web",
};
var jsonPayload = JsonConvert.SerializeObject(payload, Formatting.Indented);
var content = new StringContent(jsonPayload, Encoding.UTF8, "application/json");
using var httpClient = new HttpClient();
HttpResponseMessage? response = null;
string? error = null;
try
{
// Exchange token using secret stored on server.
// We are unable to attempt this. The async post causes this
// method to return, and when it does, the app crashes.
}
catch (Exception ex)
{
Debug.WriteLine(ex.Message);
if (response != null)
{
error = await response.Content.ReadAsStringAsync();
}
Debug.Fail(error ?? "null");
}
};
Значение jsonPayload указывает на успех
{
"code": "4/0AanRRrte8fELNx0CyzgsPzrGCo46TLvkp_JhQaG0ao8DMmVLySwN4_8KIfAXNiouGAqkrQ",
"redirectUri": "https://myfirebasedomain.com/auth",
"clientId": "123456789012-1ok9rauo969og7aljrnri1gesrr7l1b3.apps.googleusercontent.com",
"key": "web"
}
- Поднимаемся на уровень выше, чтобы обернуть ContinueUserActivity для исключений. Я могу установить точку останова для возвращаемого результата. Сбой происходит, если этому методу разрешен запуск с этого момента.
public class AppDelegate : MauiUIApplicationDelegate
{
protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp();
public override bool ContinueUserActivity(UIApplication application, NSUserActivity userActivity, UIApplicationRestorationHandler completionHandler)
{
bool result = false;
try
{
// Calling the BC is what causes the AuthenticateAsync task to complete.
result = base.ContinueUserActivity(application, userActivity, completionHandler);
}
catch (Exception)
{
// NO exception being caught here.
}
return result;
}
}
Мой вопрос:
AFAIK Я все делаю правильно, но может ли кто-нибудь указать причину сбоя? ? Я склонен зарегистрировать это как ошибку в WebAuthenticator для iOS, но прежде чем я сделаю что-нибудь глупое, пожалуйста, «проверьте мою работу!»
Журнал сбоев (физическое устройство iPhone 11)
Loaded assembly: Anonymously Hosted DynamicMethods Assembly [External]
INFO: 0x1a3be2db0 - /System/Library/PrivateFrameworks/UIKitCore.framework/UIKitCore :
INFO: 0x1a390977c - /System/Library/PrivateFrameworks/UIKitCore.framework/UIKitCore : __UIVIEW_IS_EXECUTING_ANIMATION_COMPLETION_BLOCK__
INFO: 0x1a3c6677c - /System/Library/PrivateFrameworks/UIKitCore.framework/UIKitCore :
INFO: 014e7888 - /private/var/containers/Bundle/Application/0D3ED65C-DDCD-40D0-A24A-BE6EDA007591/IVSoftware.Maui.EchoesSyncProxy.app/IVSoftware.Maui.EchoesSyncProxy : xamarin_get_original_working_directory_path
0x101842cdc - /private/var/containers/Bundle/Application/0D3ED65C-DDCD-40D0-A24A-BE6EDA007591/IVSoftware.Maui.EchoesSyncProxy.app/IVSoftware.Maui.EchoesSyncProxy : AppleCryptoNative_X509ImportCollection
0x1c72e0de8 - /usr/lib/dyld :
=================================================================
Basic Fault Address Reporting
=================================================================
Memory around native instruction pointer (0x19e5d634c):0x19e5d633c 21 20 37 91 30 06 00 14 00 00 00 ea 6d ff ff 54 ! 7.0.......m..T
0x19e5d634c 10 00
INFO: 0x19e5d635c 30 04 00 36 11
INFO: 0x1a3abee00 - /System/Library/PrivateFrameworks/UIKitCore.framework/UIKitCore :
INFO: 0x1a3c02410 - /System/Library/PrivateFrameworks/UIKitCore.framework/UIKitCore :
INFO: 0x1a3908434 - /System/Library/PrivateFrameworks/UIKitCore.framework/UIKitCore :
INFO: 0x1a3886350 - /System/Library/PrivateFrameworks/UIKitCore.framework/UIKitCore :
INFO: Disposing input and output streams...
INFO: 0x1a10d5bbc - /System/Library/Frameworks/CoreFoundation.framework/CoreFoundation :
0x1a10d21b0 - /System/Library/Frameworks/CoreFoundation.framework/CoreFoundation :
0x1a1124274 - /System/Library/Frameworks/CoreFoundation.framework/CoreFoundation : CFRunLoopRunSpecific
INFO: 0x1a38863c0 - /System/Library/PrivateFrameworks/UIKitCore.framework/UIKitCore :
INFO: 0x1a2c47008 - /System/Library/Frameworks/QuartzCore.framework/QuartzCore :
INFO: 0x1a3908434 - /System/Library/PrivateFrameworks/UIKitCore.framework/UIKitCore :
INFO: 0x1a3c02410 - /System/Library/PrivateFrameworks/UIKitCore.framework/UIKitCore :
INFO: 0x1a3c02790 - /System/Library/PrivateFrameworks/UIKitCore.framework/UIKitCore :
INFO: 0x1a3886350 - /System/Library/PrivateFrameworks/UIKitCore.framework/UIKitCore :
INFO: 0x1a3909718 - /System/Library/PrivateFrameworks/UIKitCore.framework/UIKitCore :
INFO: 0x1a3ac1944 - /System/Library/PrivateFrameworks/UIKitCore.framework/UIKitCore :
INFO: 0x1c4e37488 - /System/Library/Frameworks/SafariServices.framework/SafariServices :
INFO: 0x1a3abee00 - /System/Library/PrivateFrameworks/UIKitCore.framework/UIKitCore :
INFO: 0x1017efa50 - /private/var/containers/Bundle/Application/0D3ED65C-DDCD-40D0-A24A-BE6EDA007591/IVSoftware.Maui.EchoesSyncProxy.app/IVSoftware.Maui.EchoesSyncProxy : AppleCryptoNative_X509ImportCollection
0x1017d1d0c - /private/var/containers/Bundle/Application/0D3ED65C-DDCD-40D0-A24A-BE6EDA007591/IVSoftware.Maui.EchoesSyncProxy.app/IVSoftware.Maui.EchoesSyncProxy : AppleCryptoNative_X509ImportCollection
0x22bba8ca8 - /usr/lib/system/libsystem_platform.dylib :
INFO:
=================================================================
Native Crash Reporting
=================================================================
INFO: Got a SIGSEGV while executing native code. This usually indicates
a fatal error in the mono runtime or one of the native libraries
used by your application.
=================================================================
=================================================================
Native stacktrace:
=================================================================
INFO: 0x101804b64 - /private/var/containers/Bundle/Application/0D3ED65C-DDCD-40D0-A24A-BE6EDA007591/IVSoftware.Maui.EchoesSyncProxy.app/IVSoftware.Maui.EchoesSyncProxy : AppleCryptoNative_X509ImportCollection
INFO: 0x1a8e0bfa8 - /usr/lib/system/libdispatch.dylib :
0x1a8e1aa34 - /usr/lib/system/libdispatch.dylib :
INFO: 0x1a8e1a64c - /usr/lib/system/libdispatch.dylib : _dispatch_main_queue_callback_4CF
INFO: 0x1014e7888 - /private/var/containers/Bundle/Application/0D3ED65C-DDCD-40D0-A24A-BE6EDA007591/IVSoftware.Maui.EchoesSyncProxy.app/IVSoftware.Maui.EchoesSyncProxy : xamarin_get_original_working_directory_path
0x101842cdc - /private/var/containers/Bundle/Application/0D3ED65C-DDCD-40D0-A24A-BE6EDA007591/IVSoftware.Maui.EchoesSyncProxy.app/IVSoftware.Maui.EchoesSyncProxy : AppleCryptoNative_X509ImportCollection
0x1c72e0de8 - /usr/lib/dyld :
Exiting early due to double fault.
INFO: 0x1a1124274 - /System/Library/Frameworks/CoreFoundation.framework/CoreFoundation : CFRunLoopRunSpecific
0x1ee26d4c0 - /System/Library/PrivateFrameworks/GraphicsServices.framework/GraphicsServices : GSEventRunModal
0x1a3c6677c - /System/Library/PrivateFrameworks/UIKitCore.framework/UIKitCore :
INFO: 0x1a388ce64 - /System/Library/PrivateFrameworks/UIKitCore.framework/UIKitCore : UIApplicationMain
0x1014bc5f4 - /private/var/containers/Bundle/Application/0D3ED65C-DDCD-40D0-A24A-BE6EDA007591/IVSoftware.Maui.EchoesSyncProxy.app/IVSoftware.Maui.EchoesSyncProxy : xamarin_UIApplicationMain
0x101815404 - /private/var/containers/Bundle/Application/0D3ED65C-DDCD-40D0-A24A-BE6EDA007591/IVSoftware.Maui.EchoesSyncProxy.app/IVSoftware.Maui.EchoesSyncProxy : AppleCryptoNative_X509ImportCollection
0x101813d04 - /private/var/containers/Bundle/Application/0D3ED65C-DDCD-40D0-A24A-BE6EDA007591/IVSoftware.Maui.EchoesSyncProxy.app/IVSoftware.Maui.EchoesSyncProxy : AppleCryptoNative_X509ImportCollection
0x101808714 - /private/var/containers/Bundle/Application/0D3ED65C-DDCD-40D0-A24A-BE6EDA007591/IVSoftware.Maui.EchoesSyncProxy.app/IVSoftware.Maui.EchoesSyncProxy : AppleCryptoNative_X509ImportCollection
0x1018062ac - /private/var/containers/Bundle/Application/0D3ED65C-DDCD-40D0-A24A-BE6EDA007591/IVSoftware.Maui.EchoesSyncP
INFO: 0x1a2c47008 - /System/Library/Frameworks/QuartzCore.framework/QuartzCore :
0x1a8e0bfa8 - /usr/lib/system/libdispatch.dylib :
0x1a8e1aa34 - /usr/lib/system/libdispatch.dylib :
0x1a8e1a64c - /usr/lib/system/libdispatch.dylib : _dispatch_main_queue_callback_4CF
0x1a10d5bbc - /System/Library/Frameworks/CoreFoundation.framework/CoreFoundation :
0x1a10d21b0 - /System/Library/Frameworks/CoreFoundation.framework/CoreFoundation :
INFO: 0x1a38863c0 - /System/Library/PrivateFrameworks/UIKitCore.framework/UIKitCore :
INFO: 0x1a390977c - /System/Library/PrivateFrameworks/UIKitCore.framework/UIKitCore : __UIVIEW_IS_EXECUTING_ANIMATION_COMPLETION_BLOCK__
INFO: 0x1a3909718 - /System/Library/PrivateFrameworks/UIKitCore.framework/UIKitCore :
INFO: roxy.app/IVSoftware.Maui.EchoesSyncProxy : AppleCryptoNative_X509ImportCollection
0x1017d4e84 - /private/var/containers/Bundle/Application/0D3ED65C-DDCD-40D0-A24A-BE6EDA007591/IVSoftware.Maui.EchoesSyncProxy.app/IVSoftware.Maui.EchoesSyncProxy : AppleCryptoNative_X509ImportCollection
0x10177c548 - /private/var/containers/Bundle/Application/0D3ED65C-DDCD-40D0-A24A-BE6EDA007591/IVSoftware.Maui.EchoesSyncProxy.app/IVSoftware.Maui.EchoesSyncProxy : AppleCryptoNative_X509ImportCollection
0x101782844 - /private/var/containers/Bundle/Application/0D3ED65C-DDCD-40D0-A24A-BE6EDA007591/IVSoftware.Maui.EchoesSyncProxy.app/IVSoftware.Maui.EchoesSyncProxy : AppleCryptoNative_X509ImportCollection
0x1017da4a0 - /private/var/containers/Bundle/Application/0D3ED65C-DDCD-40D0-A24A-BE6EDA007591/IVSoftware.Maui.EchoesSyncProxy.app/IVSoftware.Maui.EchoesSyncProxy : AppleCryptoNative_X509ImportCollection
INFO: 0x1a3c02790 - /System/Library/PrivateFrameworks/UIKitCore.framework/UIKitCore :
INFO: 0x1a3ac1944 - /System/Library/PrivateFrameworks/UIKitCore.framework/UIKitCore :
INFO: 0x1a3be2db0 - /System/Library/PrivateFrameworks/UIKitCore.framework/UIKitCore :
INFO: at UIKit.UIApplication:Main
at GoogleDriveLocalSyncProxy.Maui.TestProject.Program:Main
at :runtime_invoke_direct_void_string[]
at
=================================================================
=================================================================
Native Crash Reporting
=================================================================
Got a SIGSEGV while executing native code. This usually indicates
a fatal error in the mono runtime or one of the native libraries
used by your application.
=================================================================
An error has occurred in the native fault reporting. Some diagnostic information will be unavailable.
INFO:
=================================================================
Native stacktrace:
=================================================================
0x101804b64 - /private/var/containers/Bundle/Application/0D3ED65C-DDCD-40D0-A24A-BE6EDA007591/IVSoftware.Maui.EchoesSyncProxy.app/IVSoftware.Maui.EchoesSyncProxy : AppleCryptoNative_X509ImportCollection
0x1017efa50 - /private/var/containers/Bundle/Application/0D3ED65C-DDCD-40D0-A24A-BE6EDA007591/IVSoftware.Maui.EchoesSyncProxy.app/IVSoftware.Maui.EchoesSyncProxy : AppleCryptoNative_X509ImportCollection
0x1017d1d0c - /private/var/containers/Bundle/Application/0D3ED65C-DDCD-40D0-A24A-BE6EDA007591/IVSoftware.Maui.EchoesSyncProxy.app/IVSoftware.Maui.EchoesSyncProxy : AppleCryptoNative_X509ImportCollection
INFO: ...
=================================================================
Managed Stacktrace:
=================================================================
at
at UIKit.UIApplication:xamarin_UIApplicationMain
at UIKit.UIApplication:UIApplicationMain
INFO: 0x22bba8ca8 - /usr/lib/system/libsystem_platform.dylib :
0x1c4e37488 - /System/Library/Frameworks/SafariServices.framework/SafariServices :
INFO: `..T. .......
INFO: fe 77 d3 91 fe ff b4 3f 06 00 f1 0..6..w.....?...
INFO: ..@...}.Q.@.1..6
INFO: 40 f9 02 82 7d 92 51 10 40 f9 31 03 10 36
INFO: 0x1018062ac - /private/var/containers/Bundle/Application/0D3ED65C-DDCD-40D0-A24A-BE6EDA007591/IVSoftware.Maui.EchoesSyncProxy.app/IVSoftware.Maui.EchoesSyncProxy : AppleCryptoNative_X509ImportCollection
0x1017d4e84 - /private/var/containers/Bundle/Application/0D3ED65C-DDCD-40D0-A24A-BE6EDA007591/IVSoftware.Maui.EchoesSyncProxy.app/IVSoftware.Maui.EchoesSyncProxy : AppleCryptoNative_X509ImportCollection
0x10177c548 - /private/var/containers/Bundle/Application/0D3ED65C-DDCD-40D0-A24A-BE6EDA007591/IVSoftware.Maui.EchoesSyncProxy.app/IVSoftware.Maui.EchoesSyncProxy : AppleCryptoNative_X509ImportCollection
0x101782844 - /private/var/containers/Bundle/Application/0D3ED65C-DDCD-40D0-A24A-BE6EDA007591/IVSoftware.Maui.EchoesSyncProxy.app/IVSoftware.Maui.EchoesSyncProxy : AppleCryptoNative_X509ImportCollection
0x1017da4a0 - /private/var/containers/Bundle/Application/0D3ED65C-DDCD-40D0-A24A-BE6EDA007591/IVSoftware.Maui.EchoesSyncProxy.app/IVSoftware.Maui.EchoesSyncProxy : AppleCryptoNative_X509ImportCollection
0x1
INFO: 0x1a388ce64 - /System/Library/PrivateFrameworks/UIKitCore.framework/UIKitCore : UIApplicationMain
0x1014bc5f4 - /private/var/containers/Bundle/Application/0D3ED65C-DDCD-40D0-A24A-BE6EDA007591/IVSoftware.Maui.EchoesSyncProxy.app/IVSoftware.Maui.EchoesSyncProxy : xamarin_UIApplicationMain
0x101815404 - /private/var/containers/Bundle/Application/0D3ED65C-DDCD-40D0-A24A-BE6EDA007591/IVSoftware.Maui.EchoesSyncProxy.app/IVSoftware.Maui.EchoesSyncProxy : AppleCryptoNative_X509ImportCollection
0x101813d04 - /private/var/containers/Bundle/Application/0D3ED65C-DDCD-40D0-A24A-BE6EDA007591/IVSoftware.Maui.EchoesSyncProxy.app/IVSoftware.Maui.EchoesSyncProxy : AppleCryptoNative_X509ImportCollection
0x101808714 - /private/var/containers/Bundle/Application/0D3ED65C-DDCD-40D0-A24A-BE6EDA007591/IVSoftware.Maui.EchoesSyncProxy.app/IVSoftware.Maui.EchoesSyncProxy : AppleCryptoNative_X509ImportCollection
INFO: 0x1ee26d4c0 - /System/Library/PrivateFrameworks/GraphicsServices.framework/GraphicsServices : GSEventRunModal
INFO:
0x19e5d636c 60 02 00 54 11 20 e0 d2 11 02 11 cb e1 03 10 aa
INFO: Closing debug connection from remote debugger (TCP)
INFO: Closing debug connection from device (USB)
The app has been terminated.
INFO: Disposing input and output streams...
INFO: Disposing console and debugger streams...
ERROR: An error occurred while writing to the debug stream. Details: ObjectDisposed_Generic
ObjectDisposed_ObjectName_Name, UsbStream
Подробнее здесь: https://stackoverflow.com/questions/793 ... niversal-a
Мобильная версия