2

当我使用onenote://从我的 ipad 应用程序打开 OneNote 时,它​​会打开 OneNote,但会显示一条错误消息

无法打开链接” One Note 中的此链接有问题。

这是我的代码

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"onenote://"]];

PS:OneNote for Ipad 必须先安装在 Ipad 设备中,然后再尝试。

这是 OneNote 的正确 URL SCHEME - onenote://

还是我做错了。

错误消息确实在关闭时会产生问题,但我只想摆脱错误消息。也可以将参数从我的应用程序传递到 OneNote。

帮助赞赏!

4

4 回答 4

3

使用“onenote-cmd://”应该打开 OneNote 没有任何错误。

于 2015-04-21T14:43:46.983 回答
1

您收到错误的原因是 iOS OneNote 客户端不支持在没有为笔记本、分区和页面完成参数的情况下由协议处理程序启动(它不知道导航到哪里)。如果您只是在onenote://没有指定目的地的情况下使用,这是“设计使然”,您将收到错误。

我们建议您在从应用程序打开 OneNote 时链接到特定页面以避免错误。OneNote REST API 返回一个指向您在创建页面时创建的页面的链接,您还可以使用 iOS 应用程序中的“复制链接到页面”功能检索链接。

于 2014-10-07T02:02:58.217 回答
1

正如 Nick 指出的那样,OneNote 应用程序需要额外的参数才能成功打开,而不会显示“无法打开链接”警报。这是我为解决问题所做的:

注意:在我的应用程序中,用户已经使用 LiveSDK(Microsoft 帐户登录)登录,因此我保存了他们的访问令牌。

我创建了一个“授权 OneNote”方法,该方法向 OneNote API 发送请求以在用户的​​默认笔记本中创建一个“页面”:

(void)AuthorizeOneNote
{
    NSString *date = [NSString stringWithFormat:@"%@", [NSDate date]];
    NSString *simpleHtml = [NSString stringWithFormat:
                            @"<html>"
                            "<head>"
                            "<title>\"%@\"</title>"
                            "<meta name=\"created\" content=\"%@\" />"
                            "</head>"
                            "<body>"
                            "<p></p>"
                            "</body>"
                            "</html>", @"Page Title", date];

    NSData *presentation = [simpleHtml dataUsingEncoding:NSUTF8StringEncoding];
    NSString *endpointToRequest = @"https://www.onenote.com/api/v1.0/pages";
    NSMutableURLRequest * request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:endpointToRequest]];
    request.HTTPMethod = @"POST";
    request.HTTPBody = presentation;
    [request addValue:@"text/html" forHTTPHeaderField:@"Content-Type"];


    [request setValue:[@"Bearer " stringByAppendingString:@"LIVE-ID-ACCESS-TOKEN"] forHTTPHeaderField:@"Authorization"];


    objConnectionOneNote = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:YES];
}

这就是我处理响应的方式:

(void)connectionDidFinishLoading:(NSURLConnection *)connection
{  
    if (connection == objConnectionOneNote)
    {
        NSString *strData = [[NSString alloc]initWithData:objData encoding:NSUTF8StringEncoding];

        NSMutableDictionary *dictData1 = [[NSMutableDictionary alloc] init];
        dictData1 = [NSJSONSerialization JSONObjectWithData:objData options:kNilOptions error:nil];

        oneNoteClientUrl = [dictData1 valueForKeyPath:@"links.oneNoteClientUrl.href"];
        NSLog(@"Response: %@",oneNoteClientUrl);
        NSLog(@"Response: %@",strData);

        // Launch OneNote Client
        if([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"onenote://"]])
        {
            [[UIApplication sharedApplication] openURL:[NSURL URLWithString:oneNoteClientUrl]];
        }
        else
        {
            [[UIApplication sharedApplication] openURL: [NSURL URLWithString:@"https://itunes.apple.com/us/app/microsoft-onenote-for-iphone/id410395246?mt=8&uo=4"]];
        }

    }

这里有几点需要注意:

  • 这将在每次从应用程序启动 OneNote 时创建一个新页面。为了打开相同的页面,您可以保留返回的 URL 并使用它来打开客户端。

  • MS Live Authentication 的访问令牌将在大约一小时后过期。发生这种情况时,OneNote API 请求会返回 401 Unauthorized 响应。为了缓解这种情况,您可以使用刷新令牌刷新访问令牌,该令牌也在实时身份验证期间返回。

希望能帮助到你!

于 2014-10-24T14:51:05.397 回答
0

随着新的自动化应用程序 iOS 工作流的添加,我对弄清楚如何将 OneNote 合并到我的操作中非常感兴趣。

我不打算制作应用程序,到目前为止,我找不到任何有关 OneNote 高级 url 方案的示例,因此能够获取一个链接,该链接将在 iPhone 或 iPad 上打开 OneNote 应用程序并将其转到正确的笔记本和页面会很棒。

理想情况下,我们可以使用 OneNote:// 工作的 url 方案,但需要针对哪个笔记本和页面以及如何使用它创建新笔记本或页面的附加参数。

工作流程超出了 IFTTT 所能做的(视情况而定),并且由于自动化的可能性,我们非常期待开始更多地使用 OneNote。

于 2015-02-20T22:35:13.487 回答