从我的Ipad应用程序打开OneNote - 需要OneNote URL SCHEME?

时间:2014-10-06 14:51:28

标签: objective-c onenote

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

  

无法打开链接“One Note中此链接存在问题。

这是我的代码

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

PS:在尝试此操作之前,必须在Ipad设备中安装OneNote for Ipad。

  

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

     

或者我做错了。

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

帮助赞赏!!

4 个答案:

答案 0 :(得分:2)

使用“onenote-cmd://”可以打开OneNote而不会出现任何错误。

答案 1 :(得分:1)

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

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

答案 2 :(得分: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身份验证的访问令牌将在大约一小时后到期。发生这种情况时,OneNote API请求将返回401 Unauthorized响应。为了缓解这种情况,您可以使用刷新令牌刷新访问令牌,刷新令牌也会在实时身份验证期间返回。

希望它有所帮助!

答案 3 :(得分:0)

随着iOS新工作流程的增加,我非常有兴趣了解如何将OneNote融入我的行动中。

我不想制作应用程序,到目前为止,我找不到任何针对OneNote的高级网址方案的示例,因此能够获取可在iPhone或iPad上打开OneNote应用程序的链接并将其转到正确的笔记本和页面将是伟大的。

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

工作流程超出了IFTTT的范围(取决于具体情况),并且由于自动化的可能性,我们真的期待开始更多地使用OneNote。