web-dev-qa-db-ja.com

プッシュ通知でアクションボタンを処理する方法

作業中Apple Watch Notifications :-したがって、(オブジェクトLibから)通知インターフェイスにボタンを追加すると、エラーは次のようになります。

ボタンは通知インターフェイスではサポートされていません

PushNotificationPayload.apnsにはWatchKit Simulator Actionsがありますこのように:

"WatchKit Simulator Actions": 
[
    {
        "title": "View",
        "identifier": "firstButtonAction"
    }
],

シミュレーターはこれを私に示します

enter image description here

今私の質問は、サーバーからViewを送信するときに、このPushNotificationボタンをどのように処理できるかということです。

apsファイルにアクションボタンが含まれている場合、Apple Watch、

指定されたキーを使用して通知ディクショナリでサーバーから送信する方法は?

アクションボタンのBGカラーを変更するには?

apsではなくデバイスthe Apple WatchActionButtonを含むサンプルSimulatorファイルを教えてください。

WatchKit Simulator ActionsキーをWatchKit Actionsキーに変更してテストしましたが、アクションボタンが表示されません。

Answerの@vivekDasが示唆しているように、私はapsを次のように置き換えて確認しました。

"alert" : {
     "body" : "Acme message received from Johnny Appleseed",
     "action-loc-key" : "VIEW",
     "action" : [
        {
           "id" : "buttonTapped",
           "title" : "View"
        }
     ]
  }

しかし、Xcodeのシミュレーターはアクションボタンを表示します。

これはデバイスApple Watchで実行される可能性があると思います、これは...?

これについて私に何を提案しますか。

14
user3661308

私はこれに2時間苦労しているので、実際のAPNS Servを介して、本番環境の通知ボタンに対してこれを行う方法です。

1)appDelegateの親アプリでカテゴリに登録します。

- (void)registerSettingsAndCategories {
    // Create a mutable set to store the category definitions.
    NSMutableSet* categories = [NSMutableSet set];

    // Define the actions for a meeting invite notification.
    UIMutableUserNotificationAction* acceptAction = [[UIMutableUserNotificationAction alloc] init];
    acceptAction.title = NSLocalizedString(@"Repondre", @"Repondre commentaire");
    acceptAction.identifier = @"respond";
    acceptAction.activationMode = UIUserNotificationActivationModeForeground; //UIUserNotificationActivationModeBackground if no need in foreground.
    acceptAction.authenticationRequired = NO;

    // Create the category object and add it to the set.
    UIMutableUserNotificationCategory* inviteCategory = [[UIMutableUserNotificationCategory alloc] init];
    [inviteCategory setActions:@[acceptAction]
                    forContext:UIUserNotificationActionContextDefault];
    inviteCategory.identifier = @"respond";

    [categories addObject:inviteCategory];

    // Configure other actions and categories and add them to the set...

    UIUserNotificationSettings* settings = [UIUserNotificationSettings settingsForTypes:
                                            (UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound)
                                                                             categories:categories];

    [[UIApplication sharedApplication] registerUserNotificationSettings:settings];
}

2)Apnsサーバーからカテゴリを追加します(私にとっては「応答」)

{"aps":{"alert":"bla","category":"respond","badge":2}}

3)WatchKitExtentionで、データが渡されます:

- (void)handleActionWithIdentifier:(NSString *)identifier  forRemoteNotification:(NSDictionary *)remoteNotification{

     if ([identifier isEqualToString:@"respond"]) {
//Do stuff Here to handle action... 
     }
}

4)親アプリのappDelegate:

- (void) application:(UIApplication *)application
handleActionWithIdentifier:(NSString *)identifier
     forRemoteNotification:(NSDictionary *)userInfo
         completionHandler:(void (^)())completionHandler {
    completionHandler();
}

警告!親アプリでもこのアクションを処理する必要があります(通知をパンダウンすると、iPhoneでも応答ボタンが表示されるためです。:

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
18
Jeremy Luisetti