iOS-App-Zugriff. Anmelden mit Apple

iOS-Anwendungszugriff. Anmelden mit Apple-Prozess

Vorwort

Anforderungen für die Überprüfung im App Store:

Neue Richtlinien für „Mit Apple anmelden“
Wir haben die Überprüfungsrichtlinien für den App Store aktualisiert, um Kriterien dafür bereitzustellen, wann Apps für die Verwendung von „Mit Apple anmelden“ erforderlich sind. Ab heute müssen neue Apps, die im App Store eingereicht werden, diesen Richtlinien folgen. Bestehende Apps und App-Updates müssen ihnen bis April 2020 folgen. Wir haben außerdem neue Richtlinien für die Verwendung von „Mit Apple anmelden“ im Web und auf anderen Plattformen bereitgestellt.
12. September 2019

Daher müssen Apps, die Zugriff auf andere Anmeldungen von Drittanbietern haben, „Mit Apple anmelden“ als Anmeldeoption bereitstellen, andernfalls wird die Prüfung nicht bestanden. Neue Anwendungen, die ab dem 12.09.2019 im App Store eingereicht werden, müssen diesen Richtlinien folgen. Vorhandene App Aktualisierungen müssen bis April 2020 vorgenommen werden, unter Bezugnahme auf die App Store Review Guidelines .

Deshalb wurde ich abgelehnt, als ich die App zurückstellte, weil die App WeChat zum Anmelden verwendet, aber die Anmeldung mit Apple nicht ermöglicht. Hier ist eine Aufzeichnung des korrekten Vorgangs.

Vorbereitung

1. Melden Sie sich bei Apple Developer an und aktivieren Sie den Schalter „Mit Apple anmelden“ in der App-ID-Konfiguration der App.

2. Kehren Sie zum Hauptbildschirm „Zertifikate, Identifikatoren und Profile“ zurück, wählen Sie in der seitlichen Navigation „Schlüssel“ und dann „Neuen Schlüssel registrieren“ aus.

3. Aktivieren Sie „Mit Apple anmelden“ und klicken Sie auf die Schaltfläche „Konfigurieren“, wählen Sie die erforderliche primäre App-ID aus, speichern Sie sie.Apple generiert einen neuen privaten Schlüssel und stellt ihn nur einmal zum Download zur Verfügung. Speichern Sie diese Datei unbedingt, da Sie sie später nicht mehr zurückerhalten können!(Diese Datei muss dem Hintergrund des Unternehmens zur Verfügung gestellt werden.)

4. Gehen Sie in Xcode zu Signing&Capabilities des Projekts, klicken Sie auf +Capability, um die Option „Sign In With Apple“ zu erstellen, und fügen Sie AuthenticationServices.framework hinzu

fang an zu schreiben

1. System-Header-Dateien importieren

#import <AuthenticationServices/AuthenticationServices.h>

2. Fügen Sie die Schaltfläche „Mit Apple anmelden“ hinzu. Das System stellt die ASAuthorizationAppleIDButton bereit. Sie können diese Schaltfläche direkt verwenden, beachten Sie jedoch, dass die Systemversionsunterstützung iOS 13 und höher sein muss.

if (@available(iOS 13.0, *)) {
    
    
	ASAuthorizationAppleIDButton *appleIDBtn = [ASAuthorizationAppleIDButton buttonWithType:ASAuthorizationAppleIDButtonTypeDefault style:ASAuthorizationAppleIDButtonStyleWhite];
	appleIDBtn.frame = CGRectMake(30, 100, 200, 50);
	[appleIDBtn addTarget:self action:@selector(appleIDBtnClicked) forControlEvents:UIControlEventTouchUpInside];
	[self.view addSubview:appleIDBtn];
}

Natürlich können Sie dazu auch eine benutzerdefinierte Schaltfläche verwenden, aber die benutzerdefinierte Apple-Anmeldeschaltfläche muss die Anforderungen erfüllen.Es wird dringend empfohlen, den Firmenentwurf im Detail zu lesenDie „Human-Computer Interaction Guidelines“ von Apple geben das Design der Schnittstelle vor. Ich wurde noch zweimal abgelehnt, nur weil die benutzerdefinierte Schaltfläche diese Richtlinie nicht erfüllte.

3. Behandeln Sie das Schaltflächenklickereignis und starten Sie den Anforderungsprozess. Es wird empfohlen, das Anmeldeereignis zu kapseln und als Singleton oder globale Variable zu schreiben, um seinen Lebenszyklus sicherzustellen. Im alten Code des Projekts sind alle Anmeldungen in einem gekoppelt Die von Xib erstellte Ansicht hat mehr als 600 Zeilen geschrieben, eine solche Verarbeitung ist äußerst widerlich.

// 授权处理
if (@available(iOS 13.0, *)) {
    
    
        ASAuthorizationAppleIDProvider *appleIDProvider = [[ASAuthorizationAppleIDProvider alloc] init];
        ASAuthorizationAppleIDRequest *appleIDRequest = [appleIDProvider createRequest];
        appleIDRequest.requestedScopes = @[ASAuthorizationScopeFullName, ASAuthorizationScopeEmail];
        ASAuthorizationController *authorizationController = [[ASAuthorizationController alloc] initWithAuthorizationRequests:@[appleIDRequest]];
        authorizationController.delegate = self;
        authorizationController.presentationContextProvider = self;
        [authorizationController performRequests];
}else{
    
    
	NSLog(@"该系统版本不可用Apple登录");
}

Wenn Sie das Postfach des Benutzers nicht in requestScopes benötigen, müssen Sie ASAuthorizationScopeEmail nicht schreiben

appleIDRequest.requestedScopes = @[ASAuthorizationScopeFullName];

4. Behandeln Sie das Autorisierungsergebnis in der Proxy-Methode

#pragma mark - delegate
/// 授权成功回调
- (void)authorizationController:(ASAuthorizationController *)controller didCompleteWithAuthorization:(ASAuthorization *)authorization API_AVAILABLE(ios(13.0)){
    
    
    if ([authorization.credential isKindOfClass:[ASAuthorizationAppleIDCredential class]]) {
    
    
        ASAuthorizationAppleIDCredential *appleIDCredential = authorization.credential;
        NSString *user = appleIDCredential.user;
        // 注意:使用过授权的,可能获取不到以下三个参数,要做判空处理
        NSString *familyName = appleIDCredential.fullName.familyName;
        NSString *givenName = appleIDCredential.fullName.givenName;
        NSString *email = appleIDCredential.email;
        // token
        NSData *identityToken = appleIDCredential.identityToken;
        // 用户唯一标识
        NSData *authorizationCode = appleIDCredential.authorizationCode;
        // 服务器验证需要使用的参数
        NSString *identityTokenStr = [[NSString alloc] initWithData:identityToken encoding:NSUTF8StringEncoding];
        NSString *authorizationCodeStr = [[NSString alloc] initWithData:authorizationCode encoding:NSUTF8StringEncoding];
        // 在这里处理向后台注册或登录事件,具体看项目后台的支持

    }else if ([authorization.credential isKindOfClass:[ASPasswordCredential class]]){
    
    
        // 这个获取的是iCloud记录的账号密码,需要输入框支持iOS 12 记录账号密码的新特性,如果不支持,可以忽略
        ASPasswordCredential *passwordCredential = authorization.credential;
        NSString *user = passwordCredential.user;
        NSString *password = passwordCredential.password;
        
    }else{
    
    
        NSLog(@"授权信息不符");
    }
}

/// 授权失败回调
- (void)authorizationController:(ASAuthorizationController *)controller didCompleteWithError:(NSError *)error API_AVAILABLE(ios(13.0)){
    
    
    NSLog(@"Handle error:%@", error);
    NSString *errorMsg = nil;
    switch (error.code) {
    
    
        case ASAuthorizationErrorCanceled:
            errorMsg = @"用户取消了授权请求";
            break;
        case ASAuthorizationErrorFailed:
            errorMsg = @"授权请求失败";
            break;
        case ASAuthorizationErrorInvalidResponse:
            errorMsg = @"授权请求响应无效";
            break;
        case ASAuthorizationErrorNotHandled:
            errorMsg = @"未能处理授权请求";
            break;
        case ASAuthorizationErrorUnknown:
            errorMsg = @"授权请求失败未知原因";
            break;
        default:
            break;
    }
    NSLog(@"errorMsg = %@", errorMsg);
}

/// 设置展示内容给用户的Window
- (ASPresentationAnchor)presentationAnchorForAuthorizationController:(ASAuthorizationController *)controller API_AVAILABLE(ios(13.0)){
    
    
    return [UIApplication sharedApplication].windows.lastObject;
}

5. Überprüfen Sie die Anmeldung beim Projekthintergrundserver, akzeptieren Sie die Rückkehr des Servers und verarbeiten Sie dann das entsprechende Ereignis.

Zusammenfassen

Im Allgemeinen ist „Sign In With Apple“ nicht schwer zu implementieren und sogar einfacher zu implementieren als Anmeldungen von Drittanbietern wie WeChat und QQ.
Die aufgetretenen Probleme konzentrieren sich hauptsächlich auf:„Unregelmäßige Gestaltung des Login-Buttons“Und„Verschiedene Fehler und Probleme bei der Interaktion mit dem Backend des Projekts“. Daher ist es notwendig, dass der Designer die Spezifikation der Mensch-Computer-Interaktion im Detail liest, die Proxy-Schaltfläche entwirft, die den Überprüfungsanforderungen des App Store entspricht, und auf andere gestartete Apps verweist. Außerdem ist eine sorgfältige Kommunikation mit der für den Projekthintergrund verantwortlichen Person erforderlich, um die Datenschnittstelle zu überprüfen, gemeinsam Probleme zu debuggen und zu lösen und die erforderlichen Dokumente bereitzustellen. Ich bin ein Neuling, bitte korrigieren Sie mich, wenn ich Fehler mache, und freue mich darauf, mit allen zu kommunizieren und mich weiterzuentwickeln.

Verweise

„Was zum Teufel ist Anmelden mit Apple“
„iOS 13 – Anmelden mit Apple“
„Richtlinien für die Benutzeroberfläche“
„Richtlinien für App Store-Überprüfungen“
„Anmelden mit Apple von der Anmeldung bis zur Serverüberprüfung“
„Anmelden mit Apple (object-c ) Vom Entwicklerhintergrund bis zur Serververifizierung“

おすすめ

転載: blog.csdn.net/qq_38718912/article/details/108116995