0

私はウォッチキットのサンプルアプリのリンクに関する情報を読んでいます-そして、私はそれを自分のアプリで動作させることができました。コントローラーのすべてのオン/オフチェックに少し時間がかかりました。

まあ-私の問題は、ウォッチアプリがHTTPを要求してリクエストを行う必要があるということです-「ベストプラクティス」の方法は、IOSアプリにすべてのロジックを実装してからWatchOSアプリに提供することだと思います。(間違っている場合は修正してください)。

しかし、正直なところ、私の /platforms/ios/"watchappname" extension/app/bootstrap.js がどのように私の IOS アプリと通信するのか、少し混乱しています。

これを行う上でのあなたのアプローチは何ですか?

注:同様の問題が発生している場合は、GITHUBリポジトリにも投稿したことを知っておいてください

4

3 に答える 3

0

watchOS 2.0 では、ドキュメントごとの 代わりにWatch Connectivity フレームワークの使用を検討する必要があります。openParentApplication

このフレームワークは、バックグラウンドで、または両方のアプリがアクティブなときにデータを転送するためのオプションを提供し、WKInterfaceController クラスの既存の openParentApplication:reply: メソッドを置き換えます。

于 2015-07-22T19:05:26.217 に答える
0

あなたが探している方法はこれだと思います:

-(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を参照してください。

于 2015-07-22T18:50:07.120 に答える
0

Watch Connectivity Framework を使用し、WCSession を使用します。このチュートリアルこれを見ることができます。時計とiPhoneをプログラムで接続しようとしたとき、それは私を大いに助けました

于 2015-07-22T19:15:45.763 に答える