Xamarin. Android: открыть специфику c событие в календаре из другого приложения - PullRequest
1 голос
/ 23 января 2020

В настоящее время я работаю над приложением в Xamarin. Android, одна из функций которого заключается в том, что после нажатия кнопки пользователь попадает в указанное событие календаря c в приложении Microsoft Outlook. До сих пор я использовал Microsoft Graph API для получения элементов событий, и мне удалось открыть приложение Outlook в календаре или открыть Outlook с сообщением об ошибке «Не удалось открыть событие», но я не получил как поведение, так и заданный элемент события c. Я открываю приложение Outlook, вызывая браузер устройства по умолчанию со схемой Outlook URI. И то, и другое приведено ниже

browserLaunch("ms-outlook://events/open?account={my.account@email.com}&restid={id}");


private async void browserLaunch( string uri ) {
    await Browser.OpenAsync(uri, BrowserLaunchMode.SystemPreferred);
}

Точный вызов, который я делал для API Graphs, выглядит следующим образом:

https://graph.microsoft.com/v1.0/me/calendarview?startdatetime=2020-01-23T15:54:40.377Z&enddatetime=2020-01-30T15:54:40.377Z

, который возвращает список четных элементов со следующей схемой:

        "@odata.etag": "string",
            "id": "string",
            "createdDateTime": "20##-##-##T##:##:##.######Z",
            "lastModifiedDateTime": "20##-##-##T#3:##:##.#######Z",
            "changeKey": "string",
            "categories": [],
            "originalStartTimeZone": "Central Standard Time",
            "originalEndTimeZone": "Central Standard Time",
            "iCalUId": "string",
            "reminderMinutesBeforeStart": int,
            "isReminderOn": true/false,
            "hasAttachments": true/false,
            "subject": "string",
            "bodyPreview": "string",
            "importance": "string",
            "sensitivity": "string",
            "isAllDay": true/false,
            "isCancelled": true/false,
            "isOrganizer": true/true,
            "responseRequested": true/false,
            "seriesMasterId": null,
            "showAs": "string",
            "type": "string",
            "webLink": "https://outlook.office365.com/owa/?itemid={id}&exvsurl={int}&path=/calendar/item",
            "onlineMeetingUrl": null,
            "recurrence": null,
            "responseStatus": {
                "response": "none",
                "time": "0001-01-01T00:00:00Z"
            },
            "body": {
                "contentType": "html",
                "content": "string"
            },
            "start": {
                "dateTime": "20##-##-##T##:##:##.#######",
                "timeZone": "UTC"
            },
            "end": {
                "dateTime": "20##-##-##T##:##:##.#######",
                "timeZone": "UTC"
            },
            "location": {
                "displayName": "string",
                "locationType": "string",
                "uniqueId": "string",
                "uniqueIdType": "stirng"
            },
            "locations": [
                {
                    "displayName": "string",
                    "locationType": "string",
                    "uniqueId": "hexstrin-hexs-hexs-hexs-hexstringhex",
                    "uniqueIdType": "string"
                }
            ],
            "attendees": [
                {
                    "type": "string",
                    "status": {
                        "response": "string",
                        "time": "0001-01-01T00:00:00Z"
                    },
                    "emailAddress": {
                        "name": "string",
                        "address": "my.account@email.com"
                    }
                }
            ],
            "organizer": {
                "emailAddress": {
                    "name": "string",
                    "address": "my.account@email.com"
                }
            }

Я также пробовал разные идентификаторы, которые предоставляются API-интерфейсом графиков для параметра restid. До сих пор я использовал параметр itemid, найденный в URL-адресе поля webLink, идентификатор объекта json, changeKey и iCalUId, но последние два не дали мне ничего, кроме простого открытия Outlook.

Я также только что перешел на webLink, но он просто открывает легкий браузер (и попадает на белую страницу), который мне не нужен, так как он мне нужен специально для go приложения Outlook. Есть идеи?

1 Ответ

1 голос
/ 29 января 2020

Таким образом, лучшее текущее решение, которое мне удалось найти, - это открыть облегченный браузер, используя схему URL, отличную от любой предыдущей:

https://outlook.office365.com/calendar/item/{webLinkItemId}

, где webLinkItemId - это параметр itemId из полученного URL-адреса webLink из возвращенного объекта Graphs API json. Вы можете найти этот полный объект выше в моем исходном сообщении, но в этом объекте вы ищете следующее поле

"webLink": "https://outlook.office365.com/owa/?itemid={webLinkItemId}&exvsurl={int}&path=/calendar/item"

Вы хотите взять строку {webLinkItemId}, встроенную в приведенный выше URL, и подключить ее это в соответствующее место на схеме выше

...