2012-04-26 26 views
11

Lưu ý: Trước khi bạn dành thời gian đọc, hãy lưu ý rằng C2DM không được dùng nữa và được thay thế bằng GCM (http://developer.android.com/ hướng dẫn/google/gcm/c2dm.html)C2DM với PHP bằng OAuth2.0 (ClientLogin không được chấp nhận!)

- Original câu hỏi -

Liệu chúng ta có mã ví dụ cho việc thực hiện PHP server-side code để đẩy thông điệp đến các thiết bị Android sử dụng C2DM?

Tôi đã tìm kiếm nhiều mẫu mã đang sử dụng phương pháp xác thực cũ ClientLogin không được dùng nữa. tham khảo: https://developers.google.com/accounts/docs/AuthForInstalledApps (Chú ý:. ClientLogin đã chính thức phản đối tính đến tháng 20, năm 2012. Nó sẽ tiếp tục làm việc theo chính sách deprecation của chúng tôi, nhưng chúng tôi khuyên bạn để di chuyển sang OAuth 2.0 càng sớm càng tốt)

+0

bạn đã xem xét khung yii http://www.yiiframework.com/extension/c2dm/ – Suchi

+1

Tôi rất mong chờ câu trả lời ... +1 cho câu hỏi. – drulabs

+0

@Suchi Tôi đã sử dụng khung công tác Zend nên tôi sẽ không muốn thêm một khung công tác khác cho điều này. Mặc dù có vẻ rất tốt và đơn giản. Nó có sử dụng OAuth2.0 không? – Doc

Trả lời

4

Đó không áp dụng với C2DM kể từ khi là một tổ chức accountif bạn thấy https://developers.google.com/accounts/docs/AuthForInstalledApps nó saids

ClientLogin thể được sử dụng để cho phép truy cập vào cả hai tài khoản được lưu trữ trên Google thông thường và . Tài khoản được lưu trữ là tài khoản người dùng là một phần của dịch vụ Google Apps.

Ngoài ra, nếu bạn thấy đồ họa là tương tác rõ ràng giữa Người dùng dưới dạng giao diện người dùng vì CAPTCHA có liên quan.

enter image description here

Sửa

BTW bạn có thể nhìn thấy từ bài C2DM cơ chế này vẫn sẽ được sử dụng ClientLogin vẫn chìa khóa trước tháng 10 năm 2011 sắp tới hết hạn, vì vậy bạn cần phải tạo lại chúng. Đây là một bài đăng khá gần đây từ 8 ngày trước khi ClientLogin không còn được dùng nữa. C2DM Client Login Key

+0

Bạn nói đúng, chúng ta nên tiếp tục với ClientLogin mà không phải lo lắng về việc sử dụng tính năng không dùng nữa. Thảo luận thêm về điều này có thể xem tại đây http://stackoverflow.com/a/10859270/1104697 – Doc

0

Here

bạn có thể xem, nó đã hiệu quả đối với tôi.

Bạn cần đăng ký thiết bị của mình, và nhập địa chỉ email và mật khẩu tài khoản c2dm của bạn vào post.php.

Và một điều khác mà bạn cần biết là về c2dm.php, có một lỗi xảy ra khi nó cố gắng kiểm tra phản hồi của máy chủ là "200 OK". Bởi vì nó đang cố gắng để có được phản ứng này từ cơ thể. Chỉ đơn giản là bình luận dòng trong đó, sau đó chạy.

+0

Xin lỗi, tôi không thấy rằng bạn có nghĩa là về ClientLogin không được chấp nhận. Câu trả lời của tôi cũng sử dụng ClientLogin. – osayilgan

2

Tôi không thể tìm ra cách sử dụng C2DM với oAuth 2.0 nhưng đây là những gì tôi đã thử. Hy vọng điều này có thể giúp một người nào đó giải quyết vấn đề tương tự

Tôi tìm thấy tài nguyên hữu ích tại http://aleksmaus.blogspot.com/2012/01/oauth2-with-google-c2dm-push.html Nhưng khi tôi cố gắng gửi thư bằng C2DM qua OAuth 2.0, nó không hoạt động khi đã làm tốt với ClientLogin.

Đây là cách tôi đã làm với giao diện điều khiển và trình duyệt web (Tôi biết, bạn đã hỏi thi PHP Nhưng tôi hy vọng điều này cũng có thể hữu ích cho bạn.)


Khách hàng đăng nhập: (Kế)

có auth token từ:

$ curl -k -d "accountType=HOSTED_OR_GOOGLE&service=ac2dm&source=test-1.0&Email=[email account with @gmail.com without brace]&Passwd=[Google account password without brace]" https://www.google.com/accounts/ClientLogin 

Và gửi tin nhắn C2DM như thế này:

$ curl -k --header "Authorization: GoogleLogin auth=[my ClientLogin auth key without brace]" -d "registration_id=[can be acquired from Android application]" --trace c2dm_trace.txt -d collapse_key=0 https://android.apis.google.com/c2dm/send 

Sau đó, ứng dụng của tôi nhận được thành công C2DM nhắn


OAuth 2.0: (thất bại)

có một OAuth 2.0 auth chứng chỉ từ trình duyệt web bằng cách truy cập url:

https://accounts.google.com/o/oauth2/auth?response_type=code&client_id=[can be acquired from API Access menu in your API Console]&redirect_uri=urn:ietf:wg:oauth:2.0:oob&scope=https%3A%2F%2Fandroid.apis.google.com%2Fc2dm&access_type=offline 

(Google API Console: https://code.google.com/apis/console/)

Và gửi như thế này:

$ curl -k -H "Authorization: Bearer [my auth key from oAuth]" --trace curl_trace.txt -d "registration_id=[an be acquired from Android application]" -d "data.message=something to talk" -d collapse_key=0 https://android.apis.google.com/c2dm/send 

Sau đó có 401 phản ứng lỗi :(


Có bất cứ ai có thể chỉ ra những gì tôi đã làm điều gì sai?

Sửa

tôi đã tìm thấy câu "AC2DM hiện là một API trong Labs" qua đường bưu điện mà bạn có thể nhận được từ Google khi đăng ký C2DM. Và ClientLogin deprecation policy will not apply to versions, features, and functionality labeled as "experimental." Tôi không chắc chắn nhưng tôi nghĩ rằng đây là lý do mã của chúng tôi không hoạt động.

Tất nhiên, tôi hy vọng ClientLogin cũng bị phản đối và thay thế bằng OAuth 2.0 sớm

+0

401 sẽ xảy ra khi bạn không được phép xem/truy cập tài nguyên được chỉ định. Tương tự như bị cấm, hãy đảm bảo mã thông báo OAuth của bạn hợp lệ, chưa hết hạn và mọi lỗi/lỗi tiềm ẩn. Yêu cầu curl của bạn có vẻ ổn với tôi. – Tim

+0

@Tim // Cảm ơn bạn đã trả lời. Nhưng tôi đã kiểm tra thông tin đăng nhập OAuth của mình hợp lệ khi tôi thấy phản hồi 401. Tôi nghĩ rằng nó chưa được hỗ trợ vì C2DM vẫn đang trong giai đoạn thử nghiệm: ( –

Các vấn đề liên quan