домены приложения в настройках вашего приложения
Приложение Facebook — домен этого URL не включен в домены приложения. Зачем?
При попытке войти в приложение Facebook я получаю следующую ошибку:
Невозможно загрузить URL: домен этого URL не включен в домены приложения. Чтобы иметь возможность загрузить этот URL, добавьте все домены и субдомены вашего приложения в поле «Домены приложения» в настройках приложения.
Как вы можете видеть на следующем изображении:
Ниже приведена конфигурация, которую я установил в своем приложении Facebook.
(Обратите внимание: в целях конфиденциальности я изменил значения для App ID а также App Secret на изображении)
Код этого базового примера приложения находится в этом репозитории GitHub:
Я действительно не знаю, почему это говорит, что the domain of this URL isn’t included in the app’s domains когда это на самом деле там.
На поле: App Domains Я пробовал с обоими доменами одновременно:
Сгенерированный URL для входа в систему выглядит следующим образом:
Я настроил домен: facebook-php-test.com в качестве виртуального хоста на сервере Apache.
Я должен сказать, что я много работал с Facebook PHP SDK и я впервые с этим борюсь. На самом деле, у меня возникла эта проблема с другим большим приложением, с которым я работал, после нескольких часов, пытаясь решить проблему, я создал это фиктивное приложение, чтобы попытаться выяснить, в чем причина проблемы.
Я перепробовал много вещей без успеха.
Есть идеи, как это решить?
РЕДАКТИРОВАТЬ 01
После предложения Mr.Geeker Комментарий Я сделал следующее …
Добавлен товар: Facebook Login и настроен как показано ниже:
Затем, наконец, я мог идти вперед, и меня попросили разрешения:
Но, к сожалению, после предоставления разрешений я получил следующее:
Любая идея о том, как продолжить с этого момента?
РЕДАКТИРОВАТЬ 02 — РЕШЕНИЕ
Кстати я тоже отключил Client OAuth Login так как мое приложение не использует его.
Решение
Facebook теперь использует некоторые функции в качестве плагинов. В левой части выберите Продукты и добавьте продукт. Затем выберите Вход в систему. Довольно прямо оттуда вы увидите все варианты Oauth.
Как первоначально ответили Вот
Другие решения
В марте 2018 года Facebook обновил API и принудительно включил все приложения в строгом режиме.
Чтобы это работало, вы должны включить полный URL-адрес обратного вызова в поле Valid OAuth Redirect URIs. Если вы перенаправите на «https://www.example.com/facebook/callback «, должен быть включен полный URI (без параметров):
Домен должен быть установлен в доменах приложения и в полях URL сайта сайта на странице основных настроек:
Если ничего из этого не работает, и «Невозможно загрузить URL: домен этого URL не включен в домены приложения». сообщение продолжает показываться, проверьте, есть ли у вас последняя версия SDK. Я мог бы заставить его работать после обновления de PHP SDK с версии 5.5 до 5.6.2
Я использую PHP 5.5, и я нашел ошибку.
PHP Facebook API VERSION = ‘5.5.0’, DEFAULT_GRAPH_VERSION = ‘v2.9’ добавлял URI ?код = XXX на моей странице обратного вызова, как это:
mydomainExample.com/callbackFacebook.php ?код = XXXXXXX
и я изменил исходный код, чтобы удалить строку после ‘?’. Теперь URL-адрес обратного вызова
Внутренний доступ к приложениям
Делитесь наборами App Bundle и APK-файлами со своей командой с помощью ссылки.
Экспериментируйте на ранних этапах разработки
Загружайте тестовые сборки и генерируйте ссылки для скачивания – это просто и быстро. Доступ к рабочей версии или ключ загрузки необязателен.
Используйте существующие номера версий
Вы можете повторно использовать существующие номера версий и даже загружать отладочные объекты.
Управляйте доступом
Создайте белый список адресов электронной почты или откройте доступ к приложению по ссылке.
Рекомендации
Приложение нельзя скачать для внутреннего тестирования, если оно недоступно пользователям. Чтобы скачать внутреннюю версию приложения, тестировщикам нужен доступ к странице приложения в Google Play.
Если вы достигли лимита скачиваний (100) по ссылке на внутренний доступ к приложениям, загрузите тот же набор App Bundle или APK-файл и получите новую ссылку для дополнительных тестировщиков.
Срок действия ссылки на внутренний доступ к приложениям составляет 60 дней. После этого вы можете загрузить тот же набор App Bundle или APK-файл и получить новую ссылку.
Полезные материалы
Использование внутреннего доступа
Узнайте больше о том, что такое внутренний доступ к приложению и как его использовать.
Тестирование с помощью внутреннего доступа
Узнайте, как проводить тестирование с помощью внутреннего доступа к приложениям.
Управляйте доступом
Загрузите тестовую сборку, чтобы начать использовать внутренний доступ к приложениям.
Наборы Android App Bundle и общий доступ к тестовым сборкам
Посмотрите эту запись выступления на конференции Google I/O 2019, чтобы узнать больше о настраиваемом предоставлении функций и тестовых сборках.
«Благодаря внутреннему доступу к приложениям мы смогли повысить эффективность работы как отдела разработки, так и отдела контроля качества».
Качество приложений
Хотите добиться долгосрочного успеха? Повышайте производительность приложения, улучшайте его функции, а также качество контента и интерфейса.
Внутреннее тестирование
Быстро распространяйте свое приложение среди доверенных тестировщиков, не дожидаясь результатов проверки. Используйте процессы сертификации сборки перед публикацией для более широкой аудитории.
Закрытое тестирование
Предлагайте доверенным пользователям протестировать новые функции и получайте отзывы, которые не влияют на общедоступные оценки.
Отчеты о тестировании
Выявляйте проблемы в работе приложения до того, как они коснутся пользователей. Тестируйте приложение на разных устройствах Android и просматривайте данные о его стабильности, производительности, специальных возможностях и прочих характеристиках.
App Bundle Explorer
Управляйте всеми своими наборами App Bundle и объектами на одной странице и получайте полезные метаданные, файлы и статистику по ресурсам Google Play с поддержкой Dynamic Delivery.
Дополнительные функции
Используйте внутренний доступ к приложениям
Делитесь тестовыми сборками с коллегами и отделом контроля качества, предоставив им ссылку для скачивания.
Подпишитесь на новости Google Play для разработчиков
Домены приложений
Операционные системы и среды выполнения обычно содержат определенные средства изоляции приложений друг от друга. Например, в ОС Windows для изоляции приложений используются процессы. Эта изоляция необходима, чтобы гарантировать, что код, выполняемый одним приложением, не сможет нарушить работу других, не связанных с ним приложений.
Домены приложений образуют изолированную область для безопасности, надежности, управления версиями и выгрузки сборок. Домены приложений обычно создаются базовыми средами выполнения, которые отвечают за начальную загрузку среды CLR перед запуском приложения.
Преимущества изоляции приложений
Исторически сложилось так, что для разделения приложений, выполняющихся на одном компьютере, используются границы процессов. Каждое приложение загружается в отдельный процесс, который отделяет его от других приложений, выполняющихся на том же компьютере.
Приложения оказываются изолированными друг от друга, поскольку адреса в памяти привязаны к процессам; бессмысленно использовать в процессе указатель, передаваемый ему из другого процесса. Кроме того, прямые вызовы между процессами невозможны. Вместо этого необходимо использовать прокси, которые обеспечивают уровень косвенности.
Перед запуском управляемый код должен пройти процесс проверки (если администратор не даст разрешение пропустить проверку). В процессе проверки определяется, может ли код предпринимать попытки обращения к неверным адресам памяти или осуществлять другие действия, способные привести к нарушению правильной работы процесса, в котором выполняется этот код. Код, прошедший проверку, называется типобезопасным. Возможность проверки кода на безопасность типа позволяет среде CLR обеспечивать такой же высокий уровень изоляции процессов друг от друга, как и при использовании границ процессов, но со значительно более низкими затратами по производительности.
Домены приложений предоставляют среде CLR более безопасные и гибкие блоки, которые могут использоваться для разделения отдельных приложений. В одном процессе можно запустить несколько доменов приложений с таким же уровнем изоляции, какой обеспечивают отдельные процессы, но без дополнительных издержек на межпроцессные вызовы или переключение между процессами. Возможность выполнения нескольких приложений в одном процессе значительно повышает масштабируемость серверов.
Изоляция приложений также играет важную роль в обеспечении безопасности. Так, например, можно запустить элементы управления нескольких веб-приложений в одном процессе браузера так, что эти элементы управления не смогут получить доступ к данным и ресурсам друг друга.
Изоляция приложений при помощи доменов приложений имеет следующие преимущества.
Сбои в одном из приложений не затронут прочие приложения. Поскольку типобезопасный код не может вызывать сбои в памяти, использование доменов приложений гарантирует, что код, выполняющийся в одном домене, не окажет воздействия на другие приложения процесса.
Можно прекратить выполнение отдельных приложений, не останавливая процесс целиком. Использование доменов приложений позволяет выгружать код, используемый отдельным приложением.
Невозможно выгружать отдельные сборки или типы. Выгрузить можно только домен целиком.
Код, используемый одним приложением, не может иметь непосредственного доступа к коду или ресурсам другого приложения. В среде CLR эта изоляция реализована за счет запрета прямых вызовов между объектами в различных доменах приложений. Объекты, передаваемые от домена к домену, копируются или взаимодействуют через прокси. Если объект копируется, вызов этого объекта является локальным. То есть вызывающий и вызываемый объекты находятся в одном домене приложения. Если доступ к объекту осуществляется через прокси, осуществляется удаленный вызов объекта. В этом случае вызывающий и вызываемый объекты находятся в разных доменах приложений. При междоменных вызовах используется та же инфраструктура удаленных вызовов, что и при вызовах между двумя разными процессами или двумя разными компьютерами. Для правильной JIT-компиляции вызова метода метаданные используемого объекта должны быть доступны для обоих доменов приложений. Если вызывающий домен не имеет доступа к метаданным для вызванного объекта, компиляция может завершиться ошибкой с исключением типа FileNotFoundException. Для получения дополнительной информации см. Remote Objects. Механизм определения способов междоменного доступа для объекта зависит от объекта. Для получения дополнительной информации см. System.MarshalByRefObject.
Поведение кода определяется границами приложения, в котором он выполняется. Другими словами, домен приложения предоставляет параметры конфигурации, такие как политики управления версиями приложения, местоположение удаленных сборок, к которым выполняется обращение, и сведения о том, где следует искать локальные сборки, загруженные в домен.
Разрешения, предоставленные коду, могут управляться доменом приложения, в котором выполняется этот код.
Домены приложений и сборки
В этом разделе описывается связью между доменами приложений и сборками. Чтобы выполнить код сборки, ее необходимо загрузить в домен приложения. Как правило, для запуска приложения в домен приложения необходимо загрузить несколько сборок.
Способ загрузки определяет, можно ли использовать JIT-скомпилированный код сборки в нескольких доменах приложений в процессе и можно ли выгружать сборку из процесса.
Если сборка загружается как нейтральная к домену, то все домены приложений с одним набором разрешений безопасности могут совместно использовать JIT-скомпилированный код, что снижает требуемый для приложения объем памяти. Однако сборку нельзя выгружать из процесса.
Если сборка не загружается как нейтральная к домену, она должна быть JIT-скомпилирована в каждом домене приложения, в который она загружается. Однако сборку можно выгрузить из процесса, выгрузив все домены приложений, в которые она загружается.
Следует ли загружать сборки как нейтральные к домену, определяется в хост-приложении среды выполнения при загрузке среды выполнения в процесс. Для управляемых приложений примените атрибут LoaderOptimizationAttribute к методу точки входа процесса и укажите значение из связанного перечисления LoaderOptimization. Для неуправляемых приложений, в которых размещается среда CLR, при вызове функции CorBindToRuntimeEx задайте соответствующий флаг.
Существует три варианта загрузки нейтральных к домену сборок.
LoaderOptimization.SingleDomain не загружает сборки как нейтральные к домену, за исключением Mscorlib, которая всегда загружается как нейтральная к домену. Этот вариант называется однодоменным, поскольку обычно он используется, когда в хост-приложении запускается только одно приложение в процессе.
LoaderOptimization.MultiDomain загружает все сборки как нейтральные к домену. Этот вариант используется при наличии нескольких доменов приложений, в каждом из которых выполняется одинаковый код.
LoaderOptimization.MultiDomainHost загружает сборки со строгими именами как нейтральные к домену, если они и все их зависимости установлены в глобальном кэше сборок. Другие сборки загружаются и JIT-компилируются отдельно для каждого домена приложения, в котором они загружаются, поэтому могут выгружаться из процесса. Этот вариант используется при работе нескольких приложений в одном процессе или при наличии набора сборок, которые являются общими для нескольких доменов приложений, и сборок, которые должны выгружаться из процесса.
JIT-скомпилированный код нельзя сделать общим для сборок, загруженных в контекст загрузки с помощью метода LoadFrom класса Assembly или загруженных из образов с помощью перегрузок метода Load, задающего байтовые массивы.
Сборки, которые были скомпилированы в машинный код с помощью Ngen.exe (средства для создания машинных образов), могут совместно использоваться доменами приложений, если они загружены как нейтральные к домену при первой загрузке в процесс.
JIT-скомпилированный код для сборки, содержащей точку входа приложения, может быть общим, только если все его зависимости могут использоваться совместно.
Сборка, нейтральная к домену, может JIT-компилироваться более одного раза. Например, когда наборы разрешений безопасности двух доменов приложений отличаются, они не могут совместно использовать один и тот же JIT-скомпилированный код. Однако каждая копия JIT-скомпилированной сборки может использоваться совместно с другими доменами приложений, имеющими такой же набор разрешений.
При принятии решения о том, следует ли загружать сборки как нейтральные, осуществляется компромисс между сокращением расхода памяти и производительностью.
Доступ к статическим данным и методам для нейтральных к домену сборок осуществляется медленнее из-за необходимости изоляции сборок. Каждый домен приложения, обращающийся к сборке, должен обладать собственной копией статических данных, чтобы избежать ссылок на объекты в статических полях, пересекающих границы домена. В результате среда выполнения содержит дополнительные правила для перенаправления вызывающего объекта к соответствующей копии статических данных или метода. Эти дополнительные правила замедляют вызов.
При загрузке сборки как нейтральной к домену необходимо найти и загрузить все зависимости сборки, поскольку зависимость, которую нельзя загрузить как нейтральную, не позволяет загрузить сборку как нейтральную.
Домены приложений и потоки
Домен приложения формирует изолированную область для безопасности, управления версиями, надежности и выгрузки управляемого кода. Поток представляет собой конструкцию операционной системы, используемую в среде CLR для выполнения кода. Во время выполнения весь управляемый код загружается в домен приложения и выполняется в одном или нескольких управляемых потоках.
Однозначного соответствия между потоками и доменами приложений не существует. В одном домене приложения могут одновременно выполняться несколько потоков, при этом конкретный поток не ограничен одним доменом приложения. Таким образом, потоки могут использоваться в разных доменах приложений. Новый поток для каждого домена приложения не создается.
В любой момент времени каждый поток выполняется в каком-либо домене приложения. В домене приложения может выполняться один или несколько потоков или не выполняться ни одного потока. Среда выполнения отслеживает соответствие потоков и доменов приложений, в которых они выполняются. В любой момент времени можно найти домен, в котором выполняется поток, вызвав метод Thread.GetDomain.
Домены приложений и язык и региональные параметры
Язык и региональные параметры, представляемые объектом CultureInfo, связаны с потоками. Чтобы получить язык и региональные параметры, связанные с выполняющимся в данный момент потоком, используйте свойство CultureInfo.CurrentCulture, а чтобы получить или задать язык и региональные параметры, связанные с выполняющимся в данный момент потоком, используйте свойство Thread.CurrentCulture. Если связанные с потоком язык и региональные параметры явно заданы с помощью свойства Thread.CurrentCulture, они будут связаны с этим потоком и за пределами домена приложения. В противном случае связанные с потоком язык и региональные параметры в любой момент времени определяются значением свойства CultureInfo.DefaultThreadCurrentCulture в домене приложения, где выполняется поток:
Программирование с использованием доменов приложений
Домены приложений обычно создаются и управляются программно, хост-приложениями среды выполнения. Однако иногда работать с доменами приложений требуется самим приложениям. Например, приложение может загружать компонент в домен, чтобы иметь возможность выгрузить домен (и компонент) без необходимости останавливать все приложение.
AppDomain — это программный интерфейс для доменов приложений. Этот класс содержит методы для создания и выгрузки доменов, для создания экземпляров типов в доменах и для подписки на различные уведомления, такие как выгрузка домена приложения. В следующей таблице перечислены часто используемые методы AppDomain.
Метод AppDomain | Описание |
---|---|
CreateDomain | Создает новый домен приложения. Рекомендуется использовать перегрузку этого метода, в которой определяется объект AppDomainSetup. Это предпочтительный способ установки свойств нового домена, таких как база приложения или корневой каталог приложения, расположение файла конфигурации домена и путь поиска, используемый средой CLR для загрузки сборок в домен. |
ExecuteAssembly и ExecuteAssemblyByName | Выполняет сборку в домене приложения. Это метод экземпляра, поэтому его можно использовать для выполнения кода в другом домене приложения, на который имеется ссылка. |
CreateInstanceAndUnwrap | Создает экземпляр указанного типа в домене приложения и возвращает прокси. Этот метод служит для избежания загрузки сборки, содержащей созданный тип, в вызывающую сборку. |
Unload | Корректно завершает работу домена. Домен приложения не выгружается до тех пор, пока все запущенные в домене потоки не будут остановлены или исключены из домена. |
Среда CLR не поддерживает сериализацию глобальных методов, поэтому для выполнения глобальных методов в других доменах приложений использовать делегаты нельзя.
Неуправляемые интерфейсы, описанные в спецификации Hosting Interfaces Specification для среды CLR, также предоставляют доступ к доменам приложений. Хост-приложения среды выполнения могут использовать интерфейсы из неуправляемого кода для создания доменов приложений внутри процесса и для получения доступа к ним.
Переменная среды COMPLUS_LoaderOptimization
Переменная среды, которая задает политику оптимизации загрузчика по умолчанию для исполняемого приложения.
Синтаксис
Примечания
Стандартное приложение загружает в домен приложения несколько сборок. После этого можно выполнить содержащийся в них код.
Способ загрузки определяет, может ли JIT-скомпилированный код сборки использоваться несколькими доменами приложения в одном процессе.
Если сборка загружается как независимая от домена, то все домены приложения с одним набором разрешений безопасности могут использовать один JIT-скомпилированный код. В этом случае приложение использует меньше памяти.
Если сборка загружается как зависимая от домена, ее необходимо JIT-компилировать во всех соответствующих доменах приложения, при этом в каждом случае загрузчик должен использовать разные внутренние ресурсы.
Если значение флага среды COMPLUS_LoaderOptimization — 1, то хост-приложение среды выполнения использует способ загрузки SingleDomain. Он принудительно загружает все сборки как зависимые от домена, за исключением сборки Mscorlib, которая всегда загружается как независимая. Этот вариант называется однодоменным, поскольку обычно он используется, когда в хост-приложении запускается только одно приложение в процессе.
Флаг среды COMPLUS_LoaderOptimization предназначен для сценариев диагностики и тестирования. Когда он включен, работа может существенно замедляться, а использование памяти — увеличиваться.
Пример кода
Чтобы все сборки для службы IISADMIN загружались как зависимые от домена, добавьте код COMPLUS_LoaderOptimization=1 в многострочный параметр среды в разделе HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\IISADMIN.
Разработка безопасных приложений, которым будут доверять
Правила Google Play нужны для того, чтобы миллиарды пользователей во всем мире могли безопасно работать с вашими приложениями и играми. На этой странице вы можете ознакомиться с нашими правилами и Соглашением о распространении программных продуктов, а также найти дополнительные обучающие ресурсы.
Наши правила и ресурсы
Запрещенный контент
Прежде чем опубликовать приложение в Google Play, убедитесь, что оно соответствует нашим правилам в отношении контента и законам страны, для которой оно предназначено.
Выдача себя за другое лицо
Когда разработчик выдает себя за другое лицо, это вредит и клиентам, и всему сообществу разработчиков. Запрещено публиковать приложения, которые вводят пользователей в заблуждение путем выдачи автора за другое лицо.
Интеллектуальная собственность
Когда недобросовестный разработчик копирует чужую работу или пытается ввести пользователей в заблуждение, это вредит и клиентам, и всему сообществу разработчиков. Призываем вас отказаться от плагиата в своих приложениях.
Нарушение конфиденциальности, злоупотребление ресурсами устройства и мошенничество
Конфиденциальность пользователей и безопасность сервисов очень важны для нас. Поэтому в Google Play строго запрещается публиковать вредоносные, мошеннические и другие приложения, которые недопустимым образом используют ресурсы сети или устройства, а также персональные данные.
Монетизация и реклама
Google Play поддерживает различные способы монетизации, включая платное распространение, продажу контента через приложение, подписки и рекламу. Чтобы обеспечить удобство для пользователей, мы требуем, чтобы вы соблюдали правила, описанные по ссылкам ниже.
Данные для Google Play и продвижение
Методы, которые вы применяете для продвижения своего приложения, значительно влияют на восприятие Google Play посетителями. Не используйте спам и рекламу низкого качества, а также не завышайте популярность приложения искусственно.
Спам и функциональность
Приложения должны содержать хотя бы минимальный набор функций и работать корректно. Если в приложении постоянно происходят сбои, а также если оно бесполезно для пользователей, его нельзя публиковать в Google Play.
Вредоносное ПО
Вредоносным ПО считается любой код, который может представлять угрозу для пользователя, а также его данных или устройств. Приложения, содержащие такой код, категорически запрещено публиковать в Google Play.
Нежелательное ПО для мобильных устройств
Приложения, которые нарушают принципы в отношении нежелательного ПО для мобильных устройств, потенциально опасны. Мы стараемся защищать пользователей от подобных программ.
Семьи
Прежде чем добавлять в Google Play приложение, целевой аудиторией которого являются дети, убедитесь, что оно действительно подходит для детей и соответствует законодательству.
Другие программы
Все приложения, распространяемые через Google Play, должны соответствовать требованиям к контенту, которые размещены в этом Центре правил для разработчиков. Однако если приложение создано для особенных функций Android, в отношении него могут применяться дополнительные условия. Ознакомьтесь с правилами по ссылкам ниже. Возможно, какие-то из этих требований относятся к вашему приложению.
Контроль за соблюдением правил
Узнайте, как действуют наши правила, как мы контролируем их соблюдение и как устранить нарушения.