全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:3514
推到 Plurk!
推到 Facebook!

PushEvents 造成黑屏卡住

答題得分者是:aftcast
boy330077
一般會員


發表:39
回覆:59
積分:19
註冊:2009-10-15

發送簡訊給我
#1 引用回覆 回覆 發表時間:2015-02-14 10:18:08 IP:114.46.xxx.xxx 訂閱
 想達到幾點

Q1. 只靠GCM 不想透過其他 例如 kinvey 直接推播訊息至手機上
A1. : 藉由 jamesjuantw.pixnet.net/blog/post/186905826-delphi-xe7-的-splash-screen-與-gcm 已經達到

Q2. 希望APP 能取得 接收到推播訊息的事件
A2. : 藉由 KinveyProvider PushEvents 也做似乎能攔截到事件了
出處: stackoverflow.com/questions/25205478/issue-with-gcm-push-notification-service-delphi-xe6

Q
3. 以下是連續動作
[APP] 尚未開啟 [server] 推送訊息 = [手機] 接收到訊息 再上方那一欄 (正常)
[手機] 點擊上方 推播的訊息 = [APP] 自動開啟 (正常)
[APP] 開啟後 [server] 推送訊息 = [手機] 上方沒有推播訊息 [APP] . PushEvents 攔截到事件 (正常)
[手機] 按下 (回桌面) 按鈕 (表示APP並未關閉?) [server] 推播訊息 = [手機] 接收到訊息 再上方那一欄 (正常)
問題發生在這 此時 [手機] 點擊上方推播的訊息 = [APP] 開啟後 黑屏不動做!!(等非長久 確定不動做)

測試過非常多次 都卡在此步驟 於是乎我將 PushEvents 給關閉 以上動做(除了 PushEvents 的攔截事件)一切正常 也都不會當掉
因此認為 因該是 PushEvents 造成的。

不知道有沒有前輩使用過 PushEvents 元件
pcplayer99
尊榮會員


發表:146
回覆:790
積分:632
註冊:2003-01-21

發送簡訊給我
#2 引用回覆 回覆 發表時間:2015-02-14 10:52:00 IP:183.239.xxx.xxx 訂閱
你的问题,也许是因为 Thread 导致的。

我猜,也许后面 Push 消息的,是另外一个 Thread,也就是说消息的 Event 可能是被后面的 Thread 在推动。如果你直接在这里写改变界面显示的代码,比如 Label1.Text := 'You have a message'; ,则这行代码,是被后面的 Thread 调用的。这样可能会出错。

你试试两个办法:

1. 在这个 Event 里面,写 TThread.Sync(ShowMyMessage); 这个 ShowMyMessage method 里面,写 Label1.Text := 'You have a message'; 这样试试看。

2. 稍微麻烦点,做一个 TStringList,在 Event 里面写:S := 'you have a message at ' DateTimeToStr(Now); StringList.Add(S);

然后,拖一个 Timer 过去,在 Timer1.OnTime 这个 Event 里面,去检查这个 StringList 是否有内容,比如:

if StringList.Count > 0 then Label1.Text := StringList.Strings[0];
StringList.Delete[0];

用这样的方法测试一下看看。

当然,如果这个方法可行,正式代码,需要多 StringList 进行保护,比如加上 CritcalSection。
pcplayer99
尊榮會員


發表:146
回覆:790
積分:632
註冊:2003-01-21

發送簡訊給我
#3 引用回覆 回覆 發表時間:2015-02-14 10:56:43 IP:183.239.xxx.xxx 訂閱
我只是猜测。我没法测试,以为在大陆,我们连不上 GOOGLE 的。
boy330077
一般會員


發表:39
回覆:59
積分:19
註冊:2009-10-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2015-02-14 11:18:42 IP:114.46.xxx.xxx 訂閱
這就有趣了

連不上 google 的

所以是用 百度雲推送?

Delphi 也可以改成 用 百度雲推送的嗎?

我看了 SDK 似乎都是 JAVA 代碼

不知道您是否有實做過
pcplayer99
尊榮會員


發表:146
回覆:790
積分:632
註冊:2003-01-21

發送簡訊給我
#5 引用回覆 回覆 發表時間:2015-02-14 15:38:46 IP:183.239.xxx.xxx 訂閱
这个应该是 Android 内置的功能。大陆的 Android 手机,各厂家自己搞一套,反正没有 Google 原本的。

所以这个功能我就没测试过。

你那边如果用 Delphi 可以获得 Push 的 Event,你可以照我说的办法试试看。

===================引 用 boy330077 文 章===================
這就有趣了

連不上 google 的

所以是用 百度雲推送?

Delphi 也可以改成 用 百度雲推送的嗎?

我看了 SDK 似乎都是 JAVA 代碼

不知道您是否有實做過
aftcast
站務副站長


發表:81
回覆:1485
積分:1763
註冊:2002-11-21

發送簡訊給我
#6 引用回覆 回覆 發表時間:2015-02-14 19:52:16 IP:114.32.xxx.xxx 訂閱
HELLO , 

你的q1就是上次也回你的 james 朋友的實作。

你的q2,回的人就是我,我在那裡名字是 sam shaw,不久前才去參與那論壇。

你的q3,照我說的實作,我自己沒遇到那樣的情形。不過我遇到過app到背景後,下次再開時就黑了,但我說的這情形是沒有push的情形下。沒有你的其他實作方式,所以無法知道從背景再回前景時,到底什麼卡住了。


------


蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
編輯記錄
aftcast 重新編輯於 2015-02-14 20:02:03, 註解 無‧
aftcast
站務副站長


發表:81
回覆:1485
積分:1763
註冊:2002-11-21

發送簡訊給我
#7 引用回覆 回覆 發表時間:2015-02-14 20:09:14 IP:114.32.xxx.xxx 訂閱
喔,另外,我在我的 google 私人社群 (看下面的簽名檔就有網址)裡,很早前我就提供源碼給加入的朋友。有一些朋友也依此而用我的方式實作了push。沒有聽他們回覆相關的問題。若有興趣可以加入我的社群,也可以問問其他已經實作的人是否有遇到。我的源碼也包含了手機app端與伺服器端工具(目前我還沒把伺服器端的源碼釋放,但可以測試)。不過,伺服器端的程式照 JamesJuan (blog上的名字叫縹緲,也是本站的會員,高手) 的說明,我想你已經完成了。
------


蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
編輯記錄
aftcast 重新編輯於 2015-02-14 20:11:13, 註解 無‧
boy330077
一般會員


發表:39
回覆:59
積分:19
註冊:2009-10-15

發送簡訊給我
#8 引用回覆 回覆 發表時間:2015-02-15 09:14:54 IP:114.46.xxx.xxx 訂閱
 感謝蕭大  已加入google+

您回答的問題讓我想了想,會不會真的是連縮到背景再回來都卡住,
於是馬上測試。

流程:
(APP PushEvent 開啟時)
[APP]尚未執行 [Server 推播] = 收到推播訊息在上面
[手機]點擊上面推播的訊息 = [APP]正常執行
[手機]按回主畫面(APP 縮小到背景) ?=[手機]正常回到桌面
[手機]按最近使用的應用程式 選我的[APP] = [APP]正常開啟
{在一次回到主畫面}
[APP]已執行 [Server 推播] = 收到推播訊息在上面
[手機]點擊上面推播的訊息 = [APP]黑屏不動
秉持測試精神 Events 關掉在一次
[APP]尚未執行 [Server 推播] = 收到推播訊息在上面
[手機]點擊上面推播的訊息 = [APP]正常執行
[手機]按回主畫面(APP 縮小到背景) ?=[手機]正常回到桌面
[手機]按最近使用的應用程式 選我的[APP] = [APP]正常開啟
{在一次回到主畫面}
[APP]已執行 [Server 推播] = 收到推播訊息在上面
[手機]點擊上面推播的訊息 = [APP]

boy330077
一般會員


發表:39
回覆:59
積分:19
註冊:2009-10-15

發送簡訊給我
#9 引用回覆 回覆 發表時間:2015-02-15 10:14:39 IP:114.46.xxx.xxx 訂閱
 感謝蕭大  已加入google+

您回答的問題讓我想了想,會不會真的是連縮到背景再回來都卡住,
於是馬上測試。

流程:
(APP PushEvent 開啟時)
[APP]尚未執行 [Server 推播] = 收到推播訊息在上面
[手機]點擊上面推播的訊息 = [APP]正常執行
[手機]按回主畫面(APP 縮小到背景) ?=[手機]正常回到桌面
[手機]按最近使用的應用程式 選我的[APP] = [APP]正常開啟
{在一次回到主畫面}
[APP]已執行 [Server 推播] = 收到推播訊息在上面
[手機]點擊上面推播的訊息 = [APP]黑屏不動
秉持測試精神 Events 關掉在一次
[APP]尚未執行 [Server 推播] = 收到推播訊息在上面
[手機]點擊上面推播的訊息 = [APP]正常執行
[手機]按回主畫面(APP 縮小到背景) ?=[手機]正常回到桌面
[手機]按最近使用的應用程式 選我的[APP] = [APP]正常開啟
{在一次回到主畫面}
[APP]已執行 [Server 推播] = 收到推播訊息在上面
[手機]點擊上面推播的訊息 = [APP]

aftcast
站務副站長


發表:81
回覆:1485
積分:1763
註冊:2002-11-21

發送簡訊給我
#10 引用回覆 回覆 發表時間:2015-02-15 19:06:04 IP:114.43.xxx.xxx 訂閱
OK, 看來與event是有關係。可以把 event 裡的程式碼貼出來嗎?  也就是說你在event裡(應該有4個?) 寫了什麼?





------


蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
boy330077
一般會員


發表:39
回覆:59
積分:19
註冊:2009-10-15

發送簡訊給我
#11 引用回覆 回覆 發表時間:2015-02-15 22:26:41 IP:114.46.xxx.xxx 訂閱
 老實說 還沒深入研究  4個事件分別是什麼

全部都寫了一行 showmessage 而已 我想看什麼時候處發什麼而已
aftcast
站務副站長


發表:81
回覆:1485
積分:1763
註冊:2002-11-21

發送簡訊給我
#12 引用回覆 回覆 發表時間:2015-02-15 23:04:16 IP:114.43.xxx.xxx 訂閱
在我的社群中,android的討論,應該是很上面的地方。就可以找到說明,並且有指示下載的網址與下載後解rar的密碼。

你去把說明看一次,並下載回去compile,就會知道是幹啥的。

另外,我極粗的判別,就是因為 showmessage 造成的。 它很xxoo 也不是thread-safe的 (不理解的話,以後理解)。是不是你在你的form上,放個 tmemo,然後在分別不同的 event上去 寫那個 tmemo,就只道何時觸發什麼。

另外,當然,直接下載我的範例就可以知道何時觸發,也不會黑的情形發生。


===================引 用 boy330077 文 章===================
老實說 還沒深入研究 4個事件分別是什麼

全部都寫了一行 showmessage 而已 我想看什麼時候處發什麼而已
------


蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
編輯記錄
aftcast 重新編輯於 2015-02-15 23:05:44, 註解 無‧
boy330077
一般會員


發表:39
回覆:59
積分:19
註冊:2009-10-15

發送簡訊給我
#13 引用回覆 回覆 發表時間:2015-02-17 08:34:55 IP:114.46.xxx.xxx 訂閱
 感謝 蕭大  showmessage  拿掉  確實沒問題了

跟預期的結果一樣動作

1.我現在上方推進來的訊息 都是手動去按叉叉清掉 有辦法可以進入APP時清掉嗎?
2.研究了一下您的範例
unique_ptr root(new TJSONObject);
我翻不過來Delphi 查了一下說是什麼智慧指標? C 才有的東西?? DELPHI 因該用什麼對應呢?
底下也只是 AddPair 不知道是何用

編輯記錄
boy330077 重新編輯於 2015-02-17 08:50:28, 註解 無‧
aftcast
站務副站長


發表:81
回覆:1485
積分:1763
註冊:2002-11-21

發送簡訊給我
#14 引用回覆 回覆 發表時間:2015-02-17 09:19:34 IP:114.32.xxx.xxx 訂閱
進去後執行

TJSONObject root := TJSONObject.Create;




------


蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
boy330077
一般會員


發表:39
回覆:59
積分:19
註冊:2009-10-15

發送簡訊給我
#15 引用回覆 回覆 發表時間:2015-02-17 09:21:40 IP:114.46.xxx.xxx 訂閱
 不知道為什麼按修改  跳出錯誤103  只好再回一篇 不是故意的!

上面說的 unique_ptr 似乎是個指標

我改以

root: TJSONObject;

root:=TJSONObject.Create;

root.AddPair('deviceID',deviceID);
root.AddPair('deviceToken',deviceToken);

這樣的方式 不知道正不正確

這個事件 似乎是取得 GCM的ID? 可是那個deviceID 難道也是 GCM給我的嗎? 是唯一值? 我可以以這個來做為索引?
aftcast
站務副站長


發表:81
回覆:1485
積分:1763
註冊:2002-11-21

發送簡訊給我
#16 引用回覆 回覆 發表時間:2015-02-17 09:28:23 IP:114.32.xxx.xxx 訂閱
deviceID 你手機的一組號碼 (幾乎可以說是唯一,但我也不敢說100%唯一,因為…有很多的因素),它不是 gcm 給的,是依手機的一些值而計算出來的。

deviceToken 是 手機向 gcm 認證後, gcm 回給手機一組識別碼。(上回我有和你說,這個碼可能會有所改變,但若有改的時候,你的 push server (pc上)會收到response說它有改)

關於其他的一些細節也可以在g 社群上有貼圖與說明,也可以請教社友。




------


蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
boy330077
一般會員


發表:39
回覆:59
積分:19
註冊:2009-10-15

發送簡訊給我
#17 引用回覆 回覆 發表時間:2015-02-17 09:36:51 IP:114.46.xxx.xxx 訂閱
 有有  你上次說的  我有看到回傳的狀況了

大概是這樣

{"multicast_id":8202377726738822498,"success":1,"failure":0,"canonical_ids":1,"results":[{"registration_id":"APA91bEJ8COe5RnNLUriq95qUD5w8pf1CmqkgTC6bBKYyOiAizUc-1rBw_dIB2QUkttIwn0H37UGI4XxnodAtjsWHgLGHVcNDoKkJUbHn49By1-RddLKRI809-wSUjWgIiGYDTy7Z5eSSatzGf2WkXw1sKNa9veui6R2h3KXTfmgxBwy0zOOIXw","message_id":"0:1424136933411927‘8f4eacf9fd7ecd"}]}

會多一組registratio_id canonical_ids 也會是1

唯一值的部分 大概也能理解您說的

真感謝您
系統時間:2024-04-20 23:03:04
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!