从配对的Apple Watch

时间:2015-09-01 18:20:22

标签: ios notifications uilocalnotification watchkit apple-watch

我正在尝试实施一种解决方法,从Apple Watch应用程序中打开我的iPhone应用程序。

以下是通过通知执行此操作的用例:

Watch displays an available deal with a CTA button to see details on Phone

--------------------------
New rates options published! 

check details on phone

<Button>
---------------------------

当用户选择手表上的按钮时,用户会收到本地通知     在配对手机上“查看新的费率选项”

在选择本地通知时,会启动应用程序以显示详细信息。

我的方法是:

**On watch:**

call *openParentApplication:reply:*    ...this will open the iOS app in the background

**On app:** 

In *application:handleWatchKitExtensionRequest:reply:* 
...which is called on the iOS app when opened in background, trigger a local notification 


**User:**

User picks the local notification to bring app to the foreground

这会有用吗?如果是这样,如何从后台运行的应用程序中立即触发本地通知?

最后一个问题:是否有(合法的)方法可以在不需要本地通知的情况下执行此操作(不会被应用商店拒绝)?

1 个答案:

答案 0 :(得分:3)

批准的方法是使用Handoff而不是本地通知。使用Handoff,您可以使用WKInterfaceController openParentApplication:reply:方法指定手表上发生的当前活动。然后,当用户查看iPhone的锁定屏幕时,他们会在左下角看到应用程序的图标。从那里向上滑动将启动应用程序,Handoff活动将在启动时传递到应用程序,以便您可以根据需要进行深层链接。

为此目的使用本地通知可能有效,但它会有一些缺点。首先,它是笨拙的;切换在其方法中更为被动。其次,为了安排本地通知,用户必须同意接收它们;从用户的角度来看,这是出乎意料的行为。

另外,请记住,在watchOS 2中, DisplayMetrics metrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(metrics); int height = metrics.heightPixels; int width = metrics.widthPixels; Bitmap bmap2 = BitmapFactory.decodeResource(getResources(), R.drawable.superman); Bitmap bitmap = Bitmap.createScaledBitmap(bmap2, width, height, true); WallpaperManager wallpaperManager = WallpaperManager.getInstance(getApplicationContext()); try { wallpaperManager.setBitmap(bitmap); } catch (IOException e) { e.printStackTrace(); } 方法不可用......真正的通信API取而代之。查看updateUserActivity:userInfo:webpageURL:以获取更多信息,并查看WatchConnectivity框架。