LoginSignup
0
1

More than 5 years have passed since last update.

iOS11のIdentityLookupを使ってみる

Posted at

前置き

WWDC2017で新規frameworkとしてひっそり発表されたものの、セッションがなくドキュメントだけかと思っていたら突如としてビデオが上がっているという謎の機能です。あ、機能は謎じゃなくてセッションがいつ行われたのか、それとも本番で外されビデオだけなのか謎ですね。時間も17分ちょっとなのでますます怪しいです。

この機能について

SMS/MMSで届いたメッセージがJunkなのかをチェックする機能です。Extensionとして提供となりますが、Extensionはオフラインのときのみで、オンラインならサーバーにチェックしに行きます。

ソースはこんな感じ。いつものようにObjective-Cです、はい。

MessageFilterExtension.m

#import "MessageFilterExtension.h"


@interface MessageFilterExtension () <ILMessageFilterQueryHandling>
@end

@implementation MessageFilterExtension

#pragma mark - ILMessageFilterQueryHandling

- (void)handleQueryRequest:(ILMessageFilterQueryRequest *)queryRequest context:(ILMessageFilterExtensionContext *)context completion:(void (^)(ILMessageFilterQueryResponse *))completion {
    // First, check whether to filter using offline data (if possible).
    ILMessageFilterAction offlineAction = [self offlineActionForQueryRequest:queryRequest];

    switch (offlineAction) {
        case ILMessageFilterActionAllow:
        case ILMessageFilterActionFilter: {
            // Based on offline data, we know this message should either be Allowed or Filtered. Send response immediately.
            ILMessageFilterQueryResponse *response = [[ILMessageFilterQueryResponse alloc] init];
            response.action = offlineAction;

            completion(response);
            break;
        }

        case ILMessageFilterActionNone: {
            // Based on offline data, we do not know whether this message should be Allowed or Filtered. Defer to network.
            // Note: Deferring requests to network requires the extension target's Info.plist to contain a key with a URL to use. See documentation for details.
            [context deferQueryRequestToNetworkWithCompletion:^(ILNetworkResponse *_Nullable networkResponse, NSError *_Nullable error) {
                ILMessageFilterQueryResponse *response = [[ILMessageFilterQueryResponse alloc] init];
                response.action = ILMessageFilterActionNone;

                if (networkResponse) {
                    // If we received a network response, parse it to determine an action to return in our response.
                    response.action = [self actionForNetworkResponse:networkResponse];
                } else {
                    NSLog(@"Error deferring query request to network: %@", error);
                }

                completion(response);
            }];
            break;
        }
    }
}

- (ILMessageFilterAction)offlineActionForQueryRequest:(ILMessageFilterQueryRequest *)queryRequest {
    // Replace with logic to perform offline check whether to filter first (if possible).
    return ILMessageFilterActionNone;
}

- (ILMessageFilterAction)actionForNetworkResponse:(ILNetworkResponse *)networkResponse {
    // Replace with logic to parse the HTTP response and data payload of `networkResponse` to return an action.
    return ILMessageFilterActionNone;
}

@end

ふとここで疑問がありました。Filterをするということはメッセージを読む必要があるってことは怪しいアプリが出回るんじゃないかと。ただ、それは杞憂に終わりました。

  • Extensionからネットワークに送信できない
  • Extensionから外部のフォルダにファイルを書き込み出来ない

ということらしいです。
でも、サーバーの方は丸見えなんですよね。あれれ?

日本に帰ったらSMS使えるようになるのでテストしてみたいと思ってます。

セッション動画

ドキュメント

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1