【问题标题】:How to make a connection between IOS app and WatchOS app (NativeScript)如何在 IOS 应用程序和 WatchOS 应用程序之间建立连接(NativeScript)
【发布时间】:2015-07-22 16:41:14
【问题描述】:

我一直在阅读有关 watchkit 示例应用程序 link 的信息 - 我已经将它与我自己的应用程序一起使用。控制器的所有开/关检查花费了一些时间。

嗯 - 我的问题是,我需要手表应用程序需要 HTTP 并发出请求 - 我认为“最佳实践”方法是在 IOS 应用程序中实现所有逻辑,然后将其提供给 WatchOS 应用程序。 (如果有错误请纠正我)。

但老实说,我对我的 /platforms/ios/"watchappname" extension/app/bootstrap.js 应该如何与我的 IOS 应用程序进行通信有点困惑。

您的方法是什么?

注意:如果您遇到类似问题,请知道我也在他们的 GITHUB repo 上发布了此问题

【问题讨论】:

    标签: ios telerik watchkit nativescript


    【解决方案1】:

    对于 watchOS 2.0,您需要考虑使用 Watch Connectivity framework 而不是 openParentApplication 根据文档:

    框架提供了在后台传输数据的选项 或者当两个应用程序都处于活动状态并替换现有的 openParentApplication:reply: WKInterfaceController 的方法 类。

    【讨论】:

      【解决方案2】:

      使用 Watch 连接框架,使用 WCSession。你可以看看这个Tutorialthis。当我尝试以编程方式连接手表和 iPhone 时,它​​对我帮助很大

      【讨论】:

        【解决方案3】:

        我认为您正在寻找的方法是这个:

        -(void)application:(UIApplication *)application handleWatchKitExtensionRequest:(NSDictionary *)userInfo reply:(void (^)(NSDictionary *))reply
        

        在您的 iPhone 应用程序的 AppDelegate.m 文件中,您应该添加此方法。在你应该使用的方法内

        __block UIBackgroundTaskIdentifier watchKitHandler;
        watchKitHandler = [[UIApplication sharedApplication] beginBackgroundTaskWithName:@"backgroundTask"
                                                                       expirationHandler:^{
                                                                           watchKitHandler = UIBackgroundTaskInvalid;
                                                                       }];
        

        dispatch_after( dispatch_time( DISPATCH_TIME_NOW, (int64_t)NSEC_PER_SEC * 10), dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_DEFAULT, 0 ), ^{
            [[UIApplication sharedApplication] endBackgroundTask:watchKitHandler];
        } );
        

        总而言之,您的 iPhone 应用程序上的方法应该如下所示:

        //handle watch app request
        
        -(void)application:(UIApplication *)application handleWatchKitExtensionRequest:(NSDictionary *)userInfo reply:(void (^)(NSDictionary *))reply
        {
        
        
        
        //Make it a background task
        
        __block UIBackgroundTaskIdentifier watchKitHandler;
        watchKitHandler = [[UIApplication sharedApplication] beginBackgroundTaskWithName:@"backgroundTask"
                                                                       expirationHandler:^{
                                                                           watchKitHandler = UIBackgroundTaskInvalid;
                                                                       }];
        
        NSString* command = [userInfo objectForKey:@"command"];
        
        if ([command isEqualToString:@"request"]) {
        
            //do some action here
        
        // use the reply dictionary if necessary
        
        NSDictionary *responseObject = @{@"info": @"some Info"};
        
        reply(responseObject);    
        
        } else if ([command isEqualToString:@"request2"]) {
        
            // do some other action here
        
        }
        
        //finish background task
        
        dispatch_after( dispatch_time( DISPATCH_TIME_NOW, (int64_t)NSEC_PER_SEC * 10), dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_DEFAULT, 0 ), ^{
            [[UIApplication sharedApplication] endBackgroundTask:watchKitHandler];
        } );
        }
        

        在手表端,您应该使用以下代码:

        NSDictionary *request = @{ @"command": @"request", @"info": @"some additional things here for example"};
        [WKInterfaceController openParentApplication:request reply:^(NSDictionary *replyInfo, NSError *error ) {
        
        //do something with the reply dictionary here
        
            NSLog(@"%@", replyInfo);
        
        }];
        

        希望对你有帮助。

        编辑:

        此代码仅适用于 watchOS 1。如果您已经在为 watchOS 2 进行开发,请查看Watch Connectivity Framework

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-08-21
          • 2015-01-29
          • 1970-01-01
          • 1970-01-01
          • 2015-09-21
          • 2011-09-21
          相关资源
          最近更新 更多