發表文章

admob policy violation: 廣告政策違規處理方法

圖片
  AdMob violation: "Site Behavior: Navigation" Policy Violation 最近app又遇到了政策違規, 因為google app store有上百萬個app,所以他們現在可能用機器學習方式去偵測錯誤或違規.所以近期開發者收到的違規數量大增. "但有時admob會誤判!!!" 首先你要先研讀完政策說明 .確定自己沒有明顯違規後, 在實在不知道哪裡有問題的狀況下, 再透過此申訴方法: Step 1.透過admob support請求真人協助. 請按照你能溝通的語言,英語系選擇英文,中文選擇中文, admob會分派各語言的審核人員來處理. 在這步驟選擇你覺得你app沒有問題的截圖. 或是寫個文件說明檔doc附上,理面要寫能說服對方的充分理由. 你知道admob每天要處理很多案件(有很多人會騙人). 他們審核人員很聰明的,會查明真相.所以要謹慎寫,不可說謊. 當你發現你自己理虧,內容或app是拿別人的內容.沒有原創性. 或是真的就是騙點擊,或是不同機器會有不同結果(例如a機器可跑,但b機器卻是白畫面),或是廣告與內容重疊,或是突然跳出全螢幕廣告,或是一整個頁面都是廣告或是超過1個數量,或是廣告太頻繁騷擾使用者,....這些很明顯的違規. 當然就不能透過admob的營利.這是規則上有寫的. 若你自己理虧,申訴是沒有用的.這一切要自己先作判斷喔. 當你按下傳送後,沒多久google admob會寄一封支援服務受理證明給你. 會有案號.接下來就是真人審核了. 如果你的理由充分,可以說服admob審核人員. 就可以按照他們的指示送出review. 幾天後,他們的回復如下:  他們還會明確告訴你,app那裡違規.若是誤判也會誠實告訴你. 還會附上詳細截圖給你. 這樣做法可是非常花費人力物力的. 所以google admob當然不會每個違規都這樣處理. 大部分違規都是政策說明上有寫的明顯違規.不需要真人一個個回覆. 如果一萬個違規,每個都要人工回覆,即便只有1%的人工回覆~100個違規都是龐大人力負擔. 所以呼籲大家只有在自己真的不確定那裡違規之下,才做這人工支援服務. 在人工的真人回覆後,我終於知道app哪裡有錯後,馬上就修正app. 之後審核真的一切都變超快速.(像我這次是誤判.) 如果不

Android error: Unsupported class file major version 60/61

圖片
最近如果大家有build android app,常會遇到此問題: android studio / app build issue: 所有舊專案都很會出現這問題,我也是一直遇到.大家可能會被這氣瘋了吧. Apk 無法產生出來.還不知道原因在那??? Caused by: org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed: General error during semantic analysis: Unsupported class file major version 60 java.lang.IllegalArgumentException: Unsupported class file major version 60 at groovyjarjarasm.asm.ClassReader.<init>(ClassReader.java:196) at groovyjarjarasm.asm.ClassReader.<init>(ClassReader.java:177) at groovyjarjarasm.asm.ClassReader.<init>(ClassReader.java:163) at groovyjarjarasm.asm.ClassReader.<init>(ClassReader.java:284 Solution: 因為最近有很多android新的軟體版本更新,所以很多相關軟體也都更新, 嘗試升級Gradle的版本解決 更新方法: 打開File -> Project Structure -> Project,在窗口中的左邊,可以修改Gradle為7.2以上版本 modify gradle-wrapper.properties to: distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-bin.zip ----- 2021.9.台灣在疫情下,百業蕭條,大家都被限制在家裡防疫 但不知為何台灣股市還可以上17276點,現實情況明明就整個台灣人民都過得很苦, 不僅如此,因為

寫APP真的是好工作嗎? Firebase host與我對Kotlin的感想

圖片
最近在找工作,經過1個多月後,還是沒找到,有點不順利,收到很多無聲卡, 難過了好幾天,然後我感覺.... 1.寫APP真的是好工作嗎? 台灣好像不缺app軟體工程師....(現今在網路上或補習班,能找到大量手機 App 或網頁之類的前端開發課程。但一套應用系統,需要前端與後端整合才完整。很多資深工程師(well-trained)像我,不得不必須要跟新人競爭,但通常公司不太會分辨何謂新手與老手?) 2. 感覺上,IOS工程師似乎比ANDROID 工程師更稀少與缺乏,更好找工作. 3. Covid-19疫情風暴下,能不能去面試都是一個大問題. Delta 變種病毒來勢洶洶,如果去台北面試時中途被感染,可能又會害到面試官跟自己.... 4.竟然還有公司開app工程師4萬多的薪水,好多雇主都不懂行情啊~一位app工程師多難培養阿,要賺四萬多薪水我還不如去作一些不需要如此花費腦力的工作.薪水雖低一點但不用像app工程師寫程式寫到累的半死.... ----- about Kotlin  Kotlin Playground:   https://developer.android.com/training/kotlinplayground 現在找工作android都要求Kotlin, 但其實Kotlin造成更多混亂... 混亂1: Java 8現在也支援lambda與很多其他新功能...不會比Kotlin差 混亂2: android 工程師需要會java外,又要多學一套Kotlin,當然有時還要會swift/ios, dart/flutter, 基本的c/c++也都要記得. 腦容量不足.目前在google的android官方文件範例中,已經可以見到這種兩種語言並行時產生的混亂,每個重要功能的解說範例,變成需要有java的example, 也需要有Kotlin的範例,缺少任何一種,都會導致對方的擁護者抗議. 這在Stack Overflow上更是產生極多的類似抗議. 混亂3:  在開源社群中 GitHub source code 多了Kotlin分類, 導致原來java的open source 感覺低人一截,開發者對於要開發新版本時,不知道要用java還是Kotlin.....導致open source原始碼產生分支,不統一. 由Kotlin編寫的open source,對原有的j

Flutter: 設置APP版本與構建版本的注意事項,與第一個自己設計的flutter塔羅牌app上架了

圖片
當一個Flutter APP開發完成,我們要打包發佈到App Store和google play store,這時候我們需要設置APP的版本號。 android:   build.gradle file (inside app folder), 但在flutter中,我們不要直接去更改的這邊設定,因為flutter有定義正確的更改方法. defaultConfig { applicationId "xyz.markapp.mytarot" minSdkVersion 16 targetSdkVersion 30 versionCode flutterVersionCode.toInteger() versionName flutterVersionName } ------- Version name and build number At development time, you can easily find the version name and build number of a Flutter project by inspecting  pubspec.yaml .  Here is an example:  version:   1.0 .0 +2 in the case : the  version name is  1.0.0   and  the  versionCode  /  build number is  2 . ps:  versionCode  在app上架時,不能重複,所以會1.2.3.4.5...一直加上去. --- 然後,學了半年多flutter, 終於第一個flutter app上架到google play app store. google play app link: My Tarot . ios app store app link: My Tarot Card 上架成功,值得慶祝. ----- ps: ios app icon 規格: 現在ios app icon有新規定,1.png 2.不能有透明背景 不然的話會無法上架. --- 大家不要小看這個簡單的app,畢竟這是完全我自己設計的第一個flut

2021.8.8. app 創業夢碎

圖片
經濟部中小企業處創新諮詢服務中心統計資料,台灣新創企業1年內倒閉機率達到90%,另外存活下的10%在未來5年還會有90%的機率倒閉,不過這裡指的是新創,軟體新創不確定(應該更慘). 最近因為COVID-19疫情關係,創業夢碎. 2015.五年前因為受到郭的鼓勵,我跟銀行貸款並辭職出來闖闖看. 一場誤會,卻造成我辭職出來創業。 中間有一段時間還真的以為成功了.每天努力設計app,研究app相關的技術,日子比在公司上班還累,完全自主。雖然不用每天通勤趕上班,但辛苦程度不比上班累.因為你去公司上班,每月月初公司都會準時付你薪水,但自己創業,錢是要自己賺的,每天煩惱如何提高生產力,如何賺到錢?都是一個大問題.剛開始創業時,為了提高專心度,跑去麥當勞寫程式,跑去圖書館寫程式,都因為會被打擾的問題而痛苦不堪,但是在公司上班時就沒這問題,公司的環境很單純,這可是自己出來創業所沒法提前想到的問題. 但2020,2021時, app這邊收益實在慘不忍睹.導致我所有現金都花光了. 還不夠付生活費.走投無路,只好放棄,出來再開履歷找工作看看. 其實是這樣的,回想過去五年,我不後悔出來創業,也許他當時對我們所說的事是對的.我還記得當初郭對我所說的一些話,我聽到後就立刻馬上決定排除一切就出來創業. 但創業需要很多因素,不是只有熱情就可成功. 創業有三個坑: 1.研發坑: 研發新技術是無止境的,永遠有學不完的新技術,如何把技術用在產品上. 是每一個創業者要積極面對的問題,正所謂學如逆水行舟,不進則退. 2.資金坑: 各種費用如潮水般飛來, 薪水,伙食費,研發設備費,生活費,水電,aws主機費,網路費,app開發者年費.... 3.生產力坑: 自我管理是很重要的,自己創業因為沒人管,很容易就虛度一天,所以設定OKR目標,策略的訂定就極為重要.每日進度追蹤. ---- 後來想想,郭對我們所說的,也許放在他身上會成功,但換到其他人身上就不一定. 我們這些曾參加過三用的人聽了一些激勵的話,就辭去工作,仔細想想實在是不太對的事.太衝動了. 吐血了的襯衫 (略)   ----- 創業需要的五個因素MILES: M = 財力(Money):你擁有的資本,或你可以募集到的資金。 I = 才智與洞見(Intelligence and Insight):學習力、社交智商和情緒智商,以及創

Flutter: 10個必學的元件範例

圖片
前置作業: 更新dart版號: (因為default hello world 是2.7.0會導致錯誤) To fix these errors, you will need to enable null safety. Open pubspec.yaml file in your project. You will find following setting in that file. environment: sdk: ">=2.7.0 <3.0.0" In Dart language documentation, you will find statement Sound null safety is available in Dart 2.12 and Flutter 2 . You can change setting in pubspec.yaml file to use Dart 2.12 and not 2.7. Following is updated file. environment: sdk: ">=2.12.0 <3.0.0" 來開始寫幾個必須要做的範例:  ---- 1. BottomNavigationBar  link: https://api.flutter.dev/flutter/material/BottomNavigationBar-class.html 額外要知道list的取值方法:  _widgetOptions.elementAt(_selectedIndex).

admob eCPM floor Setting

圖片
寫app感想: 目前正在趕工學習Flutter: Write less, do more. 但要學的東西太多,根本學不完。光是設計與瞭解下面flutter簡單的畫面,就花了我很多時間.   我實在感到寫app真不是人幹的工作,除了要會ios, android雙平台,還要會後端,伺服器管理.然後新的東西又一直出來(例如go, flutter, kotlin....等),真不知道有人那來的勇氣說寫app很簡單的.... 接下來,來說說正題. admob 最近多了新功能 eCPM floor : ps: eCPM ($ USD) :(Effective cost per thousand impressions. An estimate of the revenue you receive for every thousand ad impressions. eCPM is calculated as (Total Earnings / Impressions) x 1000 .  ) eCPM floors, also known as minimum eCPMs, instruct the AdMob not to serve ads to that ad unit that are below the minimum eCPM you've set. You can set AdMob eCPM floors in the settings of individual ad units   這新功能真是複雜, eCPM floors可以設定: 手動指定一個值,或讓google自動去競標最佳化值.  主要是檔掉一些出價太低的廣告.因為的確有廣告主不願意出太多錢,而設定很低的廣告價格.那這樣我們辛苦設計app,好不容易帶來的流量就便宜他了. 這裡沒人會想要手動指定一個值,因為設太高或太低都不對,而且我們並不知道目前正常的eCPM普遍值是多少?我們需要的是讓google自動幫我們去用機器學習的方式幫我們去競標,找出最佳值. How Google optimized works Google optimized sets a collection of dynamic floors based on your users' geographic loca