21

iOS はユーザーにフォト ライブラリのアクセス許可を求めなくなりました。デバイスからアプリを削除しても。これはシミュレーターでも発生します。

switch ([ALAssetsLibrary authorizationStatus])
{
    case ALAuthorizationStatusAuthorized:
        RPMLog(@"authorized");
        break;
    case ALAuthorizationStatusDenied:
        RPMLog(@"denied");
        break;
    case ALAuthorizationStatusNotDetermined:
        RPMLog(@"not determined");
        break;
    case ALAuthorizationStatusRestricted:
        RPMLog(@"restricted");
        break;
}

初めてアプリをインストールした時点で、すでに認証されています。これ以前は、ユーザー プロンプトをトリガーする写真を要求するイベントや画面は他にありません。

次に、SavedPhotos の numberOfAssets を要求し、アクセス プロンプトなしで取得します。

ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
[library enumerateGroupsWithTypes:ALAssetsGroupSavedPhotos usingBlock:^(ALAssetsGroup *group, BOOL *stop) {

    if (!group) return;

    UIActionSheet *actionSheet = nil;
    if (([group numberOfAssets] > 0))
    {
        actionSheet = [[UIActionSheet alloc] initWithTitle:nil delegate:self cancelButtonTitle:NSLocalizedString(@"Cancel", nil) destructiveButtonTitle:nil otherButtonTitles:NSLocalizedString(@"Take new photo", nil), NSLocalizedString(@"Use last photo taken", nil), NSLocalizedString(@"Choose existing", nil), nil];
    }
    else
    {
        actionSheet = [[UIActionSheet alloc] initWithTitle:nil delegate:self cancelButtonTitle:NSLocalizedString(@"Cancel", nil) destructiveButtonTitle:nil otherButtonTitles:NSLocalizedString(@"Take new photo", nil), NSLocalizedString(@"Choose existing", nil), nil];
    }

    actionSheet.actionSheetStyle = UIActionSheetStyleBlackTranslucent;
    [actionSheet showFromTabBar:self.tabBar];
    [TestFlight passCheckpoint:@"New Look: Tab Bar"];

} failureBlock:^(NSError *error) {

    NSAssert(!error, [error description]);
}];
4

6 に答える 6

26

何が起こっているのかというと、iOS はバンドル ID にマップされたアプリに付与された許可を保存しています。アプリが削除された場合、このデータは 24 時間保持されます。これにより、ユーザーがアプリを再インストールした場合 (おそらく誤ってアプリを削除した後) に再度プロンプトが表示されるのを回避できます。 .

これは、プッシュ通知プロンプトでも発生します。

回避策として、プッシュ通知に関する Apple の引用を引用します。

iOS でのプッシュ通知のアクセス許可アラートのリセット

プッシュ対応アプリがプッシュ通知に初めて登録するとき、iOS はユーザーにそのアプリの通知を受け取るかどうかを尋ねます。ユーザーがこのアラートに応答すると、デバイスが復元されるか、アプリが少なくとも 1 日アンインストールされない限り、再度表示されることはありません。

アプリの初回実行をシミュレートする場合は、アプリを 1 日アンインストールしたままにしておくことができます。システム クロックを 1 日以上前に設定し、デバイスの電源を完全にオフにしてから、デバイスの電源を再びオンにすることで、実際に 1 日待たずに後者を実現できます

出典: Apple テクニカル ノート TN2265

于 2013-03-15T01:36:09.020 に答える
1

設定アプリによる休憩は自動化が難しい。simctlシミュレーターのコンテンツと設定を自動化された方法でリセットして、権限ダイアログをリセットするために使用します。これには、シミュレーターにアプリを再インストールする必要がありますが、これsimctlも実現できます。

于 2015-09-01T15:49:34.190 に答える
0

iOS シミュレーターを使用している場合は、シミュレーター/コンテンツと設定のリセット...を使用してリセットすると、この設定がリセットされるようです。もちろん、アプリを再インストールする必要があります。

于 2016-07-05T02:11:21.480 に答える
-3

アプリを再インストールまたは削除する必要はありません。

  • バックグラウンドからアプリを削除
  • 「設定」→「一般」→「リセット」→ 「位置情報とプライバシーをリセット」をクリック

助けていただければ幸いです。

于 2014-07-03T06:03:56.957 に答える