Ứng dụng của tôi vừa bị từ chối do sử dụng Khung hỗ trợ quảng cáo. Thư viện nào chịu trách nhiệm?


81

Đây chỉ đơn giản là một bản cập nhật không thay đổi bất cứ điều gì liên quan đến lý do từ chối. Đây là phản hồi từ trung tâm giải quyết:

Lý do Thỏa thuận cấp phép chương trình PLA 3.3.12

Chúng tôi nhận thấy ứng dụng của bạn sử dụng Mã nhận dạng quảng cáo iOS nhưng không bao gồm chức năng quảng cáo. Điều này không tuân thủ các điều khoản của Thỏa thuận cấp phép chương trình nhà phát triển iOS, theo yêu cầu của Nguyên tắc đánh giá trên App Store.

Cụ thể, mục 3.3.12 của Thỏa thuận cấp phép chương trình nhà phát triển iOS nêu rõ:

"Bạn và Ứng dụng của bạn (và bất kỳ bên thứ ba nào mà bạn đã ký hợp đồng để phân phát quảng cáo) có thể sử dụng Mã nhận dạng quảng cáo và bất kỳ thông tin nào thu được thông qua việc sử dụng Mã nhận dạng quảng cáo, chỉ cho mục đích phục vụ quảng cáo. Nếu người dùng đặt lại Mã nhận dạng quảng cáo, sau đó Bạn đồng ý không kết hợp, tương quan, liên kết hoặc liên kết, trực tiếp hoặc gián tiếp, Mã nhận dạng quảng cáo trước đó và bất kỳ thông tin bắt nguồn nào với Mã nhận dạng quảng cáo đã đặt lại. "

Vui lòng kiểm tra mã của bạn - bao gồm mọi thư viện của bên thứ ba - để xóa bất kỳ trường hợp nào của:

class: ASIdentifierManager
selector: AdvertisingIdentifier
framework: AdSupport.framework

Nếu bạn dự định kết hợp quảng cáo trong một phiên bản trong tương lai, vui lòng xóa Mã nhận dạng quảng cáo khỏi ứng dụng của bạn cho đến khi bạn bao gồm chức năng quảng cáo.

Để giúp xác định Mã nhận dạng quảng cáo, hãy sử dụng công cụ “nm”. Để biết thông tin về công cụ “nm”, hãy mở cửa sổ đầu cuối và nhập “man nm”.

Nếu bạn không có quyền truy cập vào nguồn thư viện, bạn có thể tìm kiếm tệp nhị phân đã biên dịch bằng công cụ dòng lệnh "string" hoặc "otool". Công cụ "string" liệt kê các phương thức mà thư viện gọi, và "otool -ov" sẽ liệt kê các cấu trúc lớp Objective-C và các phương thức được xác định của chúng. Các kỹ thuật này có thể giúp bạn thu hẹp vị trí của mã có vấn đề.

Thư viện của bên thứ ba mà tôi đang sử dụng là phiên bản mới nhất của parse.com sdk, latest version of flurry analytics, and version 2.2 of test flight. Có ai biết thư viện nào là vấn đề không? Cảm ơn


IMO họ đã cung cấp rất nhiều gợi ý để bạn thực hiện việc tìm kiếm đó một mình ... bạn đã thử và bạn không tìm thấy nó?
Adriano Repetti

10
Tôi đã thấy mọi người gặp sự cố này với google analytics
jcesarmobile

1
Tuy nhiên, lý do lớn nhất khiến bạn bị gắn cờ là TestFlight, vì ID này rất cần thiết: testflightapp.com/sdk/ios/doc/2.0.0 - "AdSupport.framework là bắt buộc đối với iOS 6.0+ để nhận dạng duy nhất người dùng để chúng tôi có thể ước tính số lượng người dùng mà ứng dụng của bạn có (sử dụng ASIdentifierManager). Bạn có thể liên kết yếu với khung trong ứng dụng của mình. Nếu ứng dụng của bạn không liên kết với AdSupport.framework, TestFlight SDK sẽ tự động tải nó cho các ứng dụng chạy trên iOS 6.0+. "
Louis St-Amour

5
Hóa ra Testflight v2.2.0 là xung đột. Họ đã từ cố định nó theo công changelog của họ: Củng cố cả hai phiên bản SDK vào một trong đó loại bỏ tất cả các truy cập vào ASIdentifierManager
user2844801

5
Nếu AdSupport.framework được liên kết dưới dạng tùy chọn, liệu điều đó có giải quyết được vấn đề với App Store không?
Legoless

Câu trả lời:


113

Trong nhà ga:

  1. Chuyển đến thư mục gốc của dự án của bạn
  2. Nhập: grep -r advertisingIdentifier . (dấu chấm ở cuối là quan trọng)

Thao tác này sẽ kiểm tra đệ quy mọi tệp và cung cấp cho bạn tên của thư viện vi phạm.

(trong trường hợp của tôi, đó là Flurry)


1
Tôi cũng bị điều tương tự. libFlurry_4.3.1.a và libGoogleAnalyticsServices.a đều có adsIdentifier. Không biết khi nào những điều này sẽ được cập nhật hoặc nếu có bất kỳ công việc nào xung quanh.
Vidal Graupera

2
chúng ta đang làm gì để làm điều này? chúng tôi không thể xóa hoàn toàn các phân tích của mình ...
Nir Golan

@RedYeti - cảm ơn vì đã sửa lỗi chính tả của tôi! Xin lỗi về điều đó - lỗi sao chép / dán :(.
Adam

1
@LouWeed - khi điều này xảy ra, bạn phải xóa Flurry khỏi ứng dụng của mình và giả sử rằng Flurry đang hoảng loạn và sẽ cung cấp bản cập nhật mới RẤT sớm. Nhược điểm của việc sử dụng phân tích bên thứ 3 miễn phí là đôi khi chúng làm hỏng việc như thế này. Trước đây tôi cũng đã từng làm tương tự với Flurry, TestFlight, Facebook, Parse và một số ứng dụng khác. Nó xảy ra. Nhưng nếu bạn không trả tiền cho dịch vụ, bạn không thể phàn nàn nhiều :)
Adam

2
Có thể xác nhận rằng Flurry 4.3.2 không khớp với adsIdentifier khi sử dụng lệnh trên.
crafterm

17

Cập nhật

Google đã phát hành Dịch vụ Google Analytics cho iOS SDK v3.03c, loại bỏ sự phụ thuộc AdSupport.framework theo mặc định.

Mục thay đổi đầy đủ cho Phiên bản phát hành 3.03c (ngày 19 tháng 2 năm 2014): https://developers.google.com/analytics/devguides/collection/ios/changelog

Old Awnser

Vấn đề của tôi là với Google Analytics và TestFlight.

Đối với TestFlight, tôi chỉ cần cập nhật thư viện lên phiên bản 2.2.1 ( https://www.testflightapp.com/sdk/ios/release_notes/2.2.1/ ).

Nhưng để cập nhật Google Analytics, tôi đã phải xóa cờ -ObjC. Nhưng khi tôi sử dụng Cocoapods để quản lý một số thư viện thứ ba, tôi không thể xóa nó. Vì vậy, tôi đã làm như sau:

1 - bắt đầu cập nhật libGoogleAnalytics.a lên Phiên bản 3.03a (ngày 5 tháng 2 năm 2014)

2 - sau đó cũng xóa AdSupport.framework

3 - đã thêm "-force_load \" $ {PROJECT_DIR} /Source/Library/GoogleAnalyticsServicesiOS_3.03a "" trong "Target -> Build Settings -> Other Linker Flags" (Lưu ý rằng trong dự án của tôi, GoogleAnalytics nằm bên trong / Nguồn / Thư viện / thư mục và bạn phải định cấu hình của riêng mình)

Nhưng khi tôi không xóa cờ -ObjC, tôi đã tìm kiếm cách sử dụng cờ -force_load với Cocoapods, sau đó tôi tìm thấy hai liên kết hữu ích:

1 - https://github.com/CocoaPods/CocoaPods/issues/712

2 - http://www.deanmao.com/2012/12/31/linker-error-using-cocoapods/

Để tóm tắt, tôi đã thay đổi cờ -ObjC cho "-force_load $ (TARGET_BUILD_DIR) /libPods.a" cũng trong "Mục tiêu -> Cài đặt bản dựng -> Cờ trình liên kết khác"

Nhưng một lần nữa, khi tôi cố gắng xuất bản ứng dụng của mình, tôi đã gặp lỗi thông báo rằng trình biên dịch không tìm thấy libPods.a, vì vậy tôi đã đi tới "Mục tiêu -> Cài đặt bản dựng -> Cờ trình liên kết khác -> Phát hành" và thay đổi chuỗi $ (TARGET_BUILD_DIR) này thành $ {BUILT_PRODUCTS_DIR}.

Vì vậy, Cờ liên kết khác của tôi đã trở thành như hình dưới đây. Cờ liên kết khác

Hy vọng sẽ giúp được ai đó.

Xin lỗi vì tiếng Anh của tôi. =]


Tôi vẫn không thể tạo ứng dụng của mình mà không có khung AdSupport. Tôi nhận được biểu tượng không xác định ASIIdentifierManager
andygeers

Bạn có đang sử dụng Trình quản lý thẻ của Google không? Bởi vì nếu bạn là bạn thì giải pháp này sẽ không hoạt động.
Glauco Neves

Không mà tôi biết (những gì không quản lý thẻ thậm chí làm gì?) Đó là kết hợp GA / quản lý thẻ thư viện tập tin mặc dù
andygeers

Bạn cũng có thể chỉnh sửa OTHER_LDFLAGStrực tiếp các Pods / Pods.xcconfig theo cách thủ công .
Rivera

Google đã phát hành Dịch vụ Google Analytics iOS SDK v3.03c hôm nay. Tôi đã cập nhật câu trả lời của mình. =]
Glauco Neves

13

Đối với tôi, Flurry Analytics và TestFlight đều là vấn đề.

Đối với TestFlight, việc cập nhật nó cũng dễ dàng như vậy. Phiên bản 2.2.1 sẽ không gây ra bất kỳ sự cố nào (tôi đã kiểm tra bằng cách sử dụng chuỗi, như Apple đề xuất)

Đối với Flurry, hiện không có cách khắc phục nào ngoài việc xóa Flurry và trái với đề xuất của Lou Weed, ngay cả khi AdSupport.framework không được liên kết, ứng dụng của bạn sẽ bị từ chối.

Đây là câu trả lời hỗ trợ của Flurry:

"Cảm ơn bạn đã liên hệ với Flurry. Gần đây, chúng tôi được biết rằng Apple đã từ chối một số ứng dụng mà hãng tin rằng đang sử dụng Mã định danh cho quảng cáo (IDFA) mà không bao gồm chức năng quảng cáo. Xin lưu ý rằng Flurry không thu thập IDFA trừ khi một ứng dụng bao gồm AdSupport .framework cho chức năng quảng cáo. Chúng tôi đang tìm cách làm rõ với Apple và chúng tôi sẽ cập nhật cho những khách hàng bị ảnh hưởng khi chúng tôi tìm hiểu thêm trong vài ngày tới. "

Flurry vừa phát hành phiên bản 4.3.2 của SDK của họ, giải quyết cụ thể vấn đề đó.


4

Hóa ra Testflight v2.2.0 là xung đột. Kể từ đó, họ đã sửa nó theo thay đổi của họ:Consolidate both SDK versions into one which removes all access to ASIdentifierManager


4

Crashlytics là vấn đề. Chúng tôi đã có một vài ứng dụng bị từ chối vì nó. Nhưng tôi đã nói chuyện với Crashlytics và họ đã phát hành bản cập nhật mới hôm nay (phiên bản 2.1.6) để khắc phục sự cố này.

Một số thư viện có AdSupport.framework nhưng họ không sử dụng nó trừ khi được gọi cụ thể. Crashlytics gọi khuôn khổ vì nó phải kiểm tra xem ứng dụng có hỗ trợ quảng cáo hay không. Và thay đổi đó đã được thực hiện trên phiên bản 2.1.5

Vì vậy, nếu bạn đang sử dụng crashlytics, đó là lý do có thể xảy ra nhất. Để khắc phục điều đó, chỉ cần lưu trữ lại ứng dụng của bạn để crashlytics có thể sử dụng phiên bản mới với bản sửa lỗi này.

Phản hồi từ Nhóm Crashlytics: "Chúng tôi vừa đưa ra bản cập nhật cho việc này- bạn có thể tạo và chạy lại ứng dụng của mình khi mở ứng dụng Mac để ứng dụng này có thể cập nhật SDK của bạn không? Sau đó, bạn sẽ ổn thôi! Hãy tiếp tục đăng bài cho tôi sau bạn gửi lại :) "

Tái bút: Điều này đang bắt đầu xảy ra vì Apple dường như đã thay đổi chính sách của họ đối với việc sử dụng ADSupport.


3

Trước đây tôi đã viết những điều sau đây trong nhận xét, hướng mọi người đến các lệnh đầu cuối "string" hoặc "otool". Tuy nhiên, tôi thực sự thích câu trả lời đề xuất của việc sử dụng grep. Vì vậy, bạn có thể thử nó trước. Đề xuất của tôi là thêm "git" vào lệnh đó, vì nó nhanh hơn rất nhiều:

git grep advertisingIdentifier

Nếu điều đó không hiệu quả, hãy thử (như đã đăng trước đó):

grep -r advertisingIdentifier . 

Những gì sau đây là những gì tôi đã viết trước đây trong một nhận xét ở trên, như một cách thực hiện cho các lệnh đầu cuối:

Bạn có thể tìm kiếm các tệp của dự án của mình trong Xcode hoặc bạn có thể thử xóa khung AdSupport để xem những gì không thành công trong thời gian xây dựng / chạy.

Để sử dụng terminal, hãy nhấp vào Spotlight (tìm kiếm) và nhập Terminal. Chờ nó xuất hiện dưới dạng Ứng dụng trong kết quả tìm kiếm.

Khi ở trong Terminal, hãy nhập "cd" theo sau bởi một khoảng trắng, sau đó kéo và thả thư mục xây dựng Xcode của bạn từ Finder vào Terminal. Thao tác này sẽ tự động nhập tên thư mục đó vào. Nhấn Enter, và nó sẽ thay đổi các thư mục (cd) của bạn thành thư mục đó.

Từ đó, hãy nhập stringsdấu cách, sau đó nhập tên tệp cho thư viện của bạn hoặc otool, một dấu cách và tên tệp cho thư viện. Bạn sẽ có thể nhấn TAB để tự động điền tên tệp.


1

Ứng dụng của tôi cũng bị từ chối với cùng một lỗi! Tôi đã tìm thấy sự xuất hiện của AdvertisingIdentifier trong SDK Facebook mới nhất (3.12). Có thể bạn có thể kiểm tra xem thư viện của mình có xuất hiện hay không bằng phương pháp bên dưới:

Tôi đã mở FacebookSDK.framework dưới dạng thư viện trong thiết bị đầu cuối và nhập lệnh sau

otool -v -s __TEXT __objc_methname FacebookSDK | grep AdvertisingIdentifier

Nhưng tôi không biết phải làm thế nào. Ứng dụng của tôi có bị từ chối vì tham chiếu này không? Nếu có, tôi phải làm gì nếu muốn sử dụng các chức năng của facebook trong ứng dụng của mình?


1
Đây, điều này sẽ hữu ích - stackoverflow.com/questions/21574680/…
Andrew

Cảm ơn bạn đã trả lời! Tôi đã thực hiện những thay đổi và tái đệ trình ứng dụng của tôi, hy vọng nó sẽ không bị từ chối một lần nữa :)
bolonn

@bolonn - ứng dụng của bạn đã được Apple chấp thuận sau khi thực hiện các thay đổi trên chưa?
RoHaN

Có, nó đã được chấp thuận!
bolonn

1

Điều này phức tạp hơn một chút so với bề ngoài. Sau một số thử nghiệm, tôi nhận thấy rằng Khung hỗ trợ quảng cáo được liên kết ngay cả khi chỉ truy cập trực tiếp vào các lớp được tham chiếu trong Khung hỗ trợ quảng cáo. Trớ trêu thay, [AsIdentifierManager class]được sử dụng trong rất nhiều thư viện của bên thứ ba để kiểm tra xem Khung hỗ trợ quảng cáo đã được liên kết hay chưa, sẽ thực sự khiến Khung hỗ trợ quảng cáo được liên kết. Làm xáo trộn lớp bằng cách sử dụng NSClassFromString(@"AsIdentfierManager")sẽ không làm cho khung AdSupport được liên kết tự động. Tất nhiên, phần lớn thời gian mã này sẽ nằm trong thư viện của bên thứ ba nên bạn sẽ không có nhiều quyền kiểm soát nó, tuy nhiên, đây là những gì đang diễn ra.

Tôi đã xây dựng một dự án ví dụ trên GitHub minh họa hành vi này bằng cách sử dụng khung của Segment.io. https://github.com/distefam/AdSupportDemo


Cảm ơn vì bài viết hữu ích. Vì vậy, khi chúng tôi liên kết yếu (tùy chọn) khung với dự án (trong trường hợp của tôi, đó là khung quảng cáo của Google có tên "GoogleInteractiveMediaAds") có AdSupport.framework bên trong, khi tôi gửi ứng dụng của mình, mặc dù ứng dụng của tôi không hiển thị bất kỳ quảng cáo (có phiên bản trả phí không hiển thị bất kỳ quảng cáo nào), liệu nó có bị Apple từ chối ??
C0D3

0

Flurry Analytics cũng sử dụng API này.
Đầu ra đầu cuối:

Binary file ./Lib/Flurry/libFlurry_4.3.0.a matches

Flurry nói rằng bộ chọn không được gọi nếu khung AdSupport không được liên kết.
Vì vậy, tôi đã gỡ bỏ khuôn khổ và thử gửi lại.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.