背景
規制当局は、アプリがプライバシー同意ウィンドウでユーザーが [同意する] ボタンをクリックする前に、機密性の高い関連 API を呼び出せないようにすることを求めています。この規制要件を満たすために、mPaaS iOS 10.1.60.27 以降 (60 シリーズバージョン) および 10.1.32.18 以降 (32 シリーズバージョン) のベースラインでこの機能がサポートされています。このドキュメントを参照して、必要に応じてプロジェクトを変更できます。
使用方法
mPaaS iOS フレームワークがアプリのライフサイクルをホストすることが許可されているかどうかによって、異なる使用方法が必要です。プロジェクトの main.m ファイルで、フレームワークに対して DFApplication と DFClientDelegate が有効になっているかどうかを確認することで、mPaaS iOS フレームワークがアプリのライフサイクルをホストすることが許可されているかどうかを判断できます。DFApplication と DFClientDelegate が有効になっている場合、ホスティングは許可されています。
return UIApplicationMain(argc, argv, @"DFApplication", @"DFClientDelegate"); // 現在 MPAAS フレームワークを使用していますフレームワークによるアプリのライフサイクルのホスト
1. プライバシーポップアッププロンプトを許可します。
MPaaSInterface カテゴリ で、enablePrivacyAuth API メソッドを再書き込みし、YES を返します。

**サンプルコード**
```objectivec
@implementation MPaaSInterface (Portal)
- (BOOL)enablePrivacyAuth
{
return YES;
}
@end
```2. 権限ポップアップウィンドウを実装します。
フレームワークによって提供される - (DTFrameworkCallbackResult)application:(UIApplication *)application privacyAuthDidFinishLaunchingWithOptions:(NSDictionary *)launchOptions completionHandler:(**void** (^)(**void**))completionHandler; メソッドを再書き込みします。

サンプルコード
```objectivec
- (DTFrameworkCallbackResult)application:(UIApplication *)application privacyAuthDidFinishLaunchingWithOptions:(NSDictionary *)launchOptions completionHandler:(void (^)(void))completionHandler
{
UIWindow *authWindow = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
authWindow.backgroundColor = [UIColor redColor];
authWindow.windowLevel = UIWindowLevelStatusBar+5;
AuthViewController *vc = [[AuthViewController alloc] init];
vc.completionHandler = completionHandler;
vc.window = authWindow;
authWindow.rootViewController = vc;
[authWindow makeKeyAndVisible];
return DTFrameworkCallbackResultContinue;
}
```3. mPaaS フレームワークを起動します。
ユーザーが承認のために 同意するcompletionHandler をクリックした後、 をコールバックして、mPaaS フレームワークの起動を続行します。サンプルコードは次のとおりです。
#import <UIKit/UIKit.h>
NS_ASSUME_NONNULL_BEGIN
@interface AuthViewController : UIViewController
@property (nonatomic, copy) void (^completionHandler)(void);
@property (nonatomic, strong) UIWindow *window;
@end
NS_ASSUME_NONNULL_END#import "AuthViewController.h"
@interface AuthViewController ()<UIAlertViewDelegate>
@end
@implementation AuthViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
[self showAlertWithTitle:@"Privacy permissions"];
}
- (void)showAlertWithTitle:(NSString *)title
{
if ([title length] > 0) {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:title
message:nil
delegate:self
cancelButtonTitle:@"Cancel"
otherButtonTitles:@"OK", nil];
[self.window makeKeyWindow];
[alert show];
}
}
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
if (buttonIndex == 1) {
if (self.completionHandler) {
self.completionHandler();
self.window.rootViewController = nil;
self.window = nil;
}
}else {
exit(0);
}
}
@end4. コンテナーコンテキストを手動で初期化します。
HTML5 コンテナー、オフラインパッケージ、ミニプログラムコンポーネントを統合している場合は、- (void)application:(UIApplication *)application afterDidFinishLaunchingWithOptions:(NSDictionary *)launchOptions メソッドでコンテナー Context を手動で初期化する必要があります。コードサンプルは次のとおりです。
- (void)application:(UIApplication *)application afterDidFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
...
// コンテナーコンテキストを初期化します。
[MPNebulaAdapterInterface setNBContextWhenEnablePrivacyAuth];
...
}フレームワーク以外によるアプリのライフサイクルのホスト
1. プライバシーポップアップウィンドウをサポートします。
MPaaSInterface カテゴリ で、enableUserOverWriteAuthAlert API メソッドを再書き込みし、対応するプライバシー権限ステータスを返します。

サンプルコード
@implementation MPaaSInterface (mPaaSdemo)
- (BOOL)enableUserOverWriteAuthAlert {
// ユーザーがプライバシー条項に [同意する] をクリックした場合、「NO」が返されます。これは、mPaaS コンポーネントが関連 API を正常に呼び出すことができることを示します。
// それ以外の場合、「Yes」が返されます。これは、mPaaS コンポーネントが関連 API の呼び出しを保留することを示します。
return ![[NSUserDefaults standardUserDefaults] boolForKey:@"xx_pr"];
}
@end2. ログ追跡の早期報告を防止します。
追跡関連コンポーネントにアクセスした場合、起動プロセスで MPAnalysisHelper holdUploadLogUntilAgreed メソッドを呼び出して、ログ追跡の早期報告を防止する必要があります。
APRemoteLogging.framework が存在するかどうかを確認することで、追跡関連コンポーネントにアクセスしたかどうかを判断できます。
サンプルコード (できるだけ早く呼び出すことをお勧めします)

3. コンテナーコンテキストを手動で初期化します。
HTML5 コンテナー、オフラインパッケージ、ミニプログラムコンポーネントを統合している場合は、- (void)application:(UIApplication *)application afterDidFinishLaunchingWithOptions:(NSDictionary *)launchOptions メソッドでコンテナー Context を手動で初期化する必要があります。コードサンプルは次のとおりです。
- (void)application:(UIApplication *)application afterDidFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
...
// コンテナーコンテキストを初期化します。
[MPNebulaAdapterInterface setNBContextWhenEnablePrivacyAuth];
...
}